# Erkläre die Vorhersage mit LIME def analyze_lime_feature_importance(instance, rf_model, lime_explainer, num_features=5): """ Analysiert die Feature-Wichtigkeiten der LIME-Erklärung. """ # LIME-Erklärung generieren exp = lime_explainer.explain_instance( instance, rf_model.predict_proba, num_features=num_features ) # Random Forest Vorhersage (nur zur Information) feature_names = rf_model.feature_names_in_ instance_df = pd.DataFrame([instance], columns=feature_names) rf_prediction = rf_model.predict_proba(instance_df)[0, 1] # Feature-Wichtigkeiten aus LIME extrahieren feature_importance = exp.as_list() # Visualisierung der Feature-Wichtigkeiten plt.figure(figsize=(10, 6)) # Features und ihre Wichtigkeiten trennen features, importances = zip(*feature_importance) # Balkendiagramm erstellen colors = ['red' if imp < 0 else 'green' for imp in importances] y_pos = np.arange(len(features)) plt.barh(y_pos, importances, color=colors) plt.yticks(y_pos, features) plt.xlabel('Feature-Einfluss') plt.title('LIME Feature-Wichtigkeiten') # Vertikale Linie bei 0 für bessere Lesbarkeit plt.axvline(x=0, color='black', linestyle='-', alpha=0.3) plt.grid(alpha=0.3) plt.tight_layout() plt.savefig('output/lime_feature_importance.png', dpi=300) plt.show() # Ausgabe der Ergebnisse print("\nLIME Feature-Wichtigkeiten Analyse:") print("-" * 50) print(f"Random Forest Vorhersage für diese Instanz: {rf_prediction:.4f}") print("\nFeature-Einflüsse:") for feature, importance in feature_importance: print(f"{feature}: {importance:+.4f}") return { 'rf_prediction': rf_prediction, 'feature_importance': dict(feature_importance) } # Analysiere wie gut LIME die RF-Vorhersage erklärt importance_analysis = analyze_lime_feature_importance( instance=instance, rf_model=best_rf_model, lime_explainer=lime_explainer, num_features=20 )