机器学习中检验与可视化

摘要

本周学习了检查和可视化机器学习模型的方法,重点关注部分依赖图 (PDP)、个体条件期望 (ICE) 图和排列特征重要性。PDP 和 ICE 有助于可视化输入特征与模型预测之间的关系,而排列特征重要性通过打破每个特征与目标变量的关联来评估每个特征对模型性能的影响。

abstract

This week you learned methods for examining and visualizing machine learning models, focusing on partial dependence graphs (PDP), individual Conditional expectations (ICE) graphs, and permutations feature importance. PDP and ICE help visualize the relationship between input features and model predictions, while ranking feature importance assesses the impact of each feature on model performance by breaking the association of each feature with the target variable.

1.检验

1.1 部分依赖与个体条件期望图

部分依赖图(PDP)和个体条件期望图(ICE)可用于可视化和分析目标响应与一组感兴趣的输入特征之间的相互作用。
PDP和ICEs都假设感兴趣的输入特征独立于补体特征,这一假设在实践中经常被违背。因此,在相关特征的情况下,将创建荒谬的数据点来计算PDP/ICE。

1.1.1 部分相关图

部分依赖图(PDP)显示了目标响应与一组感兴趣的输入特征之间的依赖关系,在所有其他输入特征(“互补”特征)的值上边缘化。直观地,可以将部分依赖解释为预期目标响应作为感兴趣的输入特征的函数。
由于人类感知的限制,感兴趣的输入特征集的大小必须很小(通常是一个或两个),因此感兴趣的输入特征通常是在最重要的特征中选择的。
下图显示了共享单车数据集的两个单向和一个双向部分依赖图,使用HistGradientBoostingRegressor:
在这里插入图片描述

向PDP告诉我们目标响应和感兴趣的输入特征(如线性、非线性)之间的相互作用。上图左图显示了温度对自行车租赁数量的影响;我们可以清楚地看到,较高的温度与较高的自行车租赁数量有关。同样,可以分析湿度对自行车租赁数量的影响(中间图)。因此,这些解释是边缘的,一次只考虑一个特征。
具有两个感兴趣的输入特征的PDP显示了两个特征之间的相互作用。例如,上图中的双变量PDP显示了自行车租赁数量对温度和湿度联合值的依赖关系。可以清楚地看到两个特征之间的相互作用:在温度高于20摄氏度的情况下,主要是湿度对自行车租赁数量有很强的影响。对于较低的温度,温度和湿度都会对自行车租赁数量产生影响。
检测模块提供了方便的from_estimator函数来创建单向和双向偏相关图。在下面的例子中,展示了如何创建一个部分依赖图的网格:特征0和1的两个单向PDP,以及两个特征之间的一个双向PDP:

from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.inspection import PartialDependenceDisplay

X, y = make_hastie_10_2(random_state=0)
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
    max_depth=1, random_state=0).fit(X, y)
features = [0, 1, (0, 1)]
PartialDependenceDisplay.from_estimator(clf, X, features)

要制作分类特征的部分依赖图,需要使用参数categorical_features指定哪些特征是分类的。此参数接受索引列表、分类特征名称或布尔掩码。分类特征的部分依赖性的图形表示是一个条形图或二维热图。
若需要部分依赖函数的原始值而不是绘图,可以使用sklearn.inspection。partial_dependence功能:

from sklearn.inspection import partial_dependence

results = partial_dependence(clf, X, [0])
results["average"]
results["grid_values"]

1.1.2 个人条件期望(ICE)图

与PDP类似,单个条件期望(ICE)图显示目标函数与感兴趣的输入特征之间的依赖关系。然而,与显示输入特征的平均效果的PDP不同,ICE图将预测对每个样本的特征的依赖分别可视化,每个样本有一行。由于人类感知的限制,ICE图只支持一个感兴趣的输入特征。
下图显示了共享单车数据集的两个ICE图,使用HistGradientBoostingRegressor:。该图绘制了覆盖在ICE线上的相应PD线。
在这里插入图片描述
虽然PDP善于显示目标特征的平均效果,但它们可能模糊由相互作用产生的异质关系。当相互作用出现时,ICE图将提供更多的见解。例如,看到温度特征的ICE为我们提供了一些额外的信息:一些ICE线是平坦的,而另一些ICE线显示对温度高于35摄氏度的依赖性降低。在湿度特征上观察到类似的模式:当湿度高于80%时,一些ICE线显示出急剧下降。
测模块的PartialDependenceDisplay.from_estimator方便函数可以通过设置kind='individual’来创建ICE图。在下面的示例中,展示了如何创建ICE图的网格:

from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.inspection import PartialDependenceDisplay

X, y = make_hastie_10_2(random_state=0)
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
    max_depth=1, random_state=0).fit(X, y)
features = [0, 1]
PartialDependenceDisplay.from_estimator(clf, X, features,
    kind='individual')

在ICE图中,可能不容易看到感兴趣的输入特征的平均效果。因此,建议与pdp一起使用ICE图。它们可以用kind='both’一起绘制。

PartialDependenceDisplay.from_estimator(clf, X, features,
    kind='both')

1.1.3 公式定义

让Xs 为感兴趣的输入特征的集合(即特征参数),令Xc做它的补充。
响应的部分依赖性 f 在某一点上 x 定义为:
p d X S ( x S ) = ⁡ d e f E X C [ f ( x S , X C ) ] = ∫ f ( x S , x C ) p ( x C ) d x C , \begin{aligned}pd_{X_S}(x_S)&\overset{def}{\operatorname*{=}}\mathbb{E}_{X_C}\left[f(x_S,X_C)\right]\\&=\int f(x_S,x_C)p(x_C)dx_C,\end{aligned} pdXS(xS)=defEXC[f(xS,XC)]=f(xS,xC)p(xC)dxC,

