Lasso回归——基于Kaggle数据集实战操作

今天小编给大家展示的主题是一种重要的回归方法:Lasso回归,在该篇博文中会讲解该方法的基本理论知识和实际应用,将理论和实际操作相结合来对该方法进行详细阐述。

我们先从传统的回归方法进行讲解,传统的回归方法是使用OLS(普通最小二乘法)通过最小目标变量和预测变量之间的残差平方和来获得最优的估计参数,传统的回归方式的损失函数为:

                                                ​​​​​​\text{minimize} \left\{ ||y - X\beta||_2^2 \right\}

其中,y​是实际观测到的目标变量,X​是对应的特征矩阵,β​是待求解的系数向量。

通过最小化残差平方和的损失函数,OLS试图找到一组最佳的系数β​,使得预测值Xβ​与真实值y​之间的平方误差最小化。这样,OLS寻求的系数向量β​能够最好地拟合样本数据,并产生最小的预测误差。

OLS是一种常用的回归分析方法,尤其适用于特征与目标变量之间具有线性关系的情况。它通过最小化残差平方和来确定最佳的系数估计,不涉及额外的正则化项或惩罚项。

但是使用OLS估计会出现两个问题,第一就是预测的准确率,OLS估计经常会出现较低的偏差和较高的方差。在机器学习中,偏差是指模型在不同样本集上真实值和预测值之间的差异,简单地说,偏差衡量了模型对真实关系的拟合能力,如果偏差较低,模型能够相对准确地拟合数据中的关系,在这种情况下,模型可能在训练集上表现得很好,但是在测试集上的性能还需要检验。方差是描述模型对不同训练数据敏感程度的指标。简单来说,方差衡量了模型在不同数据集上的预测波动结果和差异程度,具体来说,方差衡量了模型的过拟合情况。如果方差较高,说明模型对于数据中的噪声或者随机性过于敏感,导致模型在不同数据集上的预测结果产生较大差异。这种情况被称为过拟合,模型在训练集数据上表现得很好,但是在测试集或者新的数据上预测性能下降。

因此,在构建机器学习模型时,需要平衡偏差和方差之间的关系,以找到一个适当的模型复杂度,能够在模型中取得较低的偏差和方差,这被称为偏差与方差折衷。可以通过将特征系数降低或者设置为0来提高模型的预测精准率。通过牺牲一些偏差来降低模型的方差从而提升模型整体的预测精准率。第二就是模型的可解释性,我们经常需要的是对模型影响最大的特征来解释模型就可以,而不是将所有的因素都考虑进行。

于是产生了两种方法来提高OLS估计,分别是subset selection(子集选择)和ridge regression(岭回归)。subset selection受特征变化影响较大,一旦模型基于选择的特征集进行训练,新增的特征不会得到考虑,需要重新进行特征选择并且会降低模型预测的精准率。ridge regression会将特征的系数下降,但是却不会将系数降为0,因此模型的解释性相对缺乏。Lasso回归实现了两者的结合,既将特征的系数进行压缩同时通过将一些特征系数压缩到0,留下最重要的特征实现特征选择的效果。

Lasso回归和岭回归对OLS估计对损失函数发生了变化,添加正则化项,Lasso回归对损失函数添加了L1正则项,岭回归对损失函数添加了L2正则项,他们分别对应的损失函数如下:

Lasso回归损失函数:

                                                \text{minimize} \left\{ ||y - X\beta||_2^2 + \lambda ||\beta||_1 \right\}

其中,y​是因变量,X​是自变量矩阵,β​是特征系数,λ​是正则化参数。

损失函数由两部分组成:第一部分是普通最小二乘法的残差平方和,第二部分是L1范数(绝对值之和)的惩罚项;

L1惩罚项具有稀疏性,可以使得一些特征的系数变为零,实现特征选择。

岭回归损失函数:

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        \text{minimize} \left\{ ||y - X\beta||_2^2 + \lambda ||\beta||_2^2 \right\}

其中,y​是因变量,X​是自变量矩阵,β​是特征系数,λ​是正则化参数。

损失函数同样由两部分组成:第一部分是普通最小二乘法的残差平方和,第二部分是L2范数(平方和)的惩罚项;

L2惩罚项有助于控制特征系数的大小,减小特征间的相关性,避免过拟合。

