Lasso回归是一种线性建模技术,它使用L1正则化来提高预测准确性并增强模型的可解释性。通过增加一个等于系数绝对值的惩罚项,它将部分系数压缩为零,从而有效地执行特征选择并降低模型复杂度,特别是在处理高维数据时。
主要特点
- 同时执行正则化和特征选择。
- 适用于高维数据。
- 有助于减少方差,尽管可能会略微增加偏差。
- 当存在大量相关特征时效果良好。
数学公式
Lasso回归最小化的代价函数为:
> \text{min} \left( \frac{1}{2N} \sum{i=1}^{N} (yi – \beta0 – \sum{j=1}^{p} x{ij}\betaj)^2 + \lambda \sum{j=1}^{p}
\right)
其中:
- N : 观测值的数量
- p : 预测变量的数量
- y_i : 实际输出值
- x_{ij} : 输入特征
- \beta_0 : 截距项
- \beta_j : 模型系数
- \lambda: 正则化强度
Lambda (λ) 的作用
- \lambda=0: 等同于普通最小二乘回归。
- 随着 \lambda 增加: 更多的系数被压缩为精确的零值,从而增强特征选择。
- 极高的 \lambda : 所有系数变为零,导致欠拟合。
在R中实现Lasso回归
我们将使用Big Mart销售数据集来实现Lasso回归,旨在根据各种产品和商店特征来预测产品销量。整个过程涉及数据预处理、编码、归一化,以及使用 L1正则化 通过 glmnet 包进行模型训练。
1. 安装所需的包
首先,我们需要安装一些必要的包,以便进行数据预处理、训练Lasso回归模型以及可视化结果。
- data.table: 用于高效的数据加载和操作。
- dplyr: 用于数据转换和筛选。
- glmnet: 用于拟合Lasso和Ridge回归模型。
- ggplot2: 用于绘图和可视化。
- caret: 用于使用交叉验证来训练和调整模型。
- xgboost: 用于基于树的集成模型。
- e1071: 用于偏度等统计度量。
- cowplot: 用于将多个图表排列在一起。
R
CODEBLOCK_91181399
2. 加载和合并数据集
我们加载并合并训练集和测试集,以便对整个数据进行统一的预处理。
> 你可以从这里下载数据集:Train.csv和 Test.csv。
- fread: 用于高效加载CSV数据。
- rbind: 用于按行合并两个数据集。
- :=: 用于在 data.table 中添加或修改列。
R
CODEBLOCK_888aa2c4
3. 处理缺失值和零值
我们通过均值填充来处理缺失的权重和零可见度值。
- which: 用于识别 NA 或零值的索引。
- mean: 用于计算用于填充的平均值。
R
CODEBLOCK_14cdebd9
4. 编码分类特征
我们使用标签编码和独热编码将分类变量转换为数值形式。
- ifelse: 用于条件性的数值转换。
- dummyVars: 用于生成独热编码列。
- predict: 用于应用来自 dummyVars 的转换。
R
“
combi[, OutletSizenum := ifelse(OutletSize == "Small", 0, ifelse(OutletSize == "Medium", 1, 2))]
combi[, OutletLocationTypenum := ifelse(OutletLocation_Type == "Tier 3", 0, ifelse(