sklearn的GradientBoostingRegressor对不同输入给出相同预测

1 投票
2 回答
3010 浏览
提问于 2025-04-18 00:08

我在尝试训练sklearn的GradientBoostingRegressor并进行预测时,遇到了一个奇怪的情况。我会用一个简化的数据集来说明这个问题,但在更大的数据集上也会出现同样的问题。我有两个小数据集,都是从一个大数据集中提取出来的。你可以看到,目标变量在这两种情况下是相同的,但输入变量虽然数值接近,却是不同的。目标变量(Y)在最后一列。

我有以下代码:

d1 = {'0':[101869.2,102119.9,102138.0,101958.3,101903.7,12384900],  
        '1':[101809.1,102031.3,102061.7,101930.0,101935.2,11930700],
        '2':[101978.0,102208.9,102209.8,101970.0,101878.6,12116700],
        '3':[101869.2,102119.9,102138.0,101958.3,101903.7,12301200],
        '4':[102125.5,102283.4,102194.0,101884.8,101806.0,10706100],
        '5':[102215.5,102351.9,102214.0,101769.3,101693.6,10116900]}                    
data1 = pd.DataFrame(d1).T
X1 = data1.ix[:,:4]
Y = data1[5]

d2 = {'0':[101876.0,102109.8,102127.6,101937.0,101868.4,12384900],
        '1':[101812.9,102021.2,102058.8,101912.9,101896.4,11930700],
        '2':[101982.5,102198.0,102195.4,101940.2,101842.5,12116700],
        '3':[101876.0,102109.8,102127.6,101937.0,101868.4,12301200],
        '4':[102111.3,102254.8,102182.8,101832.7,101719.7,10706100],
        '5':[102184.6,102320.2,102188.9,101699.9,101548.1,10116900]}
data2 = pd.DataFrame(d2).T
X2 = data2.ix[:,:4]
Y = data2[5]

re1 = ensemble.GradientBoostingRegressor(n_estimators=40,max_depth=None,random_state=1)
re1.fit(X1,Y)
pred1 = re1.predict(X1)

re2 = ensemble.GradientBoostingRegressor(n_estimators=40,max_depth=None,random_state=3)
re2.fit(X2,Y)
pred2 = re2.predict(X2)

其中,X1是一个数据框,包含第一个数据集的第1列第5列X2是一个数据框,包含第二个数据集的第1列第5列Y代表目标列。

我遇到的问题是,我无法解释为什么pred1pred2是完全相同的?只要X1X2不相同,pred1pred2也应该不同,难道不是吗?请帮我找出我的错误假设。

2 个回答

0

我猜因为你把X1和X2都用来预测同一个Y,所以pred1和pred2很相似是合理的。当你的回归模型非常强大(可以把任何东西都拟合到任何东西上)或者你的问题太简单(可以被你的模型完全拟合)时,pred1和pred2就会都等于Y。

4

你观察到的情况是完全正常的。你使用了一个复杂度很高的模型(max_depth=None),这样它就能把所有的数据都记住,也就是完全过拟合了训练数据。这样的话,预测的结果就会和你训练时给出的标签一样。

可以看看彼得的演讲,了解如何正确调整GradientBoosting模型:https://www.youtube.com/watch?v=-5l3g91NZfQ

无论如何,你至少应该有一个测试集。

撰写回答