R语言 拉索回归
拉索回归是一种分类算法,在简单和稀疏的模型(即参数较少的模型)中使用缩减。在缩减中,数据值被缩减到一个中心点,如平均值。Lasso回归是一种正则化的回归算法,执行L1正则化,增加相当于系数大小绝对值的惩罚。
“LASSO “是最小绝对收缩和选择运算符的缩写。 拉索回归适用于显示出高水平的多重共线性的模型,或者当你想自动选择模型的某些部分,如变量选择或参数消除时。拉索回归解决方案是二次编程问题,最好用RStudio、Matlab等软件解决。它具有选择预测器的能力。

该算法使有约束的平方之和最小化。一些 Beta值 被缩减为零,从而形成一个回归模型。一个调整参数 lambda 控制L1正则化惩罚的强度。
- 当 lambda =0时,没有参数被消除。
- 随着 lambda 的增加,越来越多的系数被设置为零并被消除,偏差也随之增加。
- 当 λ =无穷大时,所有的系数都被消除了。
- 随着 lambda 的减少,方差增加。
另外,如果模型中包含截距,则不作任何改变。现在让我们在R编程中实现Lasso回归。
在R中实现
输出

对数据集进行拉索回归
在数据集上使用Lasso回归算法,该数据集包括12个特征,有1559种产品,分布在不同城市的10家商店。
install.packages("data.table")
install.packages("dplyr")
install.packages("glmnet")
install.packages("ggplot2")
install.packages("caret")
install.packages("xgboost")
install.packages("e1071")
install.packages("cowplot")
library(data.table)
library(dplyr)
library(glmnet)
library(ggplot2)
library(caret)
library(xgboost)
library(e1071)
library(cowplot)
train = fread("Train_UWu5bXk.csv")
test = fread("Test_u94Q5KV.csv")
test[, Item_Outlet_Sales := NA]
combi = rbind(train, test)
missing_index = which(is.na(combiItem_Weight))
for(i in missing_index)
{
item = combiItem_Identifier[i]
combiItem_Weight[i] =
mean(combiItem_Weight[combiItem_Identifier == item],
na.rm = T)
}
zero_index = which(combiItem_Visibility == 0)
for(i in zero_index)
{
item = combiItem_Identifier[i]
combiItem_Visibility[i] =
mean(combiItem_Visibility[combiItem_Identifier == item],
na.rm = T)
}
combi[, Outlet_Size_num := ifelse(Outlet_Size == "Small", 0,
ifelse(Outlet_Size == "Medium",
1, 2))]
combi[, Outlet_Location_Type_num :=
ifelse(Outlet_Location_Type == "Tier 3", 0,
ifelse(Outlet_Location_Type == "Tier 2", 1, 2))]
combi[, c("Outlet_Size", "Outlet_Location_Type") := NULL]
ohe_1 = dummyVars("~.", data = combi[, -c("Item_Identifier",
"Outlet_Establishment_Year",
"Item_Type")], fullRank = T)
ohe_df = data.table(predict(ohe_1, combi[, -c("Item_Identifier",
"Outlet_Establishment_Year",
"Item_Type")]))
combi = cbind(combi[, "Item_Identifier"], ohe_df)
skewness(combiItem_Visibility)
skewness(combiprice_per_unit_wt)
combi[, Item_Visibility := log(Item_Visibility + 1)]
num_vars = which(sapply(combi, is.numeric))
num_vars_names = names(num_vars)
combi_numeric = combi[, setdiff(num_vars_names,
"Item_Outlet_Sales"),
with = F]
prep_num = preProcess(combi_numeric,
method=c("center", "scale"))
combi_numeric_norm = predict(prep_num, combi_numeric)
combi[, setdiff(num_vars_names,
"Item_Outlet_Sales") := NULL]
combi = cbind(combi, combi_numeric_norm)
train = combi[1:nrow(train)]
test = combi[(nrow(train) + 1):nrow(combi)]
test[, Item_Outlet_Sales := NULL]
set.seed(123)
control = trainControl(method ="cv", number = 5)
Grid_la_reg = expand.grid(alpha = 1,
lambda = seq(0.001, 0.1, by = 0.0002))
lasso_model = train(x = train[, -c("Item_Identifier",
"Item_Outlet_Sales")],
y = trainItem_Outlet_Sales,
method = "glmnet",
trControl = control,
tuneGrid = Grid_reg
)
lasso_model
mean(lasso_modelresample$RMSE)
plot(lasso_model, main = "Lasso Regression")
输出

拉索回归模型使用alpha值为1,lambda值为0.1。RMSE被用来选择使用最小值的最佳模型。

该模型的平均验证分数为1128.869。

正则化参数增加,RMSE保持不变。