作为数据科学家或机器学习从业者,将可解释性集成到机器学习模型中可以帮助决策者和其他利益相关者有更多的可见性并可以让他们理解模型输出决策的解释 。
在本文中,我将介绍两个可以帮助了解模型的决策过程的模型 LIME 和 SHAP 。
模型我们将使用来自 Kaggle 的糖尿病数据集 。主要关注点是可解释性,因此我们不会花太多时间尝试拥有花哨的模型 。
# Load useful librariesimport pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import cross_val_score`# Read data setdf = pd.read_csv("./data/diabetes.csv")# Separate Features and Target VariablesX = df.drop(columns='Outcome')y = df['Outcome']# Create Train & Test DataX_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.3, stratify =y, random_state = 13)# Build the modelrf_clf = RandomForestClassifier(max_features=2, n_estimators =100 ,bootstrap = True)# Make prediction on the testing datay_pred = rf_clf.predict(X_test)# Classification Report print(classification_report(y_pred, y_test))rf_clf.fit(X_train, y_train)SHAP它是 SHapley Additive exPlanations的缩写 。该方法旨在通过计算每个特征对预测的贡献来解释实例/观察的预测 。
# Import the SHAP libraryimport shap# load JS visualization code to notebookshap.initjs()# Create the explainerexplainer = TreeExplainer(rf_clf)"""Compute shap_values for all of X_test rather instead of a single row, to have more data for plot."""shap_values = explainer.shap_values(X_test)print("Variable Importance Plot - Global Interpretation")figure = plt.figure()shap.summary_plot(shap_values, X_test)SHAP有许多用于模型解释的可视化图表,但我们将着重介绍其中的几个 。
特征重要性的汇总图
print("Variable Importance Plot - Global Interpretation")figure = plt.figure()shap.summary_plot(shap_values, X_test)

文章插图
我们可以从上面的图中得到以下的结论:
- 它显示了重要特征的列表,从最重要到最不重要(从上到下) 。
- 所有特征似乎对诊断为糖尿病(标签 = 1)或未诊断(标签 = 0)的两个类别的贡献均等,因为基本上都占据了矩形的 50% 。
- 根据该模型,Glucose(葡萄糖)是对预测贡献最大的特征 。Age(年龄)是贡献第二大的特征
- Pregnancies(怀孕)是预测能力最强的第 5 个特征 。
# Summary Plot Deep-Dive on Label 1shap.summary_plot(shap_values[1], X_test)
文章插图
对于分类问题,每个标签都有 SHAP 值 。在我们的例子中,我们使用 1 (True) 的预测显示该类结果的汇总 。该图的表示内容如下:
- 特征的重要性和排序与汇总图一样,排名越上,重要性越高 。
- 图中每个点代表单个数据实例的特征值 。
- 颜色表明该特征是高值(红色)还是低值(蓝色) 。
- X 轴代表对预测输出的正或负贡献
对于葡萄糖:我们看到大多数高值(红点)对预测输出有正贡献(在 X 轴上为正) 。换句话说,如果单个数据实例的葡萄糖量很高,则其获得1结果(被诊断患有糖尿病)的机会会大大增加,而低量(蓝点)会降低(负 X 轴值)被诊断为糖尿病的概率 。
对于年龄:对年龄进行相同的分析 。年龄越高,数据实例(患者)最有可能被诊断出患有糖尿病 。
另一方面,模型在涉及未成年人时似乎很混乱,因为我们可以在垂直线(X 轴 = 0)的每一侧观察到几乎相同数量的数据点 。由于年龄特征对分析来说似乎令人困惑,我们可以使用下面的相关图来获得更细粒度的信息 。
相关图(依赖图)
# Dependence Plot on Age featureshap.dependence_plot('Age', shap_values[1], X_test, interaction_index="Age")
文章插图
从相关图中我们可以清楚地看到,30岁以下的患者被诊断为糖尿病的风险较低,而30岁以上的患者被诊断为糖尿病的风险较高 。
LIME它是 Local Interpretable Model Agnostic Explanation的缩写 。局部(Local )意味着它可以用于解释机器学习模型的个别预测 。
要使用它也非常的简单,只需要2个步骤:(1) 导入模块,(2) 使用训练值、特征和目标拟合解释器 。
推荐阅读
- 准妈妈春季养生注意4大要点 适合孕妇的食疗方
- 长期酗酒易可引发酒精肝 经常喝酒的人如何养肝
- 春季多吃豆芽能防病 告诉你吃豆芽的这些功效
- 春季喝汤的窍门 这3款靓汤一定要喝
- 春季如何让宝宝更好的午睡 睡多长时间比较好
- 春季谨防这几种妇科疾病 当心不必要的危害
- 春季养生睡眠当先 睡眠不足的危害有哪些
- 春季最适宜养肝的蔬果推荐 3个食谱轻松保护肝脏
- 春季是胰腺炎的高发期 五类人群需要特别注意
- 野生红茶,野生红茶的种类
