Deepfake-Shield / src /train_baseline.py
leoorb's picture
Upload 23 files
9c1a6bf verified
Raw
History Blame Contribute Delete
2.46 kB
import os
import pandas as pd
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 classification_report, accuracy_score
def main():
print("Chargement des données...")
data_path = 'data/dataset_clean.csv'
if not os.path.exists(data_path):
print(f"Erreur : Le fichier {data_path} est introuvable. Veuillez d'abord exécuter data_preparation.py.")
return
df = pd.read_csv(data_path)
# Vérification que les colonnes 'text' et 'label' existent
if 'text' not in df.columns or 'label' not in df.columns:
print("Erreur : Le dataset ne contient pas les colonnes 'text' et 'label' requises.")
return
# Gestion des valeurs nulles éventuelles
df = df.dropna(subset=['text', 'label'])
X = df['text']
y = df['label']
print("Séparation des données (80% Train, 20% Test)...")
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("Vectorisation du texte avec TfidfVectorizer (max_features=5000)...")
vectorizer = TfidfVectorizer(max_features=5000)
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)
print("Entraînement du modèle Logistic Regression de référence...")
model = LogisticRegression(random_state=42, max_iter=1000)
model.fit(X_train_vec, y_train)
print("Évaluation du modèle sur le jeu de test...")
y_pred = model.predict(X_test_vec)
acc = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=["Humain (0)", "IA (1)"])
print("\n" + "="*40)
print("RÉSULTATS DE L'ÉVALUATION")
print("="*40)
print(f"Accuracy Score: {acc:.4f}\n")
print("Classification Report:")
print(report)
print("="*40 + "\n")
print("Sauvegarde du modèle et du vectoriseur...")
os.makedirs('models', exist_ok=True)
model_path = 'models/baseline_logreg_model.joblib'
vectorizer_path = 'models/tfidf_vectorizer.joblib'
joblib.dump(model, model_path)
joblib.dump(vectorizer, vectorizer_path)
print(f"Modèle sauvegardé dans : {model_path}")
print(f"Vectoriseur sauvegardé dans : {vectorizer_path}")
print("Terminé avec succès !")
if __name__ == "__main__":
main()