2014-03-27 55 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

總之,你至少應該有一個測試設置。

相關問題