1.1.4 计算方法

近似上述积分有两种主要方法,即“蛮力法”和“递归法”。方法参数控制使用哪个方法。
“蛮力”方法是一种适用于任何估计器的通用方法。计算ICE图只支持使用“蛮力”方法。它通过计算数据X的平均值来近似上述积分:
p d x X S ( x S ) ≈ 1 n s a m p l e s ∑ i = 1 n f ( x S , x C ( i ) ) , pdx_{X_S}(x_S)\approx\frac1{n_{\mathrm{samples}}}\sum_{i=1}^nf(x_S,x_C^{(i)}), pdxXS(xS)nsamples1i=1nf(xS,xC(i)),
“递归”方法比“蛮力”方法快,但它只支持一些基于树的估计器的PDP图。计算方法如下。对于给定的点xs,则执行加权树遍历:如果分割节点涉及感兴趣的输入特征,则遵循相应的左分支或右分支;否则,两个分支都被跟踪,每个分支被进入该分支的训练样本的分数加权。最后,通过所有访问叶值的加权平均值给出部分依赖关系。
对于“蛮力”方法,参数X既用于生成值网格
并补充特征值xs。然而,对于“递归”方法,X仅用于网格值:隐式地xc值是训练数据的值。

1.2 排列特征重要性

排列特征重要性是一种模型检查技术,它测量每个特征对给定表格数据集上拟合模型的统计性能的贡献。该技术对于非线性或不透明的估计器特别有用,并且涉及随机洗牌单个特征的值并观察模型得分的最终退化。通过打破特征和目标之间的关系,我们确定模型对这种特定特征的依赖程度。
在下面的图中,观察到特征排列对特征与目标之间的相关性的影响,从而对模型统计性能的影响。
在这里插入图片描述

在这里插入图片描述
在上图中,排列一个预测特征打破了特征和目标之间的相关性,因此模型的统计性能下降。在下图中,观察到排列一个非预测特征并没有显著降低模型的统计性能。
置换特征重要性的一个关键优点是它是模型不可知的,即它可以应用于任何拟合估计量。此外,它可以用特征的不同排列进行多次计算,进一步提供了方差的度量。
下图显示了在泰坦数据集的增强版本上训练的RandomForestClassifier的排列特征重要性,该数据集包含一个random_cat和一个random_num特征,即一个分类特征和一个数值特征,它们与目标变量没有任何关联:
在这里插入图片描述
permutation_importance函数计算给定数据集的估计器的特征重要性。n_repeats参数设置特征随机洗牌的次数,并返回特征重要性的样本。
考虑以下经过训练的回归模型:

from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
diabetes = load_diabetes()
X_train, X_val, y_train, y_val = train_test_split(
    diabetes.data, diabetes.target, random_state=0)
model = Ridge(alpha=1e-2).fit(X_train, y_train)
model.score(X_val, y_val)

排列重要性既可以在训练集上计算,也可以在测试集或验证集上计算。使用保留集可以突出显示哪些特征对被检查模型的泛化能力贡献最大。在训练集上重要但在保留集上不重要的特征可能会导致模型过拟合。

2.可视化

Scikit-learn定义了一个简单的API,用于为机器学习创建可视化。这个API的关键特性是允许快速绘图和视觉调整,而无需重新计算。提供的Display类公开了用于创建图表的两个方法:from_estimator和from_predictions。from_estimator方法将接受一个拟合的估计器和一些数据(X和y),并创建一个Display对象。有时,希望只计算一次预测,应该使用from_predictions。在下面的例子中,绘制了一个拟合的支持向量机的ROC曲线:

from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import RocCurveDisplay
from sklearn.datasets import load_wine

X, y = load_wine(return_X_y=True)
y = y == 2  # 二进制
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
svc = SVC(random_state=42)
svc.fit(X_train, y_train)

svc_disp = RocCurveDisplay.from_estimator(svc, X_test, y_test)

在这里插入图片描述
返回的svc_disp对象允许在未来的图中继续使用已经计算过的SVC ROC曲线。在本例中,svc_disp是一个RocCurveDisplay,它将计算值存储为名为roc_auc、fpr和tpr的属性。可以从支持向量机获得预测,然后使用from_predictions而不是from_estimator。接下来,训练一个随机森林分类器,并使用Display对象的绘图方法再次绘制之前计算的roc曲线。

import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier

rfc = RandomForestClassifier(n_estimators=10, random_state=42)
rfc.fit(X_train, y_train)

ax = plt.gca()
rfc_disp = RocCurveDisplay.from_estimator(rfc, X_test, y_test, ax=ax, alpha=0.8)
svc_disp.plot(ax=ax, alpha=0.8)

在这里插入图片描述
将alpha=0.8传递给绘图函数,以调整曲线的alpha值。

3.总结

本周概述了通过可视化和检查来理解机器学习模型的技术。部分依赖图 (PDP) 和个体条件期望 (ICE) 图提供了关于输入特征变化如何影响预测的见解,其中 PDP 显示平均效应,ICE 揭示单个样本之间的异质性。排列特征重要性通过随机洗牌特征值和观察对预测准确性的影响来衡量每个特征对模型性能的贡献。Scikit-learn 库通过 API 促进这些分析,这些 API 支持快速绘图和调整,而无需重新计算预测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值