「日拱一码」040 机器学习-不同模型可解释方法

目录

K最近邻(KNN) - 基于距离的模型

决策边界可视化

 查看特定样本的最近邻

​随机森林(RF) - 树模型

feature_importances_

SHAP值分析

可视化单棵树

多层感知器(MLP) - 神经网络

部分依赖图

LIME解释器

权重可视化

支持向量回归(SVR) - 核方法

支持向量可视化

部分依赖图

决策边界可视化(对于分类问题)

通用解释方法(适用于所有模型)

Permutation Importance

全局代理模型

Anchor解释法

可视化工具推荐

总结建议


针对不同类型的机器学习模型,我们需要使用不同的可解释性技术。以下是不同模型类型的可解释性分析方法

K最近邻(KNN) - 基于距离的模型

  • 决策边界可视化

## KNN-基于距离的模型
# 1. 决策边界可视化

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import DecisionBoundaryDisplay

# 加载数据
iris = load_iris()
X = iris.data[:, :2]
y = iris.target

# 训练模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X, y)

disp = DecisionBoundaryDisplay.from_estimator(
    knn, X, response_method="predict",
    alpha=0.5, grid_resolution=200,
    xlabel=iris.feature_names[0], ylabel=iris.feature_names[1],
)
disp.ax_.scatter(X[:, 0], X[:, 1], c=y, edgecolor="k")
plt.title("KNN Decision Boundaries")
plt.show()

  •  查看特定样本的最近邻

# 2. 查看特定样本的最近邻

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import DecisionBoundaryDisplay

# 加载数据
iris = load_iris()
X = iris.data[:, :2]
y = iris.target

# 训练模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X, y)

sample_idx = 10
distances, indices = knn.kneighbors(X[sample_idx].reshape(1, -1))
print(f"最近邻索引: {indices}")
print(f"距离: {distances}")
# 最近邻索引: [[10 48  5 16 36]]
# 距离: [[0.        0.1       0.2       0.2       0.2236068]]


# 可视化最近邻
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.3, label="All points")
plt.scatter(X[sample_idx, 0], X[sample_idx, 1], c='red', s=100, label="Query point")
plt.scatter(X[indices[0], 0], X[indices[0], 1], c='blue', s=50, label="Neighbors")
plt.legend()
plt.title(f"KNN Neighbors (k={knn.n_neighbors})")
plt.show()

随机森林(RF) - 树模型

  • feature_importances_

## RF-树模型
from sklearn.ensemble import RandomForestClassifier
import shap
from sklearn.datasets import load_iris
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

iris = load_iris()
X = iris.data
y = iris.target

# 训练模型
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X, y)

# 1. 特征重要性
importances = rf.feature_importances_
plt.barh(iris.feature_names, importances)
plt.title("Random Forest Feature Importance")
plt.tight_layout()
plt.show()

  • SHAP值分析

# 2. SHAP值分析
explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X[:100])  # 计算前100个样本的SHAP值

shap.summary_plot(sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值