logistic回归、lasso回归、ridge回归、Elastic Net回归之间的总结

article/2025/9/28 21:19:48

1. 概念

一直看一遍忘一遍,实在懒得再查了,理解后再次整理,希望能加深理解。

先总结几个概念:

回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。

为什么要回归分析?

  1. 它表明自变量和因变量之间的显著关系;
  2. 它表明多个自变量对一个因变量的影响强度。
    回归分析允许我们去比较那些衡量不同尺度的变量之间的相互影响,如价格变动与促销活动数量之间联系。这些有利于数据分析人员以及数据科学家排除并估计出一组最佳的变量,用来构建预测模型。
    常见的回归模型很多,在此我对自己常用的进行整理。

2. logistic回归

引用一篇整理不错的博客,传送门,核心看点是:

  1. logit变换
  2. logistic模型和二项逻辑回归模型
  3. 损失函数
  4. logistic回归模型的评价

3. 多重共线性问题

在介绍Lasso回归和ridge回归之前,我们先解释一个名词,那就是多重共线性,在进行线性回归分析时,容易出现自变量(解释变量)之间彼此相关的现象,我们称这种现象为多重共线性。适度的多重共线性不成问题,但当出现严重共线性问题时,会导致分析结果不稳定,出现回归系数的符号与实际情况完全相反的情况。本应该显著的自变量不显著,本不显著的自变量却呈现出显著性,这种情况下就需要消除多重共线性的影响。

出现的原因: 多重共线性问题就是指一个解释变量的变化引起另一个解释变量地变化。原本自变量应该是各自独立的,根据回归分析结果,能得知哪些因素对因变量Y有显著影响,哪些没有影响。如果各个自变量x之间有很强的线性关系,就无法固定其他变量,也就找不到x和y之间真实的关系了。

除此以外,多重共线性的原因还可能包括:

  1. 数据不足。在某些情况下,收集更多数据可以解决共线性问题。
  2. 错误地使用虚拟变量。(比如,同时将男、女两个虚拟变量都放入模型,此时必定出现共线性,称为完全共线性)

如何判断共线性程度? 有多种方法可以检测多重共线性,较常使用的是回归分析中的VIF值,VIF值越大,多重共线性越严重。一般认为VIF大于10时(严格是5),代表模型存在严重的共线性问题。

多重共线性处理方法:

  1. 手动移除出共线性的变量
  2. 逐步回归法
  3. 增加样本容量
  4. 岭回归
    具体细节介绍请参考:传送门

4. ridge回归和Lasso回归

岭回归(ridge regression, Tikhonov regularization) 是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。

Lasso回归的全称是Least Absolute Selection and Shrinkage Operator, 即最小绝对值选择与收缩算子。Lasso方法是以缩小变量集(降阶)为思想的压缩估计方法。它通过构造一个惩罚函数,可以将变量的系数进行压缩并使某些回归系数变为0,进而达到变量选择的目的。两种回归都可以用来解决标准线性回归的过拟合问题。

二者核心的差别就是,lasso回归使用了一范数,而岭回归使用了二范数,二者的核心差异。

二者具体的细节,参考这篇两篇内容,细节拉满,浅显易懂:
传送门1
传送门2

5. Elastic Net

为什么会出现Elastic Net?

岭回归与 Lasso 回归两种正则化的方法,当多个特征存在相关时,Lasso 回归可能只会随机选择其中一个,岭回归则会选择所有的特征。这时很容易的想到如果将这两种正则化的方法结合起来,就能够集合两种方法的优势,这种正则化后的算法就被称为弹性网络回归。

具体使用,参考这篇博客,讲解的比较细致,传送门

6. 总结

遇到一个问题,只能解决一个问题,当我把它串在了一起,就学习了好几个问题,借鉴居多,看完记得回来交流啊!

7. 再补充学习代码部分

此处参考博客:https://blog.csdn.net/Santorinisu/article/details/104449791

导包和数据读取划分阶段

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error,r2_score
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")plt.rcParams['figure.dpi']=200
plt.rcParams['savefig.dpi']=200
font = {'family': 'Times New Roman','weight': 'light'}
plt.rc("font", **font)#Section 1: Load data and split it into Train/Test dataset
price=datasets.load_boston()
X=price.data
y=price.targetX_train,X_test,y_train,y_test=train_test_split(X, y, test_size=0.3)

Ridge Regression(岭回归)

from sklearn.linear_model import Ridgeridge=Ridge(alpha=1.0)
ridge.fit(X_train,y_train)
y_train_pred=ridge.predict(X_train)
y_test_pred=ridge.predict(X_test)plt.scatter(y_train_pred,y_train_pred-y_train,c='blue',marker='o',edgecolor='white',label='Training Data')
plt.scatter(y_test_pred,y_test_pred-y_test,c='limegreen',marker='s',edgecolors='white',label='Test Data')
plt.xlabel("Predicted Values")
plt.ylabel("The Residuals")
plt.legend(loc='upper left')
plt.hlines(y=0,xmin=-10,xmax=50,color='black',lw=2)
plt.xlim([-10,50])
plt.title("Ridge Regression Model")
plt.savefig('./fig2.png')
plt.show()print("\nMSE Train in Ridge: %.3f, Test: %.3f" % \(mean_squared_error(y_train,y_train_pred),mean_squared_error(y_test,y_test_pred)))print("R^2 Train in Ridge: %.3f, Test: %.3f" % \(r2_score(y_train,y_train_pred),r2_score(y_test,y_test_pred)))

在这里插入图片描述
预测结果

MSE Train in Ridge: 20.889, Test: 25.470
R^2 Train in Ridge: 0.739, Test: 0.728

LASSO Regression(lasso回归)

#Section 2.2: LASSO Model
#The parameter alpha would be the regulation stength.
from sklearn.linear_model import Lassolasso=Lasso(alpha=1.0)
lasso.fit(X_train,y_train)
y_train_pred=lasso.predict(X_train)
y_test_pred=lasso.predict(X_test)plt.scatter(y_train_pred,y_train_pred-y_train,c='blue',marker='o',edgecolor='white',label='Training Data')
plt.scatter(y_test_pred,y_test_pred-y_test,c='limegreen',marker='s',edgecolors='white',label='Test Data')
plt.xlabel("Predicted Values")
plt.ylabel("The Residuals")
plt.legend(loc='upper left')
plt.hlines(y=0,xmin=-10,xmax=50,color='black',lw=2)
plt.xlim([-10,50])
plt.title("LASSO Regression Model")
plt.savefig('./fig3.png')
plt.show()print("\nMSE Train in LASSO: %.3f, Test: %.3f" % (mean_squared_error(y_train,y_train_pred), mean_squared_error(y_test,y_test_pred)))
print("R^2 Train in LASSO: %.3f, Test: %.3f" % (r2_score(y_train,y_train_pred), r2_score(y_test,y_test_pred)))

在这里插入图片描述

MSE Train in LASSO: 25.618, Test: 32.727
R^2 Train in LASSO: 0.680, Test: 0.650

ElasticNet Regression(弹性网络回归)

#Section 2.3: Elastic Net Model
#The parameter alpha would be the regulation stength.
from sklearn.linear_model import ElasticNetelastic_net=ElasticNet(alpha=1.0,l1_ratio=0.5)
elastic_net.fit(X_train,y_train)
y_train_pred=elastic_net.predict(X_train)
y_test_pred=elastic_net.predict(X_test)plt.scatter(y_train_pred,y_train_pred-y_train,c='blue',marker='o',edgecolor='white',label='Training Data')
plt.scatter(y_test_pred,y_test_pred-y_test,c='limegreen',marker='s',edgecolors='white',label='Test Data')
plt.xlabel("Predicted Values")
plt.ylabel("The Residuals")
plt.legend(loc='upper left')
plt.hlines(y=0,xmin=-10,xmax=50,color='black',lw=2)
plt.xlim([-10,50])
plt.title("ElasticNet Regression Model")
plt.savefig('./fig4.png')
plt.show()print("\nMSE Train in ElasticNet: %.3f, Test: %.3f" % (mean_squared_error(y_train,y_train_pred), mean_squared_error(y_test,y_test_pred)))
print("R^2 Train in ElasticNet: %.3f, Test: %.3f" % (r2_score(y_train,y_train_pred), r2_score(y_test,y_test_pred)))

在这里插入图片描述

MSE Train in ElasticNet: 24.999, Test: 31.943
R^2 Train in ElasticNet: 0.688, Test: 0.659

参考博客:

  1. https://blog.csdn.net/sai_simon/article/details/122376407
  2. https://zhuanlan.zhihu.com/p/400443773
  3. https://www.cnblogs.com/Belter/p/8536939.html
  4. https://zhuanlan.zhihu.com/p/72722146
  5. http://t.csdn.cn/bl4fw
  6. https://blog.csdn.net/Santorinisu/article/details/104449791

http://chatgpt.dhexx.cn/article/GCrLhP4t.shtml

相关文章

机器学习--岭回归和Lasso回归

任何数据都存在噪声和多重共线性 如何解决多重共线性 ? 1.算法角度(正则化) 2.数据角度(最有效果) 岭回归与Lasso回归的出现是为了解决线性回归出现的过拟合(数据间高度线性相关)以及在通过正规…

LASSO和LARS

1、LASSO简介 LASSO是一种经典的松弛算法,其全称是The Least Absolute Shrinkage and Selectionator operator,于1996年由Tibshirani提出来。lasso的一个根本思想就是利用L1范式来诱导稀疏解,下面给出lasso的两种形式以及其等价性证明&#x…

R语言实现LASSO回归

Lasso回归又称为套索回归,是Robert Tibshirani于1996年提出的一种新的变量选择技术。Lasso是一种收缩估计方法,其基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归…

python-LASSO回归模型

https://zhuanlan.zhihu.com/p/76055830 LASSO回归模型的应用 ①可视化方法确定值 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib from sklearn import model_selection from sklearn.linear_model import Lasso, LassoCV font…

Lasso模型

Lasso是一种数据降维方法,该方法不仅适用于线性情况,也适用于非线性情况。Lasso是基于惩罚方法对样本数据进行变量选择,通过对原本的系数进行压缩,将原本很小的系数直接压缩至0,从而将这部分系数所对应的变量视为非显著…

Lasso算法理论介绍

先看一波过拟合: 图中,红色的线存在明显的过拟合,绿色的线才是合理的拟合曲线,为了避免过拟合,我们可以引入正则化。 下面可以利用正则化来解决曲线拟合过程中的过拟合发生,存在均方根误差也叫标准误差&…

Lasso回归系列二:Lasso回归/岭回归的原理

Lasso回归/岭回归的原理 在学习L1,L2正则化的作用和区别时,我们总是会看到这样的一副图片: 这幅图片形象化地解释了L1,L2对线性模型产生的不同的约束效果。 我最开始其实是不太理解为什么要这么画的。比如 1、L1范数(L1-norm)等…

回归问题-Lasso回归

Lasso(Least absolute shrinkage and selection operator)方法是以缩小变量集(降阶)为思想的压缩估计方法。它通过构造一个惩罚函数,可以将变量的系数进行压缩并使某些回归系数变为0,进而达到变量选择的目的。 正则化 正则化&am…

Lasso回归

维数灾难 高维数据 何谓高维数据?高维数据指数据的维度很高,甚至远大于样本量的个数。高维数据的明显的表现是:在空间中数据是非常稀疏的,与空间的维数相比样本量总是显得非常少。 在分析高维数据过程中碰到最大的问题就是维数…

1.1.3. Lasso(套索回归)

1.1.3. Lasso 一、简介 首先,Lasso同样是线性回归的一种变体。而文档中指出,它是一种能让参数 ω \omega ω稀疏的模型(作用)。它是压缩感知领域的基础(地位),在特定情况下,它可以“…

【机器学习】Lasso模型

一、引言 1.1 高维数据 何谓高维数据?高维数据指数据的维度很高,甚至远大于样本量的个数。高维数据的明显的表现是:在空间中数据是非常稀疏的,与空间的维数相比样本量总是显得非常少。 在分析高维数据过程中碰到最大的问题就是维…

多元线性回归-Lasso

目录 1.Lasso与多重共线性 2. Lasso的核心作用:特征选择 3. 选取最佳的正则化参数取值 1.Lasso与多重共线性 Lasso全称最小绝对收缩和选择算子(Least absolute shrinkage and selection operator),由于这个名称过于复杂所以简称为Lasso,和…

Lasso线性回归学习笔记(公式与代码实现)

目录 Lasso线性回归学习笔记(公式与代码实现)1 为什么要在线性回归中引入正则化项(简介)2 常见正则化项3 损失函数图像与正则化之后的图像3.1损失函数图像3.2 加了 L~1~ 正则项之后的损失函数图像 4 L~1~ 范数正则化的解中有更多零…

机器学习算法系列(五)- Lasso回归算法(Lasso Regression Algorithm)

阅读本文需要的背景知识点:线性回归算法、一丢丢编程知识 最近笔者做了一个基于人工智能实现音乐转谱和人声分离功能的在线应用——反谱(Serocs),感兴趣的读者欢迎试用与分享,感谢您的支持!serocs.cn 一、…

学习机器学习和深度学习的方法和步骤

学习机器学习和深度学习的方法和步骤 相信很多人都在找学习机器学习和深度学习的步骤和教程。作为过来人和大家一起交流一下。 我自己制作的一个思维导图希望对大家有帮助。

机器学习算法介绍

前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。 也许我们生活在人类历史上最关键的时期:从使用大型计算机&#xf…

机器学习之【提升方法】

机器学习【提升方法】 一、Adaboost的起源1.强可学习与弱可学习 二、怎样实现弱学习转为强学习1.怎样获得不同的弱分类器?BaggingBagging的弊端 2.怎样组合弱分类器? 三、Adaboost的提出四、Adaboost的基本概念五、Adaboost算法六、示例七、Boosting illustration 一、Adaboo…

(四)机器学习方法的分类

文章目录 一、监督学习二、非监督学习三、半监督学习四、增强学习五、机器学习的其他分类1. 批量学习(Batch Learning)2. 在线学习(Online Learning)3. 参数学习(Parametric Learning)4. 非参数学习 在上一…

【机器学习】之机器学习方法的分类

1,监督学习 给机器的训练数据拥有标记和答案 例如: 图像已经积累了标定信息银行已经积累了客户的信息和信用卡的信息 2,非监督学习 给机器的训练数据没有标记或答案 对没有标记的数据进行分类 – 聚类分析 对数据进行降维处理 特征提取…

机器学习常用方法

在本篇文章中,我将对机器学习做个概要的介绍。本文的目的是能让即便完全不了解机器学习的人也能了解机器学习,并且上手相关的实践。这篇文档也算是EasyPR开发的番外篇,从这里开始,必须对机器学习了解才能进一步介绍EasyPR的内核。…