实用Max!四个用于解读与解释机器学习模型的python软件包

全文共4242字,预计学习时长8分钟

这四个库都是pip可安装的,具有良好的文件编制,强调可视化解读。

1. yellowbrick

传送门:
https://www.scikit-yb.org/en/latest/quickstart.html

这个库本质上是scikit-learn学习库的扩展,并为机器学习模型提供了一些极其有用且好看的可视化。可视化工具对象、核心接口都是scikit-learn模拟估算器。如果你习惯于使用scikit-learn学习库,那么就一定不会对yellowbrick的工作流程感到陌生。

获得的可视化包括模型选择、特征重要性与模型性能分析。

下面来举几个简单的例子。

库可以通过pip安装。

pip install yellowbrick

为说明一些特性,我们将使用一个被称为葡萄酒识别集的scikit-learn数据集。

传送门:
https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html#
sklearn.datasets.load_wine

这个数据集有13个特性和3个目标类,可直接从scikit-learn学习库加载。在下方代码中,我们导入数据集并将其转化为数据帧。数据可以直接在分类器中使用,不需要任何额外预处理。

import pandas as pdfrom sklearn import datasetswine_data = datasets.load_wine()df_wine = pd.DataFrame(wine_data.data,columns=wine_data.feature_names)df_wine['target'] = pd.Series(wine_data.target)

我们还使用scikit-learn进一步将数据集拆分为测试集与训练集。

from sklearn.model_selection import train_test_splitX = df_wine.drop(['target'], axis=1)y = df_wine['target']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

接下来,使用Yellowbricks可视化工具观察数据集中各特性的相关性。

from yellowbrick.features import Rank2Dimport matplotlib.pyplot as pltvisualizer = Rank2D(algorithm="pearson", size=(1080, 720))visualizer.fit_transform(X_train)visualizer.poof()

现在安装一个随机森林分类器,并使用另一可视化工具评估其性能。

from yellowbrick.classifier import ClassificationReportfrom sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier()visualizer = ClassificationReport(model, size=(1080, 720))visualizer.fit(X_train, y_train)visualizer.score(X_test, y_test)visualizer.poof()

2. ELI5

传送门:
https://eli5.readthedocs.io/en/latest/

ELI5是另一个可视化库,可用于调试机器学习模型并解释模型所做出的预测。它可用于最常见的 Python机器学习库,如scikit-learn、 XGBoost 和 Keras。

下面使用ELI5检查上方训练后模型的特征重要性。

import eli5eli5.show_weights(model, feature_names = X.columns.tolist())

默认情况下,show_weights方法使用gain计算权重,但也可通过添加importance_type argument 指定其他类型。

也可以用show_prediction检查单独预测的原因。

from eli5 import show_predictionshow_prediction(model, X_train.iloc[1], feature_names = X.columns.tolist(), show_feature_values=True)

3. LIME

传送门:
https://github.com/marcotcr/lime

LIME(局部可解释模型-不可知论解释)是一个用于解释机器学习算法所做出的预测的软件包。Lime支持各种分类器对单个预测的解释,并内置支持scikit-learn。

下面使用Line解释一些上方已训练模型所做出的预测。

Lime可以通过pip安装。

pip install lime

首先,建立一个解释器。这将训练数据集看做一个数组,包含模型中使用的特性的名称,和目标变量中类的名称。

import lime.lime_tabularexplainer = lime.lime_tabular.LimeTabularExplainer(X_train.values,feature_names=X_train.columns.values.tolist(), class_names=y_train.unique())

接下来,创建一个lambda函数,该函数使用模型对数据样本进行预测,这借鉴于Lime上一个优秀且更加深入的教程(
https://www.guru99.com/scikit-learn-tutorial.html)。

predict_fn = lambda x: model.predict_proba(x).astype(float)

接下来,使用解释器解释所选取示例的预测,结果如下所示。Lime生成可视化,显示这些特性导致这一特定预测结果的过程。

exp = explainer.explain_instance(X_test.values[0], predict_fn, num_features=6)exp.show_in_notebook(show_all=False)

4. MLxtend

传送门:
http://rasbt.github.io/mlxtend/

该库包含很多用于机器学习的辅助函数。这其中包括stacking 和投票分类器、 模型评估、特征提取、编程和制图。

使用MLxtend将voting 分类器的决策边界与其组成分类器进行比较。

同样,MLxtend也能通过pip安装。

pip install mlxtend

输入内容如下所示。

from mlxtend.plotting import plot_decision_regionsfrom mlxtend.classifier import EnsembleVoteClassifierimport matplotlib.gridspec as gridspecimport itertoolsfrom sklearn import model_selectionfrom sklearn.linear_model import LogisticRegressionfrom sklearn.naive_bayes import GaussianNBfrom sklearn.ensemble import RandomForestClassifier

以下可视化只能一次处理两个特性,因此首先创建一个包含proline 和color_intensity的数组。笔者之所以选择这两个特性,是因为它们在之前使用ELI5观察的特性中具有最高的权重。

X_train_ml = X_train[['proline', 'color_intensity']].valuesy_train_ml = y_train.values

接下来,创建分类器,将它们与训练数据相匹配,并使用MLxtend对决策边界进行可视化。代码下方为输出结果。

clf1 = LogisticRegression(random_state=1)clf2 = RandomForestClassifier(random_state=1)clf3 = GaussianNB()eclf = EnsembleVoteClassifier(clfs=[clf1, clf2, clf3], weights=[1,1,1])value=1.5width=0.75gs = gridspec.GridSpec(2,2)fig = plt.figure(figsize=(10,8))labels = ['Logistic Regression', 'Random Forest', 'Naive Bayes', 'Ensemble']for clf, lab, grd in zip([clf1, clf2, clf3, eclf], labels, itertools.product([0, 1], repeat=2)): clf.fit(X_train_ml, y_train_ml) ax = plt.subplot(gs[grd[0], grd[1]]) fig = plot_decision_regions(X=X_train_ml, y=y_train_ml, clf=clf) plt.title(lab)

留言 点赞 关注

我们一起分享AI学习与发展的干货

编译组:段昌蓉、梁晶晶

相关链接:

https://towardsdatascience.com/python-libraries-for-interpretable-machine-learning-c476a08ed2c7

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年8月1日
下一篇 2019年8月1日

相关推荐