以上是关于Lasso回归的一些基础理论知识,如果大家对这一块的理论知识相深入研究的话,可以自行查阅相关的理论知识书籍,接下来,给大家分享一下Lasso回归在实际中的应用,Lasso回归在实际应用中主要侧重在以下几个方面:一、预测建模,Lasso回归可用于建立回归模型,对数据进行预测。通过降低模型复杂度和提高泛化能力,Lasso回归可以在预测模型中发挥重要作用。在经济领域经常可以见到使用Lasso回归来对某目标变量进行预测的实际应用场景;二、特征选择,Lasso回归非常适合用于特征选择,通过其L1正则化项的作用,可以将不相关或冗余的特征系数压缩为零,从而达到特征选择的效果。特征选择方面的应用在金融、医学等领域应用比较广泛,较常用的步骤是先通过Lasso回归选择出对目标变量影响最大的特征,然后再利用这些特征构建模型,在一定程度上降低了模型的过拟合,提升了模型的泛化能力同时提升了模型的可解释性。

接下来,我们将使用代码来对Lasso回归进行实际操作展示,涉及的内容是特征选择这一部分,回归模型的构建比较简单不进行展示。模型使用的数据来自于Kaggle网站中的Heart Attack Analysis & Prediction Dataset数据集,该数据结构如下:

特征中文含义
age患者的年龄
sex患者的性别
cp
胸痛类型
数值1:典型心绞痛 
数值2:非典型心绞痛 
数值3:非心绞痛性疼痛 
数值4:无症状
trtbps静息血压(单位:毫米汞柱)
chol胆固醇含量(单位:mg/dl,通过BMI传感器获取)
fbs(空腹血糖 > 120 毫克/分升)(1 = 是;0 = 否)
restecg

静息心电图结果

数值0:正常

数值1:出现ST-T波异常(T波倒置和/或ST段抬高或压低 > 0.05 毫伏)

数值2:根据Estes标准显示可能或明确的左心室肥大 thalach:达到的最大心率

thalachh0 = 心脏病发作几率较低;1 = 心脏病发作几率较高
exng运动诱发型心绞痛(1 = 是;0 = 否)
oldpeak之前的峰值
slp倾斜度
caa主要血管数量(0-3)
thall血液病
output0 = 心脏病发作几率较低;1 = 心脏病发作几率较高

数据展示如下,一共有300多条数据,无缺失值数据,因此不用进行其他处理

接下来我们将使用Lasso回归选择出这众多特征中对发病结果影响最大的特征,首先,我们先导入Lasso与画图相关的程序包

import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LassoCV
import numpy as np
import matplotlib.pyplot as plt

接下来,我们对数据进行读取,并对特征变量数据进行标准化处理,并且使用交叉验证训练验证模型确定最优的惩罚系数,具体代码如下

data = pd.read_csv('./data/heart.csv')
X=data[['age','sex','cp','trtbps','chol','fbs','restecg','thalachh','exng','oldpeak','slp','caa','thall']]
y = data[['output']]
# 特征标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 创建LassoCV模型
lasso_cv = LassoCV(cv=10,random_state=0)  # cv表示交叉验证折数

# 训练模型
lasso_cv.fit(X_scaled, y)
# 输出最佳alpha值
best_alpha = lasso_cv.alpha_
print("Best alpha value:", best_alpha)

我们这边得出的最优参数为0.0050247586624487875

对于最优惩罚系数的确定,我们可以通过绘制Lasso回归路径图进行查看,具体代码如下

# 获取alpha路径和对应的系数
alphas = lasso_cv.alphas_
mse = np.mean(lasso_cv.mse_path_, axis=1)


# 绘制Lasso路径图
plt.figure(figsize=(10, 6))
plt.plot(np.log10(lasso_cv.alphas_), lasso_cv.mse_path_.mean(axis=1))
plt.axvline(np.log10(best_alpha), linestyle='--', color='r', label='Best Alpha')
plt.xlabel('log10(alpha)')
plt.ylabel('Mean Squared Error')
plt.title('Lasso Path')
plt.legend()
plt.grid(True)
plt.show()

运行的结果如图所示:​​​​​​​​​​​​​​

在日常的学习和科研中我们在使用Lasso回归选择变量的时候,还需要看一下各个特征变量系数随着惩罚系数变化图,折线图显示会比较好看,并且直观,因此,我们这里使用折线图来绘制特征变量系数变化图

