slogan3

Analyseer en visualiseer modelprestaties met Scikit-learn

description

Met deze prompt kun je diepgaande inzichten krijgen in de prestaties van je machine learning model. Het helpt je om specifieke zwakke punten te identificeren en visueel inzicht te verkrijgen, waardoor je gericht verbeteringen kunt doorvoeren. Dit gaat verder dan alleen numerieke evaluatie en maakt het makkelijker om je model te interpreteren en uit te leggen.

prompt

Help me met het analyseren en visualiseren van de prestaties van mijn Scikit-learn model. Beschrijving van mijn dataset: <beschrijf je dataset> Type model (bijv. classificatie, regressie): <specificeer het modeltype> Gebruikte Scikit-learn algoritme(s): <vermeld de gebruikte algoritme ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorbeeld van hoe je de prestaties van je classificatiemodel kunt analyseren en visualiseren met Scikit-learn. Ik geef je code en uitleg voor het genereren van een ROC-curve en een confusion matrix, inclusief het bekijken van feature importance voor het RandomForestClassifier. ```python import matplotlib.pyplot as plt import seaborn as sns from sklearn.metrics import roc_curve, roc_auc_score, confusion_matrix, ConfusionMatrixDisplay import numpy as np # Veronderstel dat je je data al hebt gesplitst in X_test, y_test en je model hebt getraind # Voorspellingen maken y_pred = model.predict(X_test) y_proba = model.predict_proba(X_test)[:, 1] # voor ROC-curve # ROC-curve plotten fpr, tpr, thresholds = roc_curve(y_test, y_proba) roc_auc = roc_auc_score(y_test, y_proba) plt.figure(figsize=(8,6)) plt.plot(fpr, tpr, color='blue', lw=2, label=f'ROC-curve (area = {roc_auc:.2f})') plt.plot([0, 1], [0, 1], color='grey', lw=1, linestyle='--') plt.xlabel('False Positieve Ratio') plt.ylabel('True Positieve Ratio') plt.title('ROC-curve voor je Model') plt.legend(loc='lower right') plt.show() # Confusiematrix plotten cm = confusion_matrix(y_test, y_pred) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=model.classes_) disp.plot(cmap=plt.cm.Blues) plt.title('Confusiematrix') plt.show() # Feature importance (voor RandomForest) if hasattr(model, 'feature_importances_'): feature_names = X_test.columns # Als X_test een DataFrame is importances = model.feature_importances_ indices = np.argsort(importances) plt.figure(figsize=(8,6)) plt.title('Feature Importances') plt.barh(range(len(indices)), importances[indices], align='center') plt.yticks(range(len(indices)), [feature_names[i] for i in indices]) plt.xlabel('Importance') plt.show() ``` **Uitleg:** - De ROC-curve toont de trade-off tussen sensitiviteit en specificiteit voor verschillende drempels. Hoe hoger de AUC (Area Under Curve), hoe beter het model. - De confusion matrix geeft inzicht in de juiste en fout-voorspellingen, inclusief true positives, false positives, true negatives en false negatives. - De feature importance geeft weer welke variabelen het meest bijdragen aan de voorspellingen van het RandomForest-model. **Verbeterpunten:** - Analyseer de ROC-curve en AUC voor mogelijke optimalisatie van de drempel. - Kijk naar de confusion matrix om te zien of je model vaak false positives of false negatives maakt en pas je drempel daarop aan. - Overweeg het gebruik van andere metrics zoals recall, F1-score voor een betere balans. - Experimenteer met hyperparameter tuning en feature engineering om de prestaties verder te verbeteren. Als je meer hulp nodig hebt of specifieke vragen hebt, laat het gerust weten!
provider: deepseek
model: deepseek-chat
Hier is een uitgebreide voorbeeldcode met uitleg om uw modelprestaties te analyseren en visualiseren: ```python import matplotlib.pyplot as plt import seaborn as sns from sklearn.metrics import (roc_curve, auc, confusion_matrix, classification_report, precision_recall_curve) from sklearn.model_selection import cross_val_score import numpy as np # Stel de plotstijl in plt.style.use('seaborn-v0_8') sns.set_palette("husl") # 1. ROC Curve voor beide modellen def plot_roc_curve(y_true, y_proba_rf, y_proba_svc, model_names): plt.figure(figsize=(10, 8)) for i, (y_proba, name) in enumerate(zip([y_proba_rf, y_proba_svc], model_names)): fpr, tpr, _ = roc_curve(y_true, y_proba) roc_auc = auc(fpr, tpr) plt.plot(fpr, tpr, lw=2, label=f'{name} (AUC = {roc_auc:.3f})') plt.plot([0, 1], [0, 1], 'k--', lw=2) plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('ROC Curve - Modelvergelijking') plt.legend(loc="lower right") plt.grid(True, alpha=0.3) plt.show() # 2. Confusion Matrix def plot_confusion_matrix(y_true, y_pred, model_name): cm = confusion_matrix(y_true, y_pred) plt.figure(figsize=(8, 6)) sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['Negatief', 'Positief'], yticklabels=['Negatief', 'Positief']) plt.title(f'Confusion Matrix - {model_name}') plt.ylabel('Werkelijke label') plt.xlabel('Voorspeld label') plt.show() # 3. Feature Importance (alleen voor Random Forest) def plot_feature_importance(model, feature_names): importance = model.feature_importances_ indices = np.argsort(importance)[::-1] plt.figure(figsize=(10, 6)) plt.title("Feature Importance - Random Forest") plt.bar(range(len(importance)), importance[indices]) plt.xticks(range(len(importance)), [feature_names[i] for i in indices], rotation=45) plt.tight_layout() plt.show() # 4. Gedetailleerde classificatierapport def print_detailed_report(y_true, y_pred, model_name): print(f"=== Gedetailleerd Classificatierapport - {model_name} ===") print(classification_report(y_true, y_pred)) print("\n") # Voorbeeld gebruik (pas aan naar uw data): # Veronderstel dat u deze variabelen heeft: # X_train, X_test, y_train, y_test, rf_model, svc_model # ROC Curve # plot_roc_curve(y_test, rf_model.predict_proba(X_test)[:, 1], # svc_model.decision_function(X_test), # ['Random Forest', 'SVC']) # Confusion Matrix voor Random Forest # plot_confusion_matrix(y_test, rf_model.predict(X_test), 'Random Forest') # Feature Importance # plot_feature_importance(rf_model, ['leeftijd', 'inkomen', 'aankoopgeschiedenis']) # Cross-validatie voor betrouwbaardere metrics def cross_validation_scores(model, X, y, cv=5): scores = cross_val_score(model, X, y, cv=cv, scoring='accuracy') print(f"Cross-validatie scores: {scores}") print(f"Gemiddelde accuracy: {scores.mean():.3f} (± {scores.std()*2:.3f})") # Verbeterpunten analyse def suggest_improvements(): print("=== Verbeterpunten ===") print("1. Feature Engineering:") print(" - Creëer interactiefuncties (bijv. leeftijd*inkomen)") print(" - Normaliseer/scale features voor SVC") print(" - Overweeg polynomial features") print("\n2. Hyperparameter tuning:") print(" - Gebruik GridSearchCV voor optimale parameters") print(" - Experimenteer met verschillende kernel voor SVC") print(" - Pas n_estimators en max_depth aan voor Random Forest") print("\n3. Data kwaliteit:") print(" - Check voor class imbalance") print(" - Overweeg SMOTE voor balanced data") print(" - Analyseer outliers in leeftijd/inkomen") # Gebruiksvoorbeeld: # cross_validation_scores(rf_model, X_train, y_train) # suggest_improvements() ``` **Belangrijke stappen voor implementatie:** 1. **Zorg dat u predict probabilities heeft**: ```python # Voor Random Forest y_proba_rf = rf_model.predict_proba(X_test)[:, 1] # Voor SVC (moet probability=True hebben tijdens training) svc_model = SVC(probability=True) ``` 2. **Voer de analyses uit**: ```python # ROC curve plot_roc_curve(y_test, y_proba_rf, y_proba_svc, ['Random Forest', 'SVC']) # Gedetailleerde rapporten print_detailed_report(y_test, rf_model.predict(X_test), 'Random Forest') ``` 3. **Interpretatie tips**: - **ROC Curve**: Hoe dichter bij linksboven, hoe beter - **Confusion Matrix**: Analyseer false positives/negatives - **Feature Importance**: Identificeer meest invloedrijke features **Volgende stappen voor verbetering**: - Hyperparameter tuning met GridSearchCV - Feature engineering - Class imbalance aanpakken - Ensemble methoden overwegen Deze analyse geeft u een compleet beeld van uw modelprestaties en concrete verbeterpunten!