python-sklearn岭回归与LASSO回归模型(套索)代码实操

这篇具有很好参考价值的文章主要介绍了python-sklearn岭回归与LASSO回归模型(套索)代码实操。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

hello大家好这里是小L😊在这里想和大家一起学习一起进步。💪
这次笔记内容:学习岭回归与LASSO回归模型的sklearn实现。岭回归:平方和(L2正则化);LASSO回归:绝对值(L1正则化)。
为了防止线性回归的过拟合,加了正则化系数,系数可能有正有负,因此将他的绝对值或者平方和加起来,使得误差平方和最小。

一、岭回归

1.岭回归介绍

L2正则化
lasso代码,机器学习,python,sklearn,回归,大数据,机器学习

sklearn.linear_model.Ridge(

  • alpha=1:正则化因子(系数theta),入越大,越限制theta(即斜率k)越平缓,系数越小系数越小误差越小。入越大,绝对值越接近于0。(限制x的发展,如果取0,x放飞)
  • fit_ intercept=True:截距,是否计算该模型截距。(除非数据标准化之后可false. )
  • normalize=False:标准化false,标准化一般在建模之前做(sklearn.preprocessing.StandardScale)。
  • copy_X=True:原始的x还在,中间的用另一个存在。如false不要原来的x,新数据覆盖旧数据。
  • max_iter=None: 最大迭代次数
  • tol =0.001:忍耐力,每努力一次提升的效果不大,提升没有超过0.001就停止
  • solver =‘auto’:提供很多方法
    lasso代码,机器学习,python,sklearn,回归,大数据,机器学习
  • random_state:随机种子

属性

  • intercept_ :截距
  • coef_ :系数theta1到thetan,第几个自变量前面的系数,没有截距,只限制theta1–thetan来防止过拟合(决定斜率k),theta0(截距)没有关系
  • n_iter_:迭代多少次

方法

  • fit 训练
  • predict预测
  • score模型评估,不大于1,越大越好
  • get_params返回超参数的值
  • set_params修改超参数的值重新训练

2.代码实现

from sklearn.datasets import load_diabetes
diabetes=load_diabetes()#以糖尿病模型为例
X=diabetes.data#自变量
y=diabetes.target#因变量
from sklearn.model_selection import train_test_split#数据划分
X_train,X_test,y_train,y_test=train_test_split(X,y,random=8)
from sklearn.linear_model import Ridge#导入岭回归模型
ridge=Ridge()#模型实例化
ridge.fit(X_train,y_train)#模型训练
print("训练集的得分为:{:,2f}".format(ridge.score(X_train,y_train)))
print("测试集的得分为:{:,2f}".format(ridge.score(X_test,y_test)))

运行结果如下:

训练数据集得分:0.43
测试数据集得分:0.43

可以看出效果并不是很好,但是也不能因为一次结果否定这个模型,可以通过调参的方法,重新进行模型训练。

3.岭回归参数调整

#岭回归调参
#正则化系数alpha=10
ridge10=Ridge(alpha=10).fit(X_train,y_train)
print("训练数据集得分:{:.2f}".format(ridge10.score(X_train,y_train)))
print("测试数据集得分:{:.2f}".format(ridge10.score(X_test,y_test)))

运行结果如下:

训练数据集得分:0.15
测试数据集得分:0.16

可以看出结果更加糟糕

#正则化系数alpha=0.1
ridge01=Ridge(alpha=0.1).fit(X_train,y_train)
print("训练数据集得分:{:.2f}".format(ridge01.score(X_train,y_train)))
print("测试数据集得分:{:.2f}".format(ridge01.score(X_test,y_test)))

运行结果如下:

训练数据集得分:0.52
测试数据集得分:0.47

4.岭迹分析,可视化分析

#岭迹分析
#10个特征0-9,在4种回归的系数画出来
#模型系数的可视化比较
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(ridge.coef_,'s',label='Ridge alpha=1')
plt.plot(ridge10.coef_,'^',label='Ridge alpha=10')
plt.plot(ridge01.coef_,'v',label='Ridge alpha=0.1')
plt.plot(lr.coef_,'o',label='linear regression')
plt.xlabel("系数序号")
plt.ylabel("系数量级")
plt.hlines(0,0,len(lr.coef_))#hlines水平线从0到10(查)
plt.legend(loc='best')
plt.grid(linestyle=':')

lasso代码,机器学习,python,sklearn,回归,大数据,机器学习

alpha越大,绝对值越接近于0。(限制x的发展,如果取0,x放飞)

#绘制学习曲线:取固定alpha的值,改变训练集的数量
import numpy as np
from sklearn.model_selection import learning_curve,KFold
def plot_learning_curve(est,X,y):
    training_set_size,train_scores,test_scores=learning_curve(
        est,X,y,train_sizes=np.linspace(.1,1,20),cv=KFold(20,shuffle=True,random_state=1))
    estimator_name=est.__class__.__name__
    line=plt.plot(training_set_size,train_scores.mean(axis=1),'--',
                 label='training'+estimator_name)
    plt.plot(training_set_size,test_scores.mean(axis=1),'-',
             label='test'+estimator_name,c=line[0].get_color())
    plt.xlabel('Training set size')
    plt.ylabel('Score')
    plt.ylim(0,1.1)
plot_learning_curve(Ridge(alpha=1),X,y)
plot_learning_curve(LinearRegression(),X,y)
plt.legend(loc=(0,1.05),ncol=2,fontsize=11)
plt.grid(linestyle=':')

lasso代码,机器学习,python,sklearn,回归,大数据,机器学习

二、LASSO回归

1.LASSO回归介绍

L1正则化
lasso代码,机器学习,python,sklearn,回归,大数据,机器学习

sklearn.linear_model.Lasso(

  • alpha=1:正则化因子(系数theta),入越大,越限制theta(即斜率k)越平缓,系数越小系数越小误差越小。入越大,绝对值越接近于0。(限制x的发展,如果取0,x放飞)
  • fit_ intercept=True:截距,是否计算该模型截距。(除非数据标准化之后可false. )
  • normalize=False:标准化false,标准化一般在建模之前做(sklearn.preprocessing.StandardScale)。
  • precompute=False
  • **copy_X=**True:原始的x还在,中间的用另一个存在。如false不要原来的x,新数据覆盖旧数据。
  • max_iter=1000: 最大迭代次数
  • tol =0.0001:忍耐力,每努力一次提升的效果不大,提升没有超过0.001就停止
  • warm_start =True:下一次运行会从当前的点继续往下走,若False每次都重新运行一次[重新开始](深度学习中经常有这个参数)
  • positive=False
  • random_state=None:随机种子
    selection=‘cyclic’

2.代码实现

from sklearn.datasets import load_diabetes
diabetes=load_diabetes()#以糖尿病模型为例
X=diabetes.data#自变量
y=diabetes.target#因变量
from sklearn.model_selection import train_test_split#数据划分
X_train,X_test,y_train,y_test=train_test_split(X,y,random=8)
from sklearn.linear_model import Lasso#导入Lasso回归模块
lasso=Lasso()#模型实例化
lasso.fit(X_train,y_train)#模型训练
print("套索回归在训练集的得分为:{:,2f}".format(lasso.score(X_train,y_train)))
print("套索回归在测试集的得分为:{:,2f}".format(lasso.score(X_test,y_test)))

运行结果如下:

训练数据集得分:0.36
测试数据集得分:0.37

可以看出效果并不是很好,但是也不能因为一次结果否定这个模型,可以通过调参的方法,重新进行模型训练。

ps. Lasso回归的特征选择

#岭回归圈圈(L2范数,里面可以有多个0,削尖,把很多特征都削成0),Lasso回归四条直线(L1范数方形)
lasso和岭回归,根据最小二乘法,最后需要使误差最小。
lasso代码,机器学习,python,sklearn,回归,大数据,机器学习
lasso代码,机器学习,python,sklearn,回归,大数据,机器学习
lasso代码,机器学习,python,sklearn,回归,大数据,机器学习

由于岭回归对w的限制空间是圆形的,lasso对w的限制空间是由棱角的。椭圆更容易切在w为某一维的图形为有棱角的图形,即Lasso回归模型。(圆形有凸起会阻挡切在0的位置)

LASSO回归相对于岭回归,更适合做特征选择。(面试问题)
怎样调节优化多个特征,选出更重要的特征,使得我们的精度更高

print("套索回归使用的特征数:{}".format(np.sum(lasso.coef_!=0)))

运行结果如下:

套索回归使用的特征数:3

比较一下岭回归和Lasso回归中能使用的特征数
Lasso回归

lasso.coef_

运行结果如下:

array([  0.        ,  -0.        , 384.73421807,  72.69325545,
         0.        ,   0.        ,  -0.        ,   0.        ,
       247.88881314,   0.        ])

岭回归

ridge.coef_

运行结果如下:

array([  36.8262072 ,  -75.80823733,  282.42652716,  207.39314972,
         -1.46580263,  -27.81750835, -134.3740951 ,   98.97724793,
        222.67543268,  117.97255343])

3.岭回归参数调整

#增大最大迭代次数的默认设置,(默认max_iter=1000)
lasso=Lasso(max_iter=100000)
lasso.fit(X_train,y_train)
print("训练数据集得分:{:.2f}".format(lasso.score(X_train,y_train)))
print("测试数据集得分:{:.2f}".format(lasso.score(X_test,y_test)))
print("套索回归中使用的特征数:{}".format(lasso.score(X_test,y_test)))

运行结果如下:

训练数据集得分:0.36
测试数据集得分:0.37
套索回归中使用的特征数:0.36561858962128

可以看出结果并没有什么变化,所以换一个参数继续调参

#增加最大迭代次数的默认值设置,(默认max_iter=1000)
#同时调整alpha的值
lasso01=Lasso(alpha=0.1,max_iter=100000)
lasso01.fit(X_train,y_train)
print("训练数据集得分:{:.2f}".format(lasso01.score(X_train,y_train)))
print("测试数据集得分:{:.2f}".format(lasso01.score(X_test,y_test)))
print("套索回归中使用的特征数:{}".format(lasso01.score(X_test,y_test)))

运行结果如下:

训练数据集得分:0.52
测试数据集得分:0.48
套索回归中使用的特征数:0.47994757514558173

继续尝试探索规律

#增加最大迭代次数的默认值设置,(默认max_iter=1000)
#同时调整alpha的值
lasso00001=Lasso(alpha=0.0001,max_iter=100000)
lasso00001.fit(X_train,y_train)
print("训练数据集得分:{:.2f}".format(lasso00001.score(X_train,y_train)))
print("测试数据集得分:{:.2f}".format(lasso00001.score(X_test,y_test)))
print("套索回归中使用的特征数:{}".format(lasso00001.score(X_test,y_test)))

结果如下:

训练数据集得分:0.53
测试数据集得分:0.46
套索回归中使用的特征数:0.4594509683706015

alpha越大,选的特征越少。alpha=0时,普通的线性回归(限制x的发展,如果取0,x放飞)

4.模型系数的数据可视化比较

plt.plot(ridge.coef_,'s',label='Ridge alpha=1')
plt.plot(ridge10.coef_,'^',label='Ridge alpha=10')
plt.plot(ridge01.coef_,'v',label='Ridge alpha=0.1')
plt.plot(lr.coef_,'o',label='linear regression')

plt.plot(lasso.coef_,'D',label='Lasso alpha=1')
plt.plot(lasso01.coef_,'H',label='Lasso alpha=0.1')
plt.plot(lasso00001.coef_,'p',label='Lasso alpha=0.0001')


plt.xlabel("系数序号")
plt.ylabel("系数量级")
plt.hlines(0,0,len(lr.coef_))#hlines水平线从0到10(查)
plt.legend(loc='best')
plt.grid(linestyle=':')

lasso代码,机器学习,python,sklearn,回归,大数据,机器学习文章来源地址https://www.toymoban.com/news/detail-780230.html

到了这里,关于python-sklearn岭回归与LASSO回归模型(套索)代码实操的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Lasso回归的实证分析(Python实现代码)

    基于Lasso回归的实证分析 一、背景 随着信息化时代的到来,对如证券市场交易数据、多媒体图形图像视频数据、航天航空采集数据、生物特征数据等数据维度远大于样本量个数的高维数据分析逐渐占据重要地位。而在分析高维数据过程中碰到最大的问题就是维数膨胀,也就是

    2024年02月01日
    浏览(49)
  • 猿创征文|Python-sklearn机器学习之旅:我的第一个机器学习实战项目

    目录 前言 一、从目的出发 1.导入数据 二、项目开启 1.导入数据

    2024年01月24日
    浏览(53)
  • 回归预测模型:MATLAB岭回归和Lasso回归

    1. 岭回归和Lasso回归的基本原理 1.1 岭回归: 岭回归(Ridge Regression) 是一种用于共线性数据分析的技术。共线性指的是自变量之间存在高度相关关系。岭回归通过在损失函数中添加一个L2正则项( λ ∑ j = 1 n β j 2 lambda sum_{j=1}^{n} beta_j^2 λ ∑ j = 1 n ​ β j 2 ​ )来减小回归

    2024年02月19日
    浏览(55)
  • 【R语言】LASSO回归(含代码)

    LASSO回归是由统计学家Robert Tibshirani于1996年提出的一种回归分析方法。它通过在损失函数中加入L1正则化项,实现对模型参数的惩罚,使得一部分参数趋于零。这种稀疏性的特点使得LASSO回归在高维数据集中具有出色的性能。 基因表达数据分析:LASSO回归可以用于选择最相关的

    2024年04月11日
    浏览(41)
  • 多元线性回归的python代码实现(基于sklearn的波士顿房价boston数据集为例)

    基于sklearn自带数据集波士顿房价数据集进行多元线性回归算法代码实现,其数据集包括13个特征向量,共计506个样本集。 本文代码实现步骤如下: 1. 获取数据集 2. 数据集切分,老规矩,80%训练,20%测试 3. 数据预处理(本用例尝试过归一化处理,但发现效果不好,不是每一个

    2024年02月06日
    浏览(48)
  • 模型应用系实习生-模型训练笔记(更新至线性回归、Ridge回归、Lasso回归、Elastic Net回归、决策树回归、梯度提升树回归和随机森林回归)

    本次训练的变量是一致对应的,训练准备通过后,后续建模都不会有报错的! scikit-learn包以及镜像 必须全部为数字类型且无空值才能进行训练,关于非数据类型需要进行相对处理例如:可以采用独热编码或者label编码进行处理。 本文演示的是pandas 的dataframe数据类型的操作,

    2024年02月06日
    浏览(43)
  • 二分类结局LASSO回归筛选变量-R操作(从数据开始)+全套代码

    一、原始数据处理 如图: 结局status为二分类变量(用0,1表示) 自变量为X1~X15 数据文件名为mydata.csv 二、将数据导入Rstudio 点readr后点击browse找到你的数据,点击Import就可以导入进来了。 三、R代码进行LASSO回归 如下图所示,第一张图为plot(lasso_model,xvar=“lambda”)的结果 第

    2024年01月22日
    浏览(53)
  • python实现Lasso回归分析(特征筛选、建模预测)

    实现功能: python实现Lasso回归分析(特征筛选、建模预测) 输入结构化数据,含有特征以及相应的标签,采用Lasso回归对特征进行分析筛选,并对数据进行建模预测。 实现代码: 实现效果: # 绘制Lambda与回归系数的关系    # 基于最佳的lambda值建模进行特征分析    # 基于

    2023年04月12日
    浏览(44)
  • 【sklearn】回归模型常规建模流程

    基于数十种统计类型特征,构建LR回归模型。代码逻辑包含:样本切分、特征预处理、模型训练、模型评估、特征重要性的可视化。 步骤一:导入所需库 步骤二:读取数据 步骤三:数据预处理 步骤四:模型评估 步骤五:特征重要性的可视化

    2024年02月14日
    浏览(30)
  • 机器学习回归任务指标评价及Sklearn神经网络模型评价实践

    机器学习回归模型评价是指对回归模型的性能进行评估,以便选择最佳的回归模型。其中,MAE、MSE、RMSE 用于衡量模型预测值与真实值之间的误差大小,R² 用于衡量模型对数据的拟合程度。在实际应用中,我们可以使用这些指标来评估回归模型的性能,并对模型进行优化。

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包