gpt4 book ai didi

python - 使用从 pandas 数据框构建的模型绘制部分依赖关系

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:14 25 4
gpt4 key购买 nike

我有一个从 Pandas 数据框训练的模型。它可以毫无问题地预测数据帧输入:

from xgboost import XGBClassifier
clf = XGBClassifier()
clf = clf.fit(X_train, y_train) # X_train is a pandas dataFrame with 5 columns: a,b,c,d,e.
clf.predict_proba(X_train)

但是,当我使用确切的数据和模型绘制部分依赖图时,出现以下错误:

ValueError: feature_names mismatch: ['a', 'b', 'c', 'd', 'e'] ['f0', 'f1', 'f2', 'f3', 'f4']
expected b, a, d, c, e in input data
training data did not have the following fields: f2, f3, f1, f0, f4

我使用的代码是:

plot_partial_dependence(estimator=clf, X=X_train, features=[0,1])

我知道我可以在训练模型之前将 X_train 转换为 numpy.ndarray,它解决了问题。但是,由于实际的分类器非常大,而且已经训练了很长时间,所以我想重新使用用 pandas dataframe 训练的分类器。

有办法吗?非常感谢!

编辑 OP 以包含一些示例数据:

X_train.head(10):

    a        b        c    d           e
0 34 226830 5249738 409 1186.78850
1 36 38940 8210911 76 2326.72880
2 36 38940 8210911 76 2326.72880
3 34 761188 5074516 698 370.27365
4 36 1097060 9072727 296 576.91693
5 36 1097060 9072727 296 576.91693
6 25 62240 881740 102 194.59651
7 25 62240 881740 102 194.59651
8 25 62240 881740 102 194.59651
9 28 65484 1391620 105 259.25095

y_train.head(10):

0    1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1

最佳答案

恭喜!您发现 sklearnxgboost 之间存在缺陷。

使用回溯来指导我,我将 print(data.feature_names) 作为 Booster._validate_features 的第一行.当我运行您的方法(使用我创建的虚拟数据)时,我得到如下输出:

['a', 'b', 'c', 'd', 'e']
.
.
.
['a', 'b', 'c', 'd', 'e']
['f0', 'f1', 'f2', 'f3', 'f4']

特征名称正确的前几行来自拟合模型。显然,在拟合时,可以设置特征名称。最后一行来自调用 plot_partial_dependence。看起来,sklearn 无法使用此方法将列名传播到 xgboost,因此后者默认为“f0”、“f1”等。

警告:我不确定以下述方式禁用功能验证是否会产生不利影响(即功能名称混淆)。很难说什么时候像我一样使用虚拟数据。对生成的部分依赖图持保留态度。作为预防措施,您可能需要检查 XGBClassifier 的结果与 sklearn 的 GradientBoostingClassifier 的结果。或者,在训练之前将列重命名为 ['f0', 'f1', 'f2', 'f3', 'f4']。

从好的方面来说,您无需更改列名即可解决此问题。理想情况下,plot_partial_dependence 函数允许我们指定要传递给 response_method(即 clf.predict_proba)的关键字参数列表,因为我们会理想情况下通过 validate_features=False。代替此接口(interface),我建议使用以下 hack:

# store keyword argument default values
tmpdefaults = XGBClassifier.predict_proba.__defaults__
# change default value of validate_features to False
XGBClassifier.predict_proba.__defaults__ = (None, False)

# plot
plot_partial_dependence(estimator=clf, X=X_train, features=[0, 1], feature_names=X_train.columns.tolist())
plt.show()

# reset default keyword argument values to original
XGBClassifier.predict_proba.__defaults = tmpdefaults

关于python - 使用从 pandas 数据框构建的模型绘制部分依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57262708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com