Files
ExplainableAI/extracted_cells/cell17.py

65 lines
2.0 KiB
Python

# 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
)