5.2 Lasso回归分析
最小绝对收缩和选择算子回归(通常简单地称为Lasso回归),实际上是在多元线性回归上增加了一个惩罚范数l1,范数起到了增强模型稳定性、筛选模型特征的效果
Lasso回归成本函数
使用糖尿病数据集
# Lasso回归分析
## 加载包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
## 图像在jupyter notebook中显示
%matplotlib inline
## 显示的图片格式(mac中的高清格式),还可以设置为"bmp"等格式
%config InlineBackend.figure_format = "retina"
## 输出图显示中文
from matplotlib.font_manager import FontProperties
fonts = FontProperties(fname = "D:\Desktop\python在机器学习中的应用\方正粗黑宋简体.ttf",size=14)
import statsmodels.api as sm
import statsmodels.formula.api as smf
from sklearn import metrics
from sklearn.model_selection import train_test_split
## 忽略提醒
import warnings
warnings.filterwarnings("ignore")
## 糖尿病数据集
diabete = pd.read_csv("D:\Desktop\python在机器学习中的应用\diabetes.csv",sep="\t")
# ,sep="\t"以逗号作为分隔符
print(diabete.sample(5))
## 分析数据间的相关性
datacor = np.corrcoef(diabete,rowvar=0)
datacor = pd.DataFrame(data=datacor,columns=diabete.columns,index=diabete.columns)
## 热力图可视化相关系数
plt.figure(figsize=(8,8))
ax = sns.heatmap(datacor,square=True,annot=True,fmt = ".3f",linewidths=.5,cmap="YlGnBu",cbar_kws={"fraction":0.046, "pad":0.03})
ax.set_title("数据变量相关性",fontproperties = fonts)
plt.show()
## 定义回归函数
from sklearn.linear_model import Lasso
from sklearn.metrics import r2_score,mean_absolute_error
def lasso_regression(data,test, predictors,pre_y, alpha):
# data 训练集,test 测试集,
#predictors 自变量名称,pre_y 因变量名称, alpha 惩罚系数
# 拟合模型lassoreg = Lasso(alpha=alpha,normalize=True, max_iter=1e5,fit_intercept=False)lassoreg.fit(data[predictors],data[pre_y])y_pred = lassoreg.predict(test[predictors])
# 输出模型的结果ret = [alpha]ret.append(r2_score(test[pre_y],y_pred))ret.append(mean_absolute_error(test[pre_y],y_pred))ret.extend(lassoreg.coef_)return ret
## 建立lasso回归模型
# 初始化预测自变量 和预测因变量
predictors= ['AGE', 'SEX', 'BMI', 'BP', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6']
prey = "Y"
# 定义alpha的取值范围
alpha_lasso = np.linspace(0.00005,2,20)
# 初始化数据表用来保存系数和得分
col = ['alpha','r2_score','mae','AGE', 'SEX', 'BMI', 'BP', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6']
ind = ['alpha_%.2g'%alpha_lasso[i] for i in range(0,len(alpha_lasso))]
coef_matrix_lasso = pd.DataFrame(index=ind, columns=col)
## 百分之80的数据用于训练,剩余的数据用于测试
np.random.seed(123456)
index = np.random.permutation(diabete.shape[0])
trainindex = index[0:350]
testindex = index[350:-1]
diabete_train = diabete.iloc[trainindex,:]
diabete_test = diabete.iloc[testindex,:]# 迭代alpha值:
for i in range(len(alpha_lasso)):coef_matrix_lasso.iloc[i] = lasso_regression(diabete_train,diabete_test,predictors,prey, alpha_lasso[i])
coef_matrix_lasso.sort_values("mae").head(5)
alpha_0.42时,mse(绝对误差)最小,在alpha_0.74时AGE、S5的系数为0,没有参与回归模型,即食用范数约束将这两个变量剔除了,下面回执的图像反映了在不同alpha下每个自变量系数的变化和平均绝对值误差(mse)的变化情况
ploty = ['AGE', 'SEX', 'BMI', 'BP', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6']
shape = ["s","p","*","h","+","x","D","o","v",">"]
plt.figure(figsize=(15,6))
plt.grid("on")
plt.subplot(1,2,1)
for ii in np.arange(len(ploty)):plt.plot(coef_matrix_lasso["alpha"],coef_matrix_lasso[ploty[ii]],color = plt.cm.Set1(ii / len(ploty)),label = ploty[ii],marker = shape[ii])plt.legend()plt.xlabel("Alpha")plt.ylabel("标准化系数",FontProperties = fonts)plt.subplot(1,2,2)
plt.plot(coef_matrix_lasso["alpha"],coef_matrix_lasso["mae"],linewidth = 2)
plt.xlabel("Alpha")
plt.ylabel("绝对值误差",FontProperties = fonts)
plt.suptitle("Lasso回归分析",FontProperties = fonts)
plt.show()
# 对全部的数据集拟合模型
lassoreg = Lasso(alpha=0.736874,normalize=True, max_iter=1e5,fit_intercept=False)
lassoreg.fit(diabete[predictors],diabete[prey])
Y_pre = lassoreg.predict(diabete[predictors])
## 绘制回归的预测结果和原始数据的差异
index = np.argsort(diabete.Y)
plt.figure(figsize=(12,5))
plt.plot(np.arange(diabete.shape[0]),diabete.Y[index],"r",label = "Original Y")
plt.plot(np.arange(diabete.shape[0]),Y_pre[index],"b--",label = "Prediction")
plt.legend()
plt.grid("on")
plt.xlabel("Index")
plt.ylabel("Y")
plt.title("Lasso回归结果对比",FontProperties = fonts)
plt.show()
缺点:波动较大
5.2 Lasso回归分析相关推荐
- python实现Lasso回归分析(特征筛选、建模预测)
实现功能: python实现Lasso回归分析(特征筛选.建模预测) 输入结构化数据,含有特征以及相应的标签,采用Lasso回归对特征进行分析筛选,并对数据进行建模预测. 实现代码: import n ...
- 5.Multil-task lasso(多任务lasso回归分析)
MultiTaskLasso 是一种估计多元回归系数的线性模型, y 是一个2D数组,形式为(n_samples,n_tasks). 其限制条件是和其他回归问题一样,是选择的特征,同样称为 tasks ...
- Python的lasso回归分析
加载调用函数包 import numpy as np # 快速操作结构数组的工具 import pandas import matplotlib.pyplot as plt # 可视化绘制 from ...
- 基于R语言实现LASSO回归分析
模拟假数据集 set.seed(0820)n <- 50p <- 25beta <- rep(0,p)beta[1:5] <- 1:5/5X <- matrix(rnor ...
- 【回归分析】MATLAB实现Lasso回归算法
Lasso回归算法 Lasso(Least Absolute Shrinkage and Selection Operator) 回归是一种线性回归方法,它可以在保持预测准确性的同时,通过稀疏性约束( ...
- 影像组学视频学习笔记(7)-特征筛选之LASSO回归(代码)、Li‘s have a solution and plan.
本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(7)主要介绍: 特征筛选之LASSO回归分析(代码实现) import pandas as pd import numpy as np ...
- 影像组学视频学习笔记(6)-特征筛选之LASSO回归(理论)、Li‘s have a solution and plan.
本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(6)主要介绍: 特征筛选之LASSO回归分析(理论通俗讲解) LASSO (Least Absolute Shrinkage Selec ...
- 案例 | 基于JMP Pro的Lasso及岭回归在水稻全基因组预测中的应用
全基因组选择是21世纪动植物育种的一种重要的选择策略,其核心就是全基因组预测,即基于分布在整个基因组上的多样性分子标记来对育种值进行预测,为个体的选择提供依据.但目前提出的大多数全基因组预测方法都涉及 ...
- R语言与LASSO回归和LAR算法
LASSO介绍 Tibshirani(1996)提出了LASSO(The Least Absolute Shringkage and Selectionator operator)算法 通过构造一个一 ...
最新文章
- layout折叠后显示标题
- Spring学习总结二
- 计算机还是数学竞赛内容吗,除了AMC,数学牛娃还能参加什么高含金量的数学竞赛...
- php post授权编写,php模拟post行为代码总结(POST方式不是绝对安全)
- 基于java SSM框架的旅游网站设计开发(含源文件)
- Flink流式处理百万数据量CSV文件
- 2021年贵金属黄金会迎来大行情吗?
- Eclipse环境安装Python插件PyDev
- Javascript 高级程序设计--总结【二】
- Linux目录结构示意详解图
- SpringBoot整合mybatis 配置文件备份
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 工程数学线性代数第六版答案与解析,《线性代数附册学习辅导与习题全解》
- c++ 中——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
- 大学计算机思维导图_3款免费在线思维导图网站,你一定要收藏一个!
- Flash CS6中文版
- 微信小程序商城(微店)系统部署及搭建 电商类
- linux tts 中文,基于linux的中文TTS 简单实现
- spark on hive 的部署,和spark on hive (ha)在本地测试步骤
- 安卓手机连接IP100蓝牙打印机实现打印功能
热门文章
- 2018互联网实习秋招回顾(BATM+MS+Intel+NE+DJI)
- 2020/09/20 React中获取target(报错信息Warning: This synthetic event is reused for performance reasons.)
- 系统栈与用户栈 以及 栈的内部实现
- LibreCAD+Mingw编译记录
- 信安专业学生-必考认证证书( 2023.1-6月 CISP/NISP考试安排)
- 论Cardano修仙之路,聊ADA现状分析
- Android SELinux 的认知以及 init 的相关知识,Linux 环境利用这2个模块进行白名单测试 -- 架构分析
- Latex引用参考文献-BibTex的使用
- PS2键盘第二套键盘扫描码学习发现
- 音视频从入门到精通——FFmpeg数据结构分析