# 设置不同的alpha值范围
alpha_values = [0.001,0.002,0.005,0.008,0.01,0.1,1,10,50,100]
lasso = Lasso(max_iter=10000)
coefs = []
num_nonzero_coefs = []

for a in alpha_values:
    lasso.set_params(alpha=a)
    lasso.fit(X_scaled, y)
    coefs.append(lasso.coef_)
    num_nonzero_coefs.append(np.sum(lasso.coef_ != 0))

ax = plt.gca()
ax.plot(alpha_values, coefs)
ax.set_xscale('log')
plt.axis('tight')
plt.xlabel('Log(alpha)')
plt.ylabel('Coefficients')
plt.title('Lasso coefficients as a function of alpha');
plt.show()

 绘制结果如下图所示:

大家可以看见随着惩罚参数的变大,有很多特征变量的系数已经被压缩为0,最后我们还需要看一下最终选择出来的特征变量是哪些?在后续的操作中我们将会使用筛选出来的特征变量进行与研究主题相关的建模

# 创建Lasso回归模型
lasso = Lasso(alpha=0.0050247586624487875)

# 拟合模型并选择特征变量
lasso.fit(X_scaled, y)
# 获取特征变量的Lasso系数
coef = lasso.coef_

# 筛选被选择的变量
selected_features = [feature for feature, coef_value in zip(X.columns.tolist(), coef) if coef_value != 0]

# 输出选择的特征变量名称
print("Selected Features:")
for feature in selected_features:
    print(feature)

在本次案例中,我们筛选出来了一共筛选出来了12个对发病率影响最重要的特征,有一个特征已经被我们筛出去了,剩余的特征分别是:age、sex、cp、trtbps、chol、restecg、thalachh、exng、
oldpeak、slp、caa、thall,如果还有后续的研究,我们将会使用这些筛选出来的特征进行模型构建,大家可以看见,经过这样操作之后,后面构建的模型的解释性和准确性都会有一定程度的提升,对于特征数据的代码如下:

# 创建Lasso回归模型
lasso = Lasso(alpha=0.0050247586624487875)

# 拟合模型并选择特征变量
lasso.fit(X_scaled, y)
# 获取特征变量的Lasso系数
coef = lasso.coef_

# 筛选被选择的变量
selected_features = [feature for feature, coef_value in zip(X.columns.tolist(), coef) if coef_value != 0]

# 输出选择的特征变量名称
print("Selected Features:")
for feature in selected_features:
    print(feature)

以上就是Lasso回归的实践内容,大家想做相关的实践操作的话,可以按照我的这个代码仿照进行操作,对于实验数据集,大家如果不想去官网下载的话,可以关注我们的公众号“明天科技屋”,数据集会同步到公众号,希望大家多多关注和支持!

  • 26
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
多元线性回归是一种用于预测房屋价格的常用方法。它基于多个自变量与因变量之间的线性关系建立回归模型。在Python中,可以使用sklearn库的LinearRegression类来实现多元线性回归。 岭回归是对多元线性回归的一种正则化方法。它通过引入一个正则化项,可以在模型训练过程中对自变量的系数进行约束,从而避免过拟合的问题。在Python中,可以使用sklearn库的Ridge类来实现岭回归Lasso回归也是对多元线性回归的一种正则化方法,与岭回归类似,但它使用的是L1正则化。Lasso回归不仅可以约束自变量的系数,还可以用于特征选择,将不重要的特征的系数推向零。在Python中,可以使用sklearn库的Lasso类来实现Lasso回归。 使用这些方法进行房屋价格预测的步骤大致相同。首先,将房屋的特征作为自变量,房屋价格作为因变量,构建多元回归模型。然后,根据数据集中的房屋特征和对应的价格,利用模型进行训练。最后,可以使用训练好的模型对新的房屋特征进行预测,得到对应的价格。 需要注意的是,为了得到准确的预测结果,应该对数据进行适当的预处理,例如特征缩放、数据清洗和特征选择等。此外,还应该通过交叉验证等方法,选择适当的模型超参数,以避免过拟合或欠拟合的问题。 总的来说,多元回归、岭回归lasso回归都是常用的预测房屋价格的方法,使用Python中的相应库可以方便地实现这些方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的邓先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值