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

这篇具有很好参考价值的文章主要介绍了基于Lasso回归的实证分析(Python实现代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于Lasso回归的实证分析
一、背景
随着信息化时代的到来,对如证券市场交易数据、多媒体图形图像视频数据、航天航空采集数据、生物特征数据等数据维度远大于样本量个数的高维数据分析逐渐占据重要地位。而在分析高维数据过程中碰到最大的问题就是维数膨胀,也就是通常所说的“维数灾难”问题。研究表明,随着维数的增长,分析所需的空间样本数会呈指数增长。并且在高维数据空间中预测将变得不再容易,同时还容易导致模型的过拟合。因此为了应对高维数据中的维数灾难所带来的过拟合问题,其中一条解决思路是进行数据降维。在数据降维的方法中,Lasso方法是一种既适用于线性情况也适用于非线性情况的数据降维方法。
二、理论基础
Lasso方法是基于惩罚方法对样本数据进行变量选择,通过对原本普通线性回归模型的系数进行压缩,将原本很小的系数直接压缩至0,从而将这部分系数所对应的变量视为非显著性变量,将不显著的变量直接舍弃,达到简化模型的目的。
基于Lasso回归的实证分析(Python实现代码)
基于Lasso回归的实证分析(Python实现代码)
三、数据来源
《统计学习导论-基于R应用》的信用卡违约数据
四、变量选择
基于Lasso回归的实证分析(Python实现代码)

1.被解释变量:Balance信用卡账户余额,记为Y。
2.解释变量:
(1)Income:收入情况。
(2)Limit:信用额度。
(3)Rating:信用等级。
(4)Cards:信用卡数量。
(5)Age:年龄。
(6)Education:判断受教育程度。
(7)Gender:判断性别。
(8)Student:判断是否为学生。
(9)Married:判断婚姻状况。
(10)Ethnicity:划分种族。
基于Lasso回归的实证分析(Python实现代码)

五、建模步骤
基于Lasso回归的实证分析(Python实现代码)
基于Lasso回归的实证分析(Python实现代码)

3.使用Lasso回归进行变量选择
利用Lasso回归模型的交叉验证确定最佳的惩罚项系数λ,基于最佳的λ值重新构建Lasso回归模型来确定解释变量的系数。
基于Lasso回归的实证分析(Python实现代码)

使用交叉验证来选择最佳的调整参数,使用均方误差进行评估,故模型预测准确率较高,均方误差较小(MSE: 0.0012621555901723037)。
绘制正则化路径,可知变量进入模型的先后顺序Rating、Limit、Income、Student_Yes,说明这四个变量对信用卡账户余额的影响效果显著
基于Lasso回归的实证分析(Python实现代码)

前四个进入模型的自变量: [‘Rating’ ‘Limit’ ‘Income’ ‘Student_Yes’]
从拟合结果可知,信用卡账户余额(Balance)Y预测模型中系数系数有7个为0,分别为Cards、Age、Education、Gender_Male、Married_Yes、Ethnicity_Asian、Ethnicity_Caucasian,说明信用卡数量、年龄、受教育程度、性别、婚姻状况、种这五个变量对信用卡账户余额没有显著意义,故Y的回归模型可表达为:
基于Lasso回归的实证分析(Python实现代码)
六、Python实现代码文章来源地址https://www.toymoban.com/news/detail-430295.html

# -*- coding: utf-8 -*-
"""
Created on Thu May 19 19:30:29 2022

@author: DELL
"""


'''
Lasso变量选择,某些自变量系数估计值压缩为零。
首先构建包含所有自变量的的模型,注意要对属性类型进行因子化,即转换成哑变量。
'''

from sklearn.preprocessing import StandardScaler
import statsmodels.formula.api as smf
import statsmodels.api as sm
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import patsy
pd.set_option("display.max_rows",None)
pd.set_option("display.max_columns",None)
pd.set_option("display.expand_frame_repr",False)
data = pd.read_csv(r'E:\研究生\关于课程\研一下\高维函数型数据分析\作业\第二次作业\datashine-master\data\credit.csv',index_col=0)
print('数据形状:',data.shape)
print('\n数据示例:')
data.head(10)
print("各样本统计量描述")
print(data.describe())


X = data.copy()
scaler = StandardScaler()
#数值型数据进行标准化
X[['Income','Limit','Rating','Cards','Age','Education']]=scaler.fit_transform(
    X[['Income','Limit','Rating','Cards','Age','Education']])
X['Balance']=data['Balance']

###模型包含了所有自变量,对于因子变量通过patsy的C函数转换成category类别变量
#C为设计矩阵
formula = 'Balance~Income+Limit+Rating+Cards+Age+Education+C(Gender)\
               +C(Student)+C(Married)+C(Ethnicity)'

#构建简单的线性回归模型
#普通最小二乘法,用标准化后的数据进行拟合

model=smf.ols(formula,data=X)
print(model)
result_ols=model.fit()
#拟合后的统计描述
print(result_ols.summary())


#lasso回归
#最优 λ参数选择
#选择fit_regularized函数参数 α 的最优值
X1=data.copy()
dummies1 = pd.get_dummies(X1.Student, prefix='Student')
dummies2 = pd.get_dummies(X1.Gender, prefix='Gender')
dummies3 = pd.get_dummies(X1.Married, prefix='Married')
dummies4 = pd.get_dummies(X1.Ethnicity, prefix='Ethnicity')
X1=X1.drop('Student',axis=1).join(dummies1)
X1=X1.drop('Gender',axis=1).join(dummies2)
X1=X1.drop('Married',axis=1).join(dummies3)
X1=X1.drop('Ethnicity',axis=1).join(dummies4)
X1=X1.drop('Student_No',axis=1)
X1=X1.drop('Gender_Female',axis=1)
X1=X1.drop('Married_No',axis=1)
X1=X1.drop('Ethnicity_African American',axis=1)
scaler = StandardScaler()
X1[['Income','Limit','Rating','Cards','Age','Education','Balance']]=scaler.fit_transform( \
    X1[['Income','Limit','Rating','Cards','Age','Education','Balance']])
#X1['Balance']=data['Balance']
dummies1,X1.head()


'''
Lasso的Lambda最优值选择。
使用sklearn机器学习库相关函数,比如LassoCV等。sklearn中对应的模型为LASSO以及带自动筛选alpha值得LASSOCV模型
'''
import pandas as pd
import numpy as np
from sklearn import model_selection
from sklearn.linear_model import Lasso, LassoCV, LassoLarsIC
from sklearn.metrics import mean_squared_error

predictors=['Income','Limit','Rating','Cards','Age','Education',
            'Student_Yes','Gender_Male','Married_Yes',
            'Ethnicity_Asian','Ethnicity_Caucasian']
x_train,x_test,y_train,y_test=model_selection.train_test_split(X1[predictors],
                                                               X1.Balance,test_size=0.2,
                                                               random_state=1234)
#构造不同的lambda值
#等比数列
Lambdas=np.logspace(-5,10,200)
#设置交叉验证的参数,使用均方误差评估
lasso_cv=LassoCV(alphas=Lambdas,normalize=False,cv=10,max_iter=10000)
lasso_cv.fit(x_train,y_train)

print("确定最佳的惩罚项系数:",lasso_cv.alpha_)
#基于最佳lambda值建模
lasso=Lasso(alpha=lasso_cv.alpha_,normalize=True,max_iter=10000)
lasso.fit(x_train,y_train)
#打印回归系数
print('系数列表:',pd.DataFrame(index=['Intercept']+x_train.columns.tolist(),columns=[''],
                           data=[lasso.intercept_]+lasso.coef_.tolist()))

#模型评估
lasso_pred=lasso.predict(x_test)

#均方误差
# Balance_80=y_test
# print(Balance_80)
# Balance_predict_80=pd.Series(lasso_pred)
# print(Balance_predict_80)
MSE=mean_squared_error(y_test,lasso_pred)/80
print('\nMSE:',MSE,'\n\n最优lambda:',lasso_cv.alpha_)


import matplotlib.pyplot as plt
from sklearn import linear_model
X2=x_train
Y2=y_train
X3=np.array(X2)
Y3=np.array(Y2)
#使用LARS的Lasso路径LARS算法几乎完全提供了沿着正则化参数的系数的完整路径,
# 因此常见的操作是使用包括所有检索的路径的 lars_path函数。
#是Lasso模型在引入了LARS算法后的一种新的实现。
#这不同于基于坐标下降的实现,它会产生一个精确的解,作为其系数的范数的分段线性函数。
_, n3, coefs = linear_model.lars_path(X3, Y3, method='lasso',verbose=True)
print("进入模型的自变量对应的索引值:",n3)
xx = np.sum(np.abs(coefs.T), axis=1)
xx /= xx[-1]

plt.figure(figsize=[12,8])
plt.plot(xx, coefs.T)

ymin, ymax = plt.ylim()

plt.vlines(xx, ymin, ymax, linestyle='dashed')
plt.xlabel('|coef| / max|coef|')
plt.ylabel('Coefficients')
plt.title('LASSO Path')
plt.axis('tight')
plt.legend(np.array(predictors)[n3],fontsize=14,bbox_to_anchor=(1, 0), loc=3, borderaxespad=0)
print('前四个进入模型的自变量:',np.array(predictors)[n3[0:4]])

plt.savefig('正则化路径图.png',bbox_inches='tight')
plt.show()

到了这里,关于基于Lasso回归的实证分析(Python实现代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数学建模—多元线性回归分析(+lasso回归的操作)

    定义:回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的人数就是,通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的。 常见的回归分析有五类:线性回归

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

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

    2024年04月11日
    浏览(29)
  • 机械学习模型训练常用代码(随机森林、聚类、逻辑回归、svm、线性回归、lasso回归,岭回归)

    更多pandas操作请参考添加链接描述pandas对于文件数据基本操作 导入的包sklearn 字符串编码处理,LabelEncoder TfidfVectorizer结合TruncatedSVD 排除某一列,例如 如果需要用到回归则换成RandomForestRegressor 数据在dc_matrix里面 绘制距离 #加入到表里面 师范,保存文本模型,使用其转换,调

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

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

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

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

    2024年02月06日
    浏览(36)
  • Eviews用向量自回归模型VAR实证分析公路交通通车里程与经济发展GDP协整关系时间序列数据和脉冲响应可视化...

    河源市是国务院1988年1月7日批准设立的地级市,为了深入研究河源市公路交通与经济发展的关系,本文选取了1988-2014年河源市建市以来24年的地区生产总值(GDP)和公路通车里程(GL)的时间序列数据,其中公路通车里程(GL)用来反映河源市公路交通发展状况,地区生产总

    2024年02月09日
    浏览(35)
  • 基于R语言的影视评分影响因素实证分析(一)

    电影票房 电影自从1895年在法国巴黎公开售票放映以来,至今已有百余年的历史。电影以其独特的艺术魅力和无与伦比的视听效果,深深地吸引了亿万观众。在各种文化娱乐、艺术样式中,电影是最受人民群众欢迎的。 近年来,我国的电影市场总的趋势是疲软的,虽然靠进口

    2024年04月10日
    浏览(29)
  • Lasso回归系列二:Lasso回归/岭回归的原理

    在学习L1,L2正则化的作用和区别时,我们总是会看到这样的一副图片: 这幅图片形象化地解释了L1,L2对线性模型产生的不同的约束效果。 我最开始其实是不太理解为什么要这么画的。比如 1、L1范数(L1-norm)等值线一定会和平方误差项等值线相交于某一坐标轴吗? 2、Lasso回归

    2023年04月14日
    浏览(25)
  • 基于Python的多元线性回归分析

    一、多元线性回归分析(Multiple regression) 1.与简单线性回归相比较,具有多个自变量x 2.多元回归模型 其中是误差值,与简单线性回归分析中的要求特点相一致。其余的系数和截距为参数。 3.多元回归方程 4.估计多元回归方程(点估计) 5.估计方法 使方差和最小,即 从而得到一

    2024年02月06日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包