slogan3

Ontwikkel een Python Script voor Machine Learning Model Evaluatie en Interpretatie

description

Met deze prompt ontwikkel je een Python script dat je helpt om machine learning modellen grondig te evalueren en te begrijpen. Je leert belangrijke prestatie-indicatoren berekenen en visualiseren, waardoor je beter inzicht krijgt in de kwaliteit van je model en verbeteringen kunt aanbrengen. Dit is waardevol voor iedereen die met Python en machine learning werkt en verder wil gaan dan alleen het trainen van modellen.

prompt

Help me een Python script te schrijven dat een machine learning model evalueert en interpreteert op basis van de dataset: <voer de datasetbeschrijving of bestandsnaam in>. Inclusief het berekenen van ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorbeeld Python-script dat een machine learning model traint, evalueert en interpreteert op basis van jouw dataset "klantgegevens.csv". Het script bevat het inladen van data, preprocessing, modeltraining, evaluatie met prestatie-indicatoren, en eenvoudige visualisaties. ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, LabelEncoder from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report import matplotlib.pyplot as plt import seaborn as sns # 1. Data inladen data = pd.read_csv('klantgegevens.csv') # 2. Data preprocessing # Veronderstel dat de laatste kolom de target is, pas aan indien anders X = data.drop('koopgedrag', axis=1) y = data['koopgedrag'] # Encodeer categorische features indien aanwezig for col in X.select_dtypes(include=['object']).columns: le = LabelEncoder() X[col] = le.fit_transform(X[col]) # Encodeer de target indien nodig if y.dtype == 'object': y = LabelEncoder().fit_transform(y) # 3. Data splitsen in training en testset X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 4. Data normaliseren (optioneel, afhankelijk van model) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # 5. Model trainen model = RandomForestClassifier(random_state=42) model.fit(X_train, y_train) # 6. Voorspellingen maken y_pred = model.predict(X_test) # 7. Prestatie-indicatoren berekenen accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred) recall = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) print(f'Nauwkeurigheid: {accuracy:.2f}') print(f'Precisie: {precision:.2f}') print(f'Recall: {recall:.2f}') print(f'F1-score: {f1:.2f}') # 8. Confusiematrix visualiseren cm = confusion_matrix(y_test, y_pred) plt.figure(figsize=(6,4)) sns.heatmap(cm, annot=True, fmt='d', cmap='Blues') plt.xlabel('Voorspelde label') plt.ylabel('Echte label') plt.title('Confusiematrix') plt.show() # 9. Classificatie rapport (optioneel) print('Classificatie rapport:') print(classification_report(y_test, y_pred)) ``` **Hoe interpreteer en visualiseer je de resultaten:** - **Nauwkeurigheid** (accuracy): Percentage correcte voorspellingen. Hoe hoger, hoe beter. - **Precisie** (precision): Hoeveel van de positieve voorspellingen correct waren. Belangrijk bij kosten van false positives. - **Recall**: Hoeveel van de werkelijke positives correct zijn geïdentificeerd. Belangrijk bij kosten van false negatives. - **F1-score**: Harmonie tussen precisie en recall. Goede overall maat voor balans. **Visualisatie:** - De **confusiematrix** geeft weer hoeveel voorspellingen correct/incorrect waren per klasse. Het helpt om inzicht te krijgen in specifieke fouten. Met deze informatie kun je beoordelen hoe goed je model presteert en waar mogelijk verbetering nodig is, bijvoorbeeld door meer gegevens, feature engineering of andere modellen te proberen.
provider: deepseek
model: deepseek-chat
Hier is een compleet Python script voor evaluatie en interpretatie van een machine learning model: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, LabelEncoder from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import (accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report, roc_curve, auc, precision_recall_curve) from sklearn.inspection import permutation_importance # Laad de dataset try: df = pd.read_csv('klantgegevens.csv') print("Dataset geladen. Eerste 5 rijen:") print(df.head()) print(f"\nDataset vorm: {df.shape}") print(f"\nKolomnamen: {df.columns.tolist()}") print(f"\nData types:\n{df.dtypes}") print(f"\nOntbrekende waarden:\n{df.isnull().sum()}") except FileNotFoundError: print("Fout: klantgegevens.csv niet gevonden. Zorg dat het bestand in dezelfde map staat.") exit() # Data preprocessing print("\n=== DATA PREPROCESSING ===") # Identificeer doelvariabele (pas aan op basis van jouw dataset) # Stel dat 'koopgedrag' de doelvariabele is if 'koopgedrag' not in df.columns: print("Waarschuwing: 'koopgedrag' kolom niet gevonden. Controleer de kolomnamen.") # Toon beschikbare kolommen voor selectie print(f"Beschikbare kolommen: {df.columns.tolist()}") exit() # Verwerk categorische variabelen label_encoder = LabelEncoder() categorical_cols = df.select_dtypes(include=['object']).columns for col in categorical_cols: if col != 'koopgedrag': # Doelvariabele niet encoderEN df[col] = label_encoder.fit_transform(df[col].astype(str)) # Codeer doelvariabele df['koopgedrag'] = label_encoder.fit_transform(df['koopgedrag']) # Splits features en target X = df.drop('koopgedrag', axis=1) y = df['koopgedrag'] # Splits data in train en test sets X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y ) # Schaal numerieke features scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # Train model (Random Forest als voorbeeld) print("\n=== MODEL TRAINING ===") model = RandomForestClassifier(n_estimators=100, random_state=42) model.fit(X_train, y_train) # Maak voorspellingen y_pred = model.predict(X_test) y_pred_proba = model.predict_proba(X_test) # Bereken prestatie-indicatoren print("\n=== PRESTATIE-INDICATOREN ===") accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred, average='weighted') recall = recall_score(y_test, y_pred, average='weighted') f1 = f1_score(y_test, y_pred, average='weighted') print(f"Nauwkeurigheid (Accuracy): {accuracy:.4f}") print(f"Precisie (Precision): {precision:.4f}") print(f"Recall: {recall:.4f}") print(f"F1-score: {f1:.4f}") # Gedetailleerd classificatierapport print("\n=== GEDETAILLEERD CLASSIFICATIERAPPORT ===") print(classification_report(y_test, y_pred)) # Verwarringsmatrix print("\n=== VERWARRINGSMATRIX ===") cm = confusion_matrix(y_test, y_pred) print(cm) # Visualisaties print("\n=== VISUALISATIES ===") plt.style.use('seaborn-v0_8') # 1. Verwarringsmatrix heatmap plt.figure(figsize=(10, 8)) sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=label_encoder.classes_, yticklabels=label_encoder.classes_) plt.title('Verwarringsmatrix') plt.ylabel('Werkelijke waarden') plt.xlabel('Voorspelde waarden') plt.tight_layout() plt.savefig('verwarringsmatrix.png') plt.show() # 2. Feature importance feature_importance = model.feature_importances_ feature_names = df.drop('koopgedrag', axis=1).columns plt.figure(figsize=(12, 8)) indices = np.argsort(feature_importance)[::-1] plt.bar(range(len(feature_importance)), feature_importance[indices]) plt.xticks(range(len(feature_importance)), feature_names[indices], rotation=45) plt.title('Belangrijkheid van features') plt.tight_layout() plt.savefig('feature_importance.png') plt.show() # 3. ROC Curve (voor binaire classificatie) if len(np.unique(y)) == 2: fpr, tpr, _ = roc_curve(y_test, y_pred_proba[:, 1]) roc_auc = auc(fpr, tpr) plt.figure(figsize=(10, 8)) plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})') plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic (ROC) Curve') plt.legend(loc="lower right") plt.savefig('roc_curve.png') plt.show() # 4. Precision-Recall Curve precision_vals, recall_vals, _ = precision_recall_curve(y_test, y_pred_proba[:, 1]) plt.figure(figsize=(10, 8)) plt.plot(recall_vals, precision_vals, marker='.') plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall Curve') plt.savefig('precision_recall_curve.png') plt.show() # Interpretatie van resultaten print("\n=== INTERPRETATIE VAN RESULTATEN ===") print(""" 1. NAUWKeurigheid (Accuracy): - Percentage correcte voorspellingen - Goed voor gebalanceerde datasets 2. PRECISIE (Precision): - Van alle positieve voorspellingen, hoeveel waren correct? - Belangrijk wanneer false positives kostbaar zijn 3. RECALL: - Van alle werkelijke positieve gevallen, hoeveel hebben we correct voorspeld? - Belangrijk wanneer false negatives kostbaar zijn 4. F1-SCORE: - Harmonisch gemiddelde van precisie en recall - Goede overall maatstaf voor onevenwichtige datasets INTERPRETATIE TIPS: - Accuracy > 80%: Goed model - Precision > Recall: Model is conservatief (minder false positives) - Recall > Precision: Model is agressief (minder false negatives) - F1-score dicht bij 1: Uitstekende balans tussen precisie en recall """) # Permutatie importance voor betere interpretatie print("\n=== PERMUTATIE IMPORTANCE ===") result = permutation_importance(model, X_test, y_test, n_repeats=10, random_state=42) perm_importance = result.importances_mean plt.figure(figsize=(12, 8)) indices = np.argsort(perm_importance)[::-1] plt.bar(range(len(perm_importance)), perm_importance[indices]) plt.xticks(range(len(perm_importance)), feature_names[indices], rotation=45) plt.title('Permutatie Importance (betrouwbaardere feature ranking)') plt.tight_layout() plt.savefig('permutatie_importance.png') plt.show() print("\nScript succesvol voltooid! Alle visualisaties zijn opgeslagen als PNG-bestanden.") ``` ## Hoe te interpreteren: ### 📊 **Prestatie-indicatoren:** - **Nauwkeurigheid**: Percentage correcte voorspellingen (80%+ = goed) - **Precisie**: Hoeveel van de positieve voorspellingen waren correct? - **Recall**: Hoeveel van de werkelijke positieve gevallen werden gedetecteerd? - **F1-score**: Balans tussen precisie en recall (dicht bij 1 = excellent) ### 📈 **Visualisaties:** 1. **Verwarringsmatrix**: Toont correcte/incorrecte voorspellingen per klasse 2. **Feature Importance**: Welke klantkenmerken zijn het meest voorspellend 3. **ROC Curve**: Trade-off tussen true positive rate en false positive rate 4. **Precision-Recall Curve**: Relatie tussen precisie en recall ### 💡 **Praktische tips:** - Check eerst of de dataset gebalanceerd is - Let op overfitting (groot verschil tussen train/test scores) - Gebruik permutatie importance voor betere feature interpretatie - Pas de doelvariabele aan naar jouw specifieke kolomnaam Zorg dat `klantgegevens.csv` in dezelfde map staat en pas de kolomnamen aan volgens jouw dataset!
error: Generation failed [deepseek] prompt_id=1535 locale=es err=DeepSeek connection/timeout