[英]R regularize coefficients in regression
我正在嘗試使用線性回歸來找出3種模型的最佳權重,以預測結果。 因此,有3個變量(x1, x2, x3)
是因變量y
的預測。 我的問題是,如何在系數之和為1的約束下進行回歸。例如:
這很好:
y = .2(x1) + .4(x2) + .4(x3)
因為.2 + .4 + .4 = 1
這不好:
y = 1.2(x1) + .4(x2) + .3(x3)
自1.2 + .4 + .3 > 1
我希望在R中做到這一點。 謝謝。 讓我知道是否需要移至統計信息區域(“交叉驗證”)。
編輯:
問題是將每一行分類為1或0。y是訓練集中的實際值(0或1),x1是來自kNN模型的預測值,x2是來自randomForest,x3是來自gbm模型。 我正在嘗試為每個模型獲得最佳權重,因此每個系數<= 1且系數之和==1。看起來像這樣:
y/Actual value knnPred RfPred gbmPred
0 .1111 .0546 .03325
1 .7778 .6245 .60985
0 .3354 .1293 .33255
0 .2235 .9987 .10393
1 .9888 .6753 .88933
... ... ... ...
成功的標准是AUC。 因此,我嘗試設置系數以使AUC最大化,同時確保其總和為1。
很有可能其他人可以共享,但是您正在尋找兩個參數,例如
b1 * x1 + b2 * x2 + (1 - b1 - b2) * x3
接近y
。 為此,我將編寫一個錯誤函數以最小化
minimizeMe <- function(b, x, y) { ## Calculates MSE
mean((b[1] * x[, 1] + b[2] * x[, 2] + (1 - sum(b)) * x[, 3] - y) ^ 2)
}
扔給optim
fit <- optim(par = c(.2, .4), fn = minimizeMe, x = cbind(x1, x2, x3), y = y)
沒有要測試的數據:
mod1 <- lm(y ~ 0+x1+x2+x3, data=dat)
mod2 <- lm(y/I(sum(coef(mod1))) ~ 0+x1+x2+x3, data=dat)
現在,我再考慮一下,跳過mod2,只是:
coef(mod1)/sum(coef(mod1))
對於所示的五行, round(knnPred)
或round(gbmPred)
給出了完美的預測,因此存在一個問題,即是否需要多個預測變量。
無論如何,為解決上述給定的問題,以下將給出非負系數的總和為1(可能由於計算機算法而導致的細微差異除外)。 a
是因變量, b
是自變量矩陣。 c
和d
定義等式約束(coeffs總和為1), e
和f
定義不等式約束(coeffs為非負數)。
library(lsei)
a <- cbind(x1, x2, x3)
b <- y
c <- matrix(c(1, 1, 1), 1)
d <- 1
e <- diag(3)
f <- c(0, 0, 0)
lsei(a, b, c, d, e, f)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.