簡體   English   中英

R正則化回歸系數

[英]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是自變量矩陣。 cd定義等式約束(coeffs總和為1), ef定義不等式約束(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM