零基础机器学习(6)之岭回归与套索回归(正则化)

2024-03-30 01:52

本文主要是介绍零基础机器学习(6)之岭回归与套索回归(正则化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 岭回归与套索回归的原理与参数调节
      • 1.岭回归原理
      • 2.岭回归参数调节
      • 3.套索回归原理
      • 4.套索回归参数的调节
      • 5.正则化介绍
        • ①选择
        • ②什么是正则化?
        • ③L1正则化是怎么实现的?
          • 什么是惩罚参数向量?
          • 什么是学习率?
        • ④L2正则化是怎么实现的?

岭回归与套索回归的原理与参数调节

岭回归是避免线性回归过拟合现象的一种线性模型。

过拟合是指模型的“学习能力”太强了,以致于把训练样本自身的一些特点当成了所有样本的一般性质进行学习,导致泛化能力下降。

岭回归通过保持模型所有的特征变量而减小特征变量的系数值,来减小特征变量对预测结果的影响。这种保留全部特征属性,只是降低特征变量的系数值来避免过拟合的方法称为L2正则化。在Sklearn中,可通过如下语句导入岭回归模型。

from sklearn.linear_model import Ridge

1.岭回归原理

使用糖尿病数据集,用岭回归训练一个模型,并对其进行评估。

#导入岭回归模型、糖尿病数据集及划分样本的方法
from sklearn.linear_model import Ridge
from sklearn.datasets import load_diabetes 
from sklearn.model_selection import train_test_split 
#将数据集划分为训练集和测试集
x,y=load_diabetes().data,load_diabetes().target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
#训练模型
model=Ridge()
model.fit(x_train,y_train)
#评估模型,计算模型的预测准确率
r21=model.score(x_train,y_train)	#计算模型在训练集上的预测准确率
r22=model.score(x_test,y_test)	#计算模型在测试集上的预测准确率
#输出模型的预测准确率
print("模型在训练集上的预测准确率为:",r21)
print("模型在测试集上的预测准确率为:",r22)

本例中使用岭回归训练的模型,预测的准确率要比线性回归稍微低一些,但是在测试数据集上的准确率与训练数据集上的准确率几乎一致,说明岭回归的泛化能力更强

在岭回归中,可以通过改变alpha参数的值来控制减小特征变量系数的程度,alpha参数的默认值为1。

alpha参数的取值没有一定的规定。alpha的最佳设置取决于特定的数据集。增加alpha值会降低特征变量的系数,使之趋近于零,从而降低在训练集上的性能,但更有助于提高泛化能力。

2.岭回归参数调节

将程序中的“model=Ridge()”修改为“model=Ridge(alpha=10)”。

模型在训练集上的预测准确率为: 0.15119902171779687
模型在测试集上的预测准确率为: 0.16202035231681022

可见,提高alpha值之后,模型的性能大大降低了,但是测试集的预测准确率却超过了训练集。

将程序中的“model=Ridge()”修改为“model=Ridge(alpha=0.1)”。

模型在训练集上的预测准确率为: 0.521563232713
模型在测试集上的预测准确率为: 0.47340124798816186

可见,把alpha值设置为0.1之后,模型在训练集上的预测准确率就略低于线性回归,但在测试集上的预测准确率却有所提升。如果alpha值非常小,那么系统的限制几乎可以忽略不计,得到的结果也会非常接近线性回归。

3.套索回归原理

除岭回归之外,还有一个可以对线性回归进行正则化的模型,即套索回归。

套索回归通过减少部分特征来减小特征变量对预测结果的影响,从而避免过拟合,这种方法称为L1正则化。L1正则化会导致在使用套索回归时,有部分特征的系数为0,从而忽略掉一些特征,可以看成是模型对特征进行自动选择的一种方式。在Sklearn中,可通过如下语句导入套索回归模型。

from sklearn.linear_model import Lasso
#导入套索回归模型、糖尿病数据集、划分样本的方法及NumPy库
from sklearn.linear_model import Lasso
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
import numpy as np
#将数据集划分为训练集和测试集
x,y=load_diabetes().data,load_diabetes().target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
#训练模型
model=Lasso()
model.fit(x_train,y_train)
a=np.sum(model.coef_!=0)		#模型特征属性不等于0的个数
#评估模型,计算模型的预测准确率
r21=model.score(x_train,y_train)	#计算模型在训练集上的预测准确率
r22=model.score(x_test,y_test)	#计算模型在测试集上的预测准确率
#输出模型的预测准确率
print("模型在训练集上的预测准确率为:",r21) 
print("模型在测试集上的预测准确率为:",r22)
print("套索回归使用的特征数为:",a)
模型在训练集上的预测准确率为: 0.3624222204154226
模型在测试集上的预测准确率为: 0.36561940472905163
套索回归使用的特征数为: 3

程序运行结果如图所示可以看到,套索回归在训练集与测试集上的表现都比较糟糕,这意味着模型发生了欠拟合问题。在这10个特征中,套索回归模型只用了3个。与岭回归相似,套索回归也可通过调节其alpha参数,来控制特征变量系数被约束到0的强度。

4.套索回归参数的调节

在套索回归中,alpha参数的默认值也是1。为了降低欠拟合的程度,增加特征变量的数量,需要将alpha的值减小,并且增大最大迭代次数。

将程序中的“model=Lasso()”修改为“model=Lasso(alpha=0.1,max_iter=100000)

模型在训练集上的预测准确率为: 0.5194790915052718
模型在测试集上的预测准确率为: 0.4799480078849704
套索回归使用的特征数为: 7

可见,降低alpha参数的值会使得模型使用的特征数量变多,从而在训练集与测试集上有更好的表现。

5.正则化介绍

①选择

在实际应用中,该如何选择岭回归和套索回归呢?

在实践中,岭回归往往是这两个模型的优选。但是,如果数据集中特征数量过多,而且只有一小部分是真正重要的,那么套索回归会是更好的选择。

②什么是正则化?

假设我们有一个线性回归模型,模型的损失函数为均方误差(MSE)加上正则化项,其中正则化项可以是L1正则化(Lasso)或L2正则化(Ridge)。

  1. L1正则化(Lasso)的例子

    • 假设我们要预测房屋价格,特征包括房屋面积、卧室数量和地理位置等。我们使用Lasso回归模型来拟合数据。
    • Lasso回归的损失函数为: L ( β ) = MSE + α ∑ j = 1 p ∣ β j ∣ L(\beta) = \text{MSE} + \alpha \sum_{j=1}^{p} |\beta_j| L(β)=MSE+αj=1pβj,其中 β \beta β是模型参数, α \alpha α是正则化参数, p p p是特征数量。
    • L1正则化的作用是倾向于使部分特征的系数为零,从而实现特征选择。在这个例子中,L1正则化可以帮助我们确定哪些特征对房屋价格的预测最为重要。
  2. L2正则化(Ridge)的例子

    • 假设我们要预测股票价格,特征包括市场指数、公司收入和行业类型等。我们使用Ridge回归模型来拟合数据。
    • Ridge回归的损失函数为: L ( β ) = MSE + α ∑ j = 1 p β j 2 L(\beta) = \text{MSE} + \alpha \sum_{j=1}^{p} \beta_j^2 L(β)=MSE+αj=1pβj2,其中 β \beta β是模型参数, α \alpha α是正则化参数, p p p是特征数量。
    • L2正则化的作用是限制模型参数的大小,避免参数过大导致过拟合。在这个例子中,Ridge正则化可以帮助我们平衡各个特征对股票价格的影响,提高模型的泛化能力。

通过在损失函数中添加L1或L2正则化项,并调节正则化参数的大小,我们可以控制模型的复杂度,防止过拟合,并提高模型的泛化能力。在实际应用中,选择合适的正则化方法和参数是优化模型性能的关键。

③L1正则化是怎么实现的?

L1正则化(Lasso)的功能是通过在损失函数中添加参数向量的L1范数来实现。具体来说,L1正则化的作用是通过惩罚参数向量的绝对值之和,促使部分参数变为零,从而实现特征选择和降维的效果。

在线性回归模型中,L1正则化的损失函数可以表示为:
L ( β ) = MSE + α ∑ j = 1 p ∣ β j ∣ L(\beta) = \text{MSE} + \alpha \sum_{j=1}^{p} |\beta_j| L(β)=MSE+αj=1pβj
其中, L ( β ) L(\beta) L(β)是损失函数, MSE \text{MSE} MSE是均方误差, α \alpha α是正则化参数, β \beta β是模型参数向量, p p p是特征数量。

L1正则化的实现方式通常是通过梯度下降等优化算法,在每次更新模型参数时,额外考虑正则化项的影响。在梯度下降的过程中,对于每个参数 β j \beta_j βj,更新规则为:
β j = β j − η ( ∂ MSE ∂ β j + α sign ( β j ) ) \beta_j = \beta_j - \eta \left( \frac{\partial \text{MSE}}{\partial \beta_j} + \alpha \text{sign}(\beta_j) \right) βj=βjη(βjMSE+αsign(βj))
其中, η \eta η是学习率, ∂ MSE ∂ β j \frac{\partial \text{MSE}}{\partial \beta_j} βjMSE是损失函数关于参数 β j \beta_j βj的梯度, sign ( β j ) \text{sign}(\beta_j) sign(βj)是参数 β j \beta_j βj的符号函数。

理解:

首先我们先不看L1参数,对于L( β \beta β)这个函数我们当我们把取 β i \beta_i βi作为自变量时,你们这个函数的本体类似于(x1* β i \beta_i βi+b) 2 ^2 2+(x2* β i \beta_i βi+c ) 2 )^2 )2…这个函数整体是一个二次函数且系数为正,函数图像开头向上,且恒大于0

