用Python实现9大回归算法详解——02. Lasso 回归算法

1. Lasso 回归的基本概念

Lasso 回归 (Least Absolute Shrinkage and Selection Operator)是一种线性回归模型,通过引入 正则化(也称为 Lasso 正则化),在训练模型的同时对系数进行约束。Lasso 回归不仅能够避免过拟合,还能够自动进行特征选择,通过将一些不重要的特征的系数缩减为零,从而简化模型。

Lasso 回归的目标是最小化以下损失函数:

其中:

  • 是第个样本的实际值。
  • 是第个样本的预测值。
  • 是模型的回归系数。
  • 是样本数。
  • 是特征数。
  • 是正则化参数,用于控制 正则化项的强度。

2. Lasso 回归的数学表达

Lasso 回归的损失函数可以分为两部分:

  1. 最小化残差平方和(即最小二乘项):

2. 正则化项 :用于惩罚模型的复杂度,具体为范数:

因此,Lasso 回归的目标是找到一组回归系数 ,使得上述损失函数最小化。

3. Lasso 回归的作用

Lasso 回归的主要作用包括:

  • 减少模型复杂度:通过正则化,Lasso 回归能够控制模型的复杂度,减少过拟合的风险。
  • 特征选择:Lasso 回归会自动将不重要的特征的系数缩减为零,从而实现特征选择。

4. Lasso 回归的优化问题

Lasso 回归的优化问题可以表示为:

该优化问题通常通过坐标下降法(Coordinate Descent)来求解。

5. Lasso 回归案例

接下来,我们通过一个具体的案例来展示如何使用 Lasso 回归进行建模,并对结果进行详细分析。

5.1 数据准备

我们将使用一个模拟的数据集,其中包含多个特征和目标变量。我们会人为地加入一些噪声,增加特征选择的难度。

python 复制代码
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error, r2_score

# 生成模拟数据
np.random.seed(42)
X = np.random.randn(100, 10)  # 100个样本,10个特征
true_coefficients = np.array([1.5, -2, 0, 0, 3, 0, 0, 0, 0, 5])  # 实际的回归系数
y = X.dot(true_coefficients) + np.random.randn(100) * 0.5  # 生成目标变量,并加入噪声

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 将数据转化为DataFrame以便查看
df = pd.DataFrame(X, columns=[f"Feature_{i+1}" for i in range(X.shape[1])])
df['Target'] = y
print(df.head())

输出:

python 复制代码
   Feature_1  Feature_2  Feature_3  Feature_4  Feature_5  Feature_6  Feature_7  Feature_8  Feature_9  Feature_10    Target
0   0.496714  -0.138264   0.647689   1.523030  -0.234153  -0.234137   1.579213   0.767435  -0.469474    0.542560   0.513884
1  -0.463418  -0.465730   0.241962  -1.913280  -1.724918  -0.562288  -1.012831   0.314247  -0.908024   -1.412304  -8.905334
2  -1.424748  -0.544383   0.110923  -1.150994   0.375698  -0.600639  -0.291694  -0.601707   1.852278   -0.013497   1.041154
3  -1.057711   0.822545  -1.220844   0.208864  -1.959670  -1.328186   0.196861   0.738467   0.171368   -0.115648  -5.937149
4  -1.478522  -0.719844  -0.460639   1.057122   0.343618  -1.763040   0.324084  -0.385082  -0.676922    0.611676  -0.340138
5.2 模型训练

我们使用 Lasso 回归模型进行训练,并选择合适的正则化参数

python 复制代码
# 定义Lasso回归模型,并选择正则化参数alpha
lasso_model = Lasso(alpha=0.1)
lasso_model.fit(X_train, y_train)

# 输出模型系数
print("模型截距 (Intercept):", lasso_model.intercept_)
print("模型系数 (Coefficients):", lasso_model.coef_)

输出:

python 复制代码
模型截距 (Intercept): -0.03688971929504553
模型系数 (Coefficients): [ 1.36801626 -1.89662579  0.         -0.          2.98880389  0.
  0.         -0.          0.          4.93463356]

解释

  • 模型截距 (Intercept):表示所有特征都为零时,目标变量的预测值。
  • 模型系数 (Coefficients):Lasso 回归对系数进行了缩减,并将一些不重要的特征的系数缩减为零。我们可以看到,第3、第4、第6、第7、第8、第9个特征的系数被缩减为零,这意味着这些特征对目标变量的预测没有贡献,被模型自动剔除了。
5.3 模型预测与评估

使用训练好的模型对测试集进行预测,并评估模型的性能。

python 复制代码
# 对测试集进行预测
y_pred = lasso_model.predict(X_test)

# 计算均方误差 (MSE) 和决定系数 (R²)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("均方误差 (MSE):", mse)
print("决定系数 (R²):", r2)

输出:

python 复制代码
均方误差 (MSE): 0.27528742481852454
决定系数 (R²): 0.9840898373917382

解释

  • 均方误差 (MSE):表示预测值与实际值之间的平均平方误差。MSE越小,模型的预测效果越好。这里的MSE为0.275,表明模型的误差较小。
  • 决定系数 (R²):表示模型解释了目标变量方差的百分比。R²越接近1,模型的拟合效果越好。这里的R²为0.984,说明模型很好地拟合了数据。
5.4 结果分析
  • 模型系数的解读:Lasso 回归通过对系数的惩罚,使得部分不重要的特征系数缩减为零,从而实现特征选择。在我们的案例中,Lasso 模型成功识别出与目标变量相关的特征,并剔除无关特征。
  • 模型的预测能力:通过评估指标(MSE 和 R²),我们可以看到模型具有较强的预测能力。R²接近1,说明模型解释了大部分的目标变量方差,MSE较小,表明预测误差较低。

6. 总结

Lasso 回归是一种有效的线性回归方法,通过引入 正则化项来避免过拟合并自动选择特征。在模型训练过程中,Lasso 回归不仅能够对系数进行缩减,还能够将不重要的特征的系数缩减为零,实现特征选择。通过案例分析,我们验证了 Lasso 回归在特征选择和模型简化中的有效性,并展示了如何使用 Python 进行实现和结果分析。

相关推荐
API快乐传递者3 分钟前
Python爬虫获取淘宝详情接口详细解析
开发语言·爬虫·python
公众号Codewar原创作者5 分钟前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python
赵钰老师7 分钟前
基于R语言APSIM模型应用及批量模拟(精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等)
开发语言·数据分析·r语言
FL162386312910 分钟前
python版本的Selenium的下载及chrome环境搭建和简单使用
chrome·python·selenium
巫师不要去魔法部乱说13 分钟前
PyCharm专项训练5 最短路径算法
python·算法·pycharm
Chloe.Zz20 分钟前
Python基础知识回顾
python
lly20240624 分钟前
Highcharts 饼图:数据可视化利器
开发语言
骑个小蜗牛24 分钟前
Python 标准库:random——随机数
python
lw向北.30 分钟前
Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)
android·开发语言·qt
Trouvaille ~34 分钟前
【机器学习】从流动到恒常,无穷中归一:积分的数学诗意
人工智能·python·机器学习·ai·数据分析·matplotlib·微积分