2011-09-12 64 views
4

我想在R中實現一個簡單的梯度增強算法來進行迴歸。這就是我到目前爲止的想法,但錯誤並不像我期望的那樣穩定。有什麼建議麼?簡單梯度增強算法

輸出:

1 error: 319.5881 
2 error: 318.6175 
3 error: 317.9368 
4 error: 317.6112 
5 error: 317.6369 
6 error: 317.9772 
7 error: 318.5833 
8 error: 319.4047 
9 error: 320.3939 
10 error: 321.5086 

回答

2

我承認不具有寫在年齡的重優化,所以可能會關閉基地。我會在每次迭代時記錄yhat矢量。看看這些值是振盪還是向零消失(因爲我不知道你是否幫助或傷害除以i)。
同樣,看看lm()的每次迭代的R^2值。如果它們非常接近1,那麼可能只是碰到了lm()的當前規定的靈敏度極限。

如果您可以提供算法的來源,那麼我們可以根據您正在實施的公式檢查代碼,這將會很有幫助。

更新:快速瀏覽一下wikipedia會產生以下結果:「有幾個開源R包可用:gbm,[6] mboost,gbev。」我強烈建議您研究這些軟件包,包括它們的源代碼,以確定它們是否能滿足您的需求。

+0

算法被弗裏德曼梯度升壓爲迴歸算法,其在正式嵌合遞歸殘差來定義,但我需要通過調整權重的情況下實現它。我很確定我所擁有的接近於用於增強樹木的適應性,這正是我所期待的。 – darckeen

+0

@darckeen,只是挑剔。它不能是梯度增強算法 - 因爲重新加權的線性函數仍然是線性的。你的治療更像是提升。 –

2

您是否嘗試過在每一步對數據進行隨機採樣,因此您只能將一半的示例顯示給當前的學習者?我想如果你每次都使用完整的樣本,你會得到一種令人厭惡的過度擬合。另外,我不確定增強線性模型(其具有低方差)非常有幫助。

+0

我只是想保持簡單,不使用子採樣,但你提到的過度擬合問題是問題,如果算法正確實施,最終它應該幾乎完美地適合數據,但它不適合。 – darckeen

4

不知道這是否有幫助,但如果您降低起始權重並增加迭代次數,則錯誤將更接近於零。但是,它仍然不穩定(在第103次迭代時錯誤開始回升)。我還添加了以下語句:weight <- ifelse(weight < 0.0, 0.0, weight)來補償由lm函數生成的missing or negative weights not allowed錯誤。

data("OrchardSprays") 
niter <- 105 
learn <- 0.05 
y  <- OrchardSprays$decrease 
yhat <- rep(0.0,nrow(OrchardSprays)) 
weight <- rep(0.2,nrow(OrchardSprays)) 
loss <- function(y,yhat) (y - yhat)^2 

error <- mean(loss(y,yhat)) 
cat("initial error:",error,"\n") 

for (i in seq(niter)) 
{ 
    model <- lm(decrease~.,weights=weight,data=OrchardSprays) 
    yhat <- yhat + weight * (predict(model) - yhat)/i 
    error <- mean(loss(y,yhat)) 
    weight <- weight + learn * (loss(y,yhat) - error)/error 
    weight <- ifelse(weight < 0.0, 0.0, weight) 
    cat(i,"error:",error,"\n") 
} 

輸出中:

initial error: 3308.922 

1 error: 2232.762 
2 error: 1707.971 
3 error: 1360.834 
4 error: 1110.503 
5 error: 921.2804 
6 error: 776.4314 
7 error: 663.5947 
8 error: 574.2603 
9 error: 502.2455 
10 error: 443.2639 
11 error: 394.2983 
12 error: 353.1736 
13 error: 318.2869 
14 error: 288.4326 
15 error: 262.6827 
16 error: 240.3086 
17 error: 220.7289 
18 error: 203.4741 
19 error: 188.1632 
20 error: 174.4876 
21 error: 162.1971 
22 error: 151.0889 
23 error: 140.9982 
24 error: 131.7907 
25 error: 123.3567 
26 error: 115.6054 
27 error: 108.4606 
28 error: 101.8571 
29 error: 95.73825 
30 error: 90.05343 
31 error: 84.75755 
32 error: 79.81715 
33 error: 75.19618 
34 error: 70.86006 
35 error: 66.77859 
36 error: 62.92584 
37 error: 59.28014 
38 error: 55.8239 
39 error: 52.54784 
40 error: 49.44272 
41 error: 46.49915 
42 error: 43.71022 
43 error: 41.07119 
44 error: 38.57908 
45 error: 36.23237 
46 error: 34.03907 
47 error: 32.00558 
48 error: 30.12923 
49 error: 28.39891 
50 error: 26.80582 
51 error: 25.33449 
52 error: 23.97077 
53 error: 22.70327 
54 error: 21.52714 
55 error: 20.43589 
56 error: 19.42552 
57 error: 18.48629 
58 error: 17.60916 
59 error: 16.78986 
60 error: 16.02315 
61 error: 15.30303 
62 error: 14.62663 
63 error: 13.99066 
64 error: 13.39205 
65 error: 12.82941 
66 error: 12.30349 
67 error: 11.811 
68 error: 11.34883 
69 error: 10.91418 
70 error: 10.50448 
71 error: 10.11723 
72 error: 9.751116 
73 error: 9.405197 
74 error: 9.076175 
75 error: 8.761231 
76 error: 8.458107 
77 error: 8.165144 
78 error: 7.884295 
79 error: 7.615498 
80 error: 7.356618 
81 error: 7.106186 
82 error: 6.86324 
83 error: 6.627176 
84 error: 6.39777 
85 error: 6.17544 
86 error: 5.961616 
87 error: 5.756781 
88 error: 5.561157 
89 error: 5.375131 
90 error: 5.19945 
91 error: 5.034539 
92 error: 4.880956 
93 error: 4.739453 
94 error: 4.610629 
95 error: 4.495216 
96 error: 4.393571 
97 error: 4.306144 
98 error: 4.233587 
99 error: 4.176799 
100 error: 4.136802 
101 error: 4.114575 
102 error: 4.111308 
103 error: 4.1278 
104 error: 4.164539 
105 error: 4.221389