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
tags
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!