| | import pandas as pd
|
| | import re
|
| | import os
|
| | import joblib
|
| | from sklearn.feature_extraction.text import TfidfVectorizer
|
| | from sklearn.linear_model import LogisticRegression
|
| | from sklearn.model_selection import train_test_split
|
| |
|
| |
|
| | df = pd.read_csv("data/spam.csv", encoding='latin-1')
|
| | df = df[['v1', 'v2']]
|
| | df.columns = ['label', 'message']
|
| | df.drop_duplicates(inplace=True)
|
| | df['message'] = df['message'].fillna("")
|
| | df['label'] = df['label'].fillna(df['label'].mode()[0])
|
| |
|
| |
|
| | def clean_text(text):
|
| | text = text.lower()
|
| | text = re.sub(r'\W', ' ', text)
|
| | text = re.sub(r'\s+[a-zA-Z]\s+', ' ', text)
|
| | text = re.sub(r'\s+', ' ', text)
|
| | return text.strip()
|
| |
|
| | df['message'] = df['message'].apply(clean_text)
|
| | df['label'] = df['label'].map({'ham': 0, 'spam': 1})
|
| |
|
| |
|
| | X_train, X_test, y_train, y_test = train_test_split(
|
| | df['message'], df['label'], test_size=0.2, random_state=42
|
| | )
|
| |
|
| |
|
| | vectorizer = TfidfVectorizer(max_features=5000)
|
| | X_train_vec = vectorizer.fit_transform(X_train)
|
| | X_test_vec = vectorizer.transform(X_test)
|
| |
|
| |
|
| | model = LogisticRegression()
|
| | model.fit(X_train_vec, y_train)
|
| |
|
| |
|
| | os.makedirs("Models", exist_ok=True)
|
| | joblib.dump(model, "Models/logistic_model.pkl")
|
| | joblib.dump(vectorizer, "Models/logvectorizer.pkl")
|
| |
|
| | print("✅ Logistic model trained & saved successfully!")
|
| |
|