为什么xgboost树的相同路径给出2个不同的预测?

繁荣

我正在尝试调查xgboost预测。

似乎具有相同2条路径的2条输入给出2条不同的预测。

我正在以下日期集上运行:

f1,f2,f3,f4,f5,f6,f7,f8,y
6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1
5,116,74,0,0,25.6,0.201,30,0
3,78,50,32,88,31.0,0.248,26,1
10,115,0,0,0,35.3,0.134,29,0
2,197,70,45,543,30.5,0.158,53,1
8,125,96,0,0,0.0,0.232,54,1
4,110,92,0,0,37.6,0.191,30,0
10,168,74,0,0,38.0,0.537,34,1
10,139,80,0,0,27.1,1.441,57,0
1,189,60,23,846,30.1,0.398,59,1
5,166,72,19,175,25.8,0.587,51,1
7,100,0,0,0,30.0,0.484,32,1
0,118,84,47,230,45.8,0.551,31,1
7,107,74,0,0,29.6,0.254,31,1
1,103,30,38,83,43.3,0.183,33,0
1,115,70,30,96,34.6,0.529,32,1
3,126,88,41,235,39.3,0.704,27,0
8,99,84,0,0,35.4,0.388,50,0
7,196,90,0,0,39.8,0.451,41,1
9,119,80,35,0,29.0,0.263,29,1
11,143,94,33,146,36.6,0.254,51,1
10,125,70,26,115,31.1,0.205,41,1
7,147,76,0,0,39.4,0.257,43,1
1,97,66,15,140,23.2,0.487,22,0
13,145,82,19,110,22.2,0.245,57,0
5,117,92,0,0,34.1,0.337,38,0
5,109,75,26,0,36.0,0.546,60,0
3,158,76,36,245,31.6,0.851,28,1
3,88,58,11,54,24.8,0.267,22,0
6,92,92,0,0,19.9,0.188,28,0
10,122,78,31,0,27.6,0.512,45,0
4,103,60,33,192,24.0,0.966,33,0
11,138,76,0,0,33.2,0.420,35,0
9,102,76,37,0,32.9,0.665,46,1
2,90,68,42,0,38.2,0.503,27,1

预测和树创建代码:

df = pd.read_csv("input.csv")
x = df[['f1','f2','f3', 'f4', 'f5', 'f6','f7','f8']]
y = df[['y']]
X_train, X_test, y_train, y_test = train_test_split( x, y, test_size = 0.33, random_state = 42)
model = XGBClassifier(n_jobs=-1)
model.fit(X_train, y_train)
res = model.predict(X_test)
print ("X_test (first 2 rows:")
print(X_test.head(2))
print("Predictions (first 2 rows:")
print(res[0:2])    
plot_tree(model)
plt.show()

输出:

X_test (first 2 rows:
    f1   f2  f3  f4  f5    f6     f7  f8
33   6   92  92   0   0  19.9  0.188  28
36  11  138  76   0   0  33.2  0.420  35
Predictions (first 2 rows:
[0 1]

在此处输入图片说明

相同的2个输入具有f2<146.5f4=0=>进入相同的叶子(-0.34)那么,为什么这2个输入的预测不同?0 and 1)?

Desertnaut

在整个XGBoost模型中绘制的内容;它只是它的第一棵树。

要知道为什么会是这样,检查源代码plot_tree

def plot_tree(booster, fmap='', num_trees=0, rankdir=None, ax=None, **kwargs):
    """Plot specified tree.

文档

num_trees (整数,默认为0)–指定目标树的序号

从这里可以明显看出,当您不指定num_trees参数时(如此处所示),它将采用默认值0,即合奏的第一棵树。

num_trees使用不同的值将得到不同的树,因此每个样本的决策路径也不同。

您无法绘制出增强合奏的所有树(即使可以,也没有任何实际用途)。plot_tree只是一个实用函数,以便能够查看模型的各个树。您可以在如何使用XGBoost在Python中可视化梯度提升决策树中查看它的用法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Angular 2中将路径转换为具有不同参数的相同路径

为什么用python编写的决策树代码与R编写的代码预测不同?

重定向到不同域中的相同路径

如何同时在两个不同路径的.bat文件中启动2个命令?

Powershell Copy-Item对于相同路径给出2种不同结果

pip和python位于相同路径但版本不同

我可以在网站的两个不同路径上托管相同的React应用程序吗?

使用整个数据集时,为什么xgboost会为要素生成相同的预测和nan值?

为什么这两个代码给出的结果相同?

XGBoost中的相同预测

沿不同路径同步两个SVG动画

我的Keras卷积模型预测了从不同路径导入的相同图像,但预测结果不同

为什么相同的代码在jsfiddle中给出不同的结果

为什么相同的代码在jsfiddl中给出不同的结果?

javascript:如果缺少原型,为什么obj.constuctor.name会给出2个不同的结果?

REST中Wildfly中2个不同模块的相同路径

具有2个MATCH子句的查询有什么作用?与具有2个不同路径的单个MATCH子句的查询有什么不同?

LIBSVM对未训练类别的样本给出相同的预测。为什么?

为什么2个相同的图像具有不同的dataUrl?

如何测试具有 N 个不同路径的函数?

为什么我的 2 个函数没有给出相同的结果?

Angular 路由器延迟加载:以相同路径开头的两个不同模块

Angular 6 从模块中的不同路径导入相同的组件

树中不同路径的数量,该路径中的节点值大于或等于 K

我有一个用 python 训练的 XGBoost 模型,但是当它加载到 Scala 并使用相同的功能时会得到不同的预测,为什么?

为什么相同的正则表达式会给出两个不同的结果?

为什么两个函数给出具有相同方法的不同输出?

Web API 路由对 2 个不同的调用给出相同的响应

具有相同路径的 Angular 2 模块