当他的偏导数等于0时,你们函数取最小值。

所以$\beta_j = \beta_j - \eta \frac{\partial \text{MSE}}{\partial \beta_j} $这个过程就是反复更新自变量使其函数值趋近最小值的过程,也就是损失函数趋近最小值的过程。

当我们考虑L1范式的时候,我们不难发现,对于更新规则 β j = β j − η ( ∂ MSE ∂ β j + α sign ( β j ) ) \beta_j = \beta_j - \eta \left( \frac{\partial \text{MSE}}{\partial \beta_j} + \alpha \text{sign}(\beta_j) \right) βj=βjη(βjMSE+αsign(βj)),当 β j \beta_j βj小于0的时候, β j \beta_j βj会在原本的基础上加上一个 α \alpha α,是的 β j \beta_j βj趋近0,大于零同理

符号函数是一个常用的数学函数,通常用符号 sgn ( x ) \text{sgn}(x) sgn(x)表示。符号函数的定义如下:

sgn ( x ) = { − 1 , if  x < 0 0 , if  x = 0 1 , if  x > 0 \text{sgn}(x) = \begin{cases} -1, & \text{if } x < 0 \\ 0, & \text{if } x = 0 \\ 1, & \text{if } x > 0 \end{cases} sgn(x)= 1,0,1,if x<0if x=0if x>0

也可以用以下方式表示:
sgn ( x ) = x ∣ x ∣ \text{sgn}(x) = \frac{x}{|x|} sgn(x)=xx

如果的值 β j \beta_j βj的值大,就是特征属性的权重要大,那么其实 α \alpha α的影响相对很小(前面还有一个学习率减少影响),故只有权重小的特征会被趋近0.

总的来说,L1正则化通过在损失函数中添加参数向量的L1范数惩罚项,并在优化过程中考虑这一项的影响,实现了对模型参数的稀疏性约束,有助于特征选择和降维。

什么是惩罚参数向量?

在机器学习中,惩罚参数向量是指在正则化项中对模型参数进行惩罚的参数向量。正则化是一种常用的技术,用于控制模型的复杂度,避免过拟合。在正则化过程中,通过在损失函数中添加一个正则化项,对模型参数进行惩罚,从而促使模型更加简单,提高泛化能力。

在L1正则化(Lasso)中,惩罚参数向量是指参数向量的L1范数:
α ∑ j = 1 p ∣ β j ∣ \alpha \sum_{j=1}^{p} |\beta_j| αj=1pβj
其中, α \alpha α是正则化参数, β \beta β是模型参数向量, p p p是参数的数量。L1正则化通过对参数向量的绝对值之和进行惩罚,促使部分参数变为零,实现特征选择和降维的效果。

惩罚参数向量的引入对于模型训练过程中的优化算法起到了重要作用,例如在梯度下降中,更新规则中考虑了对参数的惩罚项,使得模型在更新参数时更倾向于稀疏性,有助于提高模型的泛化能力。通过调节正则化参数 α \alpha α的大小,可以控制惩罚的强度,进而影响模型的复杂度和泛化性能。

总的来说,惩罚参数向量是正则化过程中用于对模型参数进行惩罚的参数向量,通过控制参数的稀疏性,实现特征选择、降维和泛化能力的提升。

什么是学习率?

学习率(Learning Rate)是深度学习中一个重要的超参数,用于控制模型在每次迭代中更新参数的幅度。在使用梯度下降等优化算法时,学习率决定了参数更新的步长大小。

具体来说,学习率定义了在参数空间中沿着梯度方向更新参数的速度。如果学习率设置过大,可能导致参数更新过大,错过最优值;而如果学习率设置过小,可能导致收敛速度过慢,需要更多的迭代次数才能收敛到最优值。

在梯度下降算法中,参数的更新规则通常如下:
θ = θ − η ∇ J ( θ ) \theta = \theta - \eta \nabla J(\theta) θ=θηJ(θ)
其中, θ \theta θ表示模型参数, η \eta η表示学习率, ∇ J ( θ ) \nabla J(\theta) J(θ)表示损失函数 J J J关于参数 θ \theta θ的梯度。

选择合适的学习率是优化算法成功的关键之一。通常情况下,需要根据具体问题和模型的特点来调整学习率的大小。常见的学习率调整策略包括固定学习率、动态调整学习率(如学习率衰减)、自适应学习率(如Adam优化算法中的自适应学习率调整)等。

在实际应用中,通过反复实验和调整学习率,可以找到一个合适的学习率,使得模型在训练过程中能够快速、稳定地收敛到最优解。

④L2正则化是怎么实现的?

L2正则化是一种常用的正则化方法,它通过在损失函数中添加一个L2范数惩罚项来限制模型参数的大小。L2正则化的目的是防止过拟合,提高模型的泛化能力。

在线性回归等模型中,L2正则化的损失函数可以表示为:

$L(\beta) = \frac{1}{2n} \sum_{i=1}^{n} (y_i - \hat{y}i)^2 + \frac{\alpha}{2} \sum{j=1}^{p} \beta_j^2 $

其中,第一项是MSE,第二项是L2正则化项, α \alpha α是正则化参数,控制正则化项对损失函数的影响程度。

在梯度下降算法中,加入L2正则化的梯度更新规则为:

$\beta_j = \beta_j - \eta \left( \frac{\partial L}{\partial \beta_j} + \alpha \beta_j \right) $

其中, η \eta η是学习率, ∂ L ∂ β j \frac{\partial L}{\partial \beta_j} βjL是损失函数对参数 β j \beta_j βj的梯度。在更新参数时,除了考虑损失函数的梯度,还考虑了L2正则化项对参数的影响,使得参数在更新过程中受到惩罚,避免过大的参数值。

我们可以看出梯度更新规则中的函数,当参数 β j \beta_j βj越大,那么每次更新 β j \beta_j βj的幅度越大。当 β j \beta_j βj>0是,那么 α \alpha α β j \beta_j βj>0,使得 β j \beta_j βj的绝对值变小,但是不会一只变小,知道趋近 ( ∂ L ∂ β j + α β j ) \left( \frac{\partial L}{\partial \beta_j} + \alpha \beta_j \right) (βjL+αβj)=0.

β j \beta_j βj<0同理,都使得 β j \beta_j βj的绝对值变小,从而降低参数大小,并且原本的参数越大,降低的幅度也大。

总结一下,L2正则化通过在损失函数中添加参数的平方和作为惩罚项,控制模型参数的大小,防止过拟合。在梯度下降算法中,通过调整参数更新规则,同时考虑损失函数的梯度和L2正则化项的影响,实现对模型参数的正则化。

这篇关于零基础机器学习(6)之岭回归与套索回归(正则化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860210

相关文章

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念