TruthRadar / train_model.py
mikey-077's picture
Upload 7 files
78e16f1 verified
Raw
History Blame Contribute Delete
2.32 kB
# train_model.py
import pandas as pd
import re
import joblib
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
# --- 1) LOAD CSVs WITH PROPER ENCODING ---
fake = pd.read_csv(r"C:\Users\Srikar M\OneDrive\Documents\python\TruthRadar\Fake.csv\Fake.csv", encoding="utf-8-sig")
real = pd.read_csv(r"C:\Users\Srikar M\OneDrive\Documents\python\TruthRadar\True.csv\True.csv", encoding="utf-8-sig")
# DEBUG: confirm columns
print("🔥 Fake columns:", fake.columns.tolist())
print("🔥 Real columns:", real.columns.tolist())
# --- 2) BUILD 'content' AND 'label' ON EACH DF INDIVIDUALLY ---
# Take title + first 300 chars of text
fake["content"] = fake["title"] + " " + fake["text"].str[:300]
real["content"] = real["title"] + " " + real["text"].str[:300]
fake["label"] = "FAKE"
real["label"] = "REAL"
# --- 3) CONCATENATE AND SHUFFLE ---
df = pd.concat([fake, real], ignore_index=True)
# Now df has columns: ['title','text','subject','date','content','label']
df = df[["content", "label"]].sample(frac=1, random_state=42).reset_index(drop=True)
# --- 4) PREPROCESS TEXT (same as in Flask) ---
def clean_text(text):
text = re.sub(r"http\S+", "", text)
text = re.sub(r"[^a-zA-Z\s]", "", text)
return text.lower()
df["content"] = df["content"].apply(clean_text)
# --- 5) SPLIT INTO TRAIN/TEST ---
X = df["content"]
y = df["label"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# --- 6) VECTORIZE ---
vectorizer = TfidfVectorizer(stop_words="english", max_df=0.7, ngram_range=(1,2))
X_train_tfidf = vectorizer.fit_transform(X_train)
X_test_tfidf = vectorizer.transform(X_test)
# --- 7) TRAIN MODEL ---
model = LogisticRegression(max_iter=1000)
model.fit(X_train_tfidf, y_train)
# --- 8) EVALUATE ---
y_pred = model.predict(X_test_tfidf)
print("\n🧠 Model Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
# --- 9) SAVE ARTIFACTS ---
joblib.dump(model, "app/model.pkl")
joblib.dump(vectorizer, "app/vectorizer.pkl")
print("\n✅ Model and vectorizer saved to app/")