2014-03-27 51 views
0

我在尝试训练sklearn的GradientBoostingRegressor或时遇到了奇怪的行为并进行了预测。我将举一个例子来演示一个简化数据集的问题,但问题仍然存在于一个更大的数据集中。我有以下2个从大数据集改编的小数据集。正如你所看到的,目标变量对于两种情况都是相同的,但是输入变量虽然它们的值彼此接近,但是不同。目标变量(Y)位于最后一列。sklearn的GradientBoostingRegressor对不同的输入给出了相同的预测

我有以下代码:

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表示目标列。 我面临的问题是,我无法解释为什么pred1是完全一样的pred2?只要X1X2是不一样的PRED1PRED2也一定是不同的,他们musn't?请帮我找到我的错误假设。

回答

0

我的猜测是,由于您将X1和X2拟合为相同的Y,因此pred1和pred2是相似的。当你的Regressor非常强大(可以适应任何事情)或你的问题太容易了(可以完全由你的回归器来安装),那么pred1和pred2将等于Y.

3

你所观察到的是完美的预期。 您可以使用高复杂度的估计器来计算数据(max_depth = None),因此很容易通过核心学习所有数据,这完全适合训练数据。 然后,预测将是您给培训的任何标签。

看一看彼得来讨论一下如何调整正确GradientBoosting: https://www.youtube.com/watch?v=-5l3g91NZfQ

总之,你至少应该有一个测试设置。

相关问题