最小绝对收缩和选择算子回归(通常简单地称为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回归分析相关推荐

  1. python实现Lasso回归分析(特征筛选、建模预测)

    实现功能: python实现Lasso回归分析(特征筛选.建模预测) 输入结构化数据,含有特征以及相应的标签,采用Lasso回归对特征进行分析筛选,并对数据进行建模预测. 实现代码: import n ...

  2. 5.Multil-task lasso(多任务lasso回归分析)

    MultiTaskLasso 是一种估计多元回归系数的线性模型, y 是一个2D数组,形式为(n_samples,n_tasks). 其限制条件是和其他回归问题一样,是选择的特征,同样称为 tasks ...

  3. Python的lasso回归分析

    加载调用函数包 import numpy as np # 快速操作结构数组的工具 import pandas import matplotlib.pyplot as plt # 可视化绘制 from ...

  4. 基于R语言实现LASSO回归分析

    模拟假数据集 set.seed(0820)n <- 50p <- 25beta <- rep(0,p)beta[1:5] <- 1:5/5X <- matrix(rnor ...

  5. 【回归分析】MATLAB实现Lasso回归算法

    Lasso回归算法 Lasso(Least Absolute Shrinkage and Selection Operator) 回归是一种线性回归方法,它可以在保持预测准确性的同时,通过稀疏性约束( ...

  6. 影像组学视频学习笔记(7)-特征筛选之LASSO回归(代码)、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(7)主要介绍: 特征筛选之LASSO回归分析(代码实现) import pandas as pd import numpy as np ...

  7. 影像组学视频学习笔记(6)-特征筛选之LASSO回归(理论)、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(6)主要介绍: 特征筛选之LASSO回归分析(理论通俗讲解) LASSO (Least Absolute Shrinkage Selec ...

  8. 案例 | 基于JMP Pro的Lasso及岭回归在水稻全基因组预测中的应用

    全基因组选择是21世纪动植物育种的一种重要的选择策略,其核心就是全基因组预测,即基于分布在整个基因组上的多样性分子标记来对育种值进行预测,为个体的选择提供依据.但目前提出的大多数全基因组预测方法都涉及 ...

  9. R语言与LASSO回归和LAR算法

    LASSO介绍 Tibshirani(1996)提出了LASSO(The Least Absolute Shringkage and Selectionator operator)算法 通过构造一个一 ...

最新文章

  1. layout折叠后显示标题
  2. Spring学习总结二
  3. 计算机还是数学竞赛内容吗,除了AMC,数学牛娃还能参加什么高含金量的数学竞赛...
  4. php post授权编写,php模拟post行为代码总结(POST方式不是绝对安全)
  5. 基于java SSM框架的旅游网站设计开发(含源文件)
  6. Flink流式处理百万数据量CSV文件
  7. 2021年贵金属黄金会迎来大行情吗?
  8. Eclipse环境安装Python插件PyDev
  9. Javascript 高级程序设计--总结【二】
  10. Linux目录结构示意详解图
  11. SpringBoot整合mybatis 配置文件备份
  12. 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
  13. 工程数学线性代数第六版答案与解析,《线性代数附册学习辅导与习题全解》
  14. c++ 中——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
  15. 大学计算机思维导图_3款免费在线思维导图网站,你一定要收藏一个!
  16. Flash CS6中文版
  17. 微信小程序商城(微店)系统部署及搭建 电商类
  18. linux tts 中文,基于linux的中文TTS 简单实现
  19. spark on hive 的部署,和spark on hive (ha)在本地测试步骤
  20. 安卓手机连接IP100蓝牙打印机实现打印功能

热门文章

  1. 2018互联网实习秋招回顾(BATM+MS+Intel+NE+DJI)
  2. 2020/09/20 React中获取target(报错信息Warning: This synthetic event is reused for performance reasons.)
  3. 系统栈与用户栈 以及 栈的内部实现
  4. LibreCAD+Mingw编译记录
  5. 信安专业学生-必考认证证书( 2023.1-6月 CISP/NISP考试安排)
  6. 论Cardano修仙之路,聊ADA现状分析
  7. Android SELinux 的认知以及 init 的相关知识,Linux 环境利用这2个模块进行白名单测试 -- 架构分析
  8. Latex引用参考文献-BibTex的使用
  9. PS2键盘第二套键盘扫描码学习发现
  10. 音视频从入门到精通——FFmpeg数据结构分析