網站項目經費預算新聞稿營銷
在解決風險類問題時,我們往往面臨要在很多個指標中篩選關鍵指標的抉擇。每個指標都是根據真實數據計算得出的,但是只有少數是能作為解釋模型的,其余的都算是冗余特征。
這聽起來有點像是穩(wěn)健回歸,但區(qū)別在于穩(wěn)健回歸是為了將數據的整體趨勢不被部分離散點所帶歪,而稀疏建模則是在損失函數中添加懲罰項,從而自動篩選保留少數的重要特征,而不是僅僅通過是否離散來判斷。
以下是一個用于解釋的例子:
set.seed(123)
n <- 100 # 樣本數
p <- 100 # 特征數# 生成稀疏數據:只有前5個特征真實影響y
X <- matrix(rnorm(n * p), n, p)
beta_true <- c(3, -2, 1.5, 0, 0, rep(0, p-5)) # 后95個系數為0
y <- X %*% beta_true + rnorm(n, sd = 1) # 添加噪聲# 轉換為數據框(添加一些無關特征)
df <- data.frame(y, X)library(glmnet) # 安裝:install.packages("glmnet")# 準備數據(x需為矩陣,y為向量)
x <- as.matrix(df[, -1])
y <- df$y# 擬合Lasso模型(alpha=1表示純L1懲罰)
lasso_model <- glmnet(x, y, alpha = 1, lambda = 0.1) # lambda需調優(yōu)# 查看系數(自動稀疏化)
coef(lasso_model)# 10折交叉驗證找最優(yōu)lambda
cv_fit <- cv.glmnet(x, y, alpha = 1)
plot(cv_fit) # 展示MSE隨lambda的變化# 最優(yōu)lambda下的系數
best_lambda <- cv_fit$lambda.min
coef(cv_fit, s = "lambda.min") # 非零系數即關鍵特征# 普通線性回歸(所有特征都保留)
lm_model <- lm(y ~ ., data = df)
summary(lm_model) # 結果難以解釋,且容易過擬合
輸出:
Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: NaN
F-statistic: NaN on 99 and 0 DF, p-value: NA
從輸出中可以看到,如果是用普通線性回歸,結果顯示統(tǒng)計量失效,無法解釋;而稀疏建模則是把其余的冗余變量的系數都強制歸為0了,而從圖像可以觀察到,當參數減少時,模型包含的特征逐漸增多,誤差也在逐漸下降。