损失函数正则化详解

目录

前言:


前言:

有些朋友对正则化的原理及使用经常会混淆, 今天来跟大家详细聊一聊正则化。

正则化是机器学习中一种常用的技术,它通过在模型的中引入额外的惩罚项,以降低模型的复杂度并提高其泛化能力。正则化可以帮助我们解决过拟合的问题,使得模型更好地适应未见过的数据。

在线性回归等线性模型中,正则化将在损失函数中加入一个正则化项,该项会惩罚模型系数的大小。常见的正则化方法有L1正则化(Lasso回归)、L2正则化(Ridge回归)和弹性网络(Elastic Net)。

正则化的主要优点包括:

  • 控制模型的复杂度,减少过拟合的风险。
  • 提高模型的泛化能力,对未见过的数据有更好的预测能力。
  • 可以利用特征选择,剔除不相关或冗余的特征,提高模型的解释性和计算效率。

一、L1正则化(Lasso回归)

1、原理:

L1正则化(Lasso回归):L1正则化通过将参数的绝对值之和作为惩罚项,促使模型中的许多系数变为零,从而实现特征选择和稀疏性。L1正则化可以将不相关或冗余的特征对应的系数压缩为零,从而实现自动特征选择的效果。

Lasso回归通过最小化目标函数来求解模型的系数,其中目标函数由两部分组成:数据拟合项和正则化项。数据拟合项衡量模型对训练数据的拟合程度,正则化项则惩罚模型的复杂度。

  • 更具体地说,Lasso的目标函数可以表示为:

min ||y - Xw||² + alpha * ||w||₁

其中,y 是观测值的目标变量,X 是相应的特征矩阵,w 是模型的系数向量,alpha 是正则化强度。

Lasso回归的特点是具有特征选择能力,能够自动将部分系数压缩成零,从而选择对目标变量具有最重要影响的特征。这样可以简化模型,提高模型的泛化能力,并且能够更好地处理高维数据和共线性(多个特征高度相关)的问题。

 需要注意的是,Lasso回归对输入特征的缩放非常敏感,因此在使用Lasso回归之前,最好对特征进行标准化或归一化处理。

2、代码示例

在Scikit-learn中,Lasso是一个用于执行Lasso回归的类。可以使用以下步骤使用Lasso回归:

# 1.导入Lasso类
from sklearn.linear_model import Lasso

# 2.创建Lasso对象并设置参数(如正则化强度alpha)
alpha = 1.0  # 正则化强度
lasso = Lasso(alpha=alpha)

# 3.使用训练数据拟合模型:
lasso.fit(X, y)

# 4.使用模型进行预测:
y_pred = lasso.predict(X_test)

 3、应用

Lasso回归可以应用于许多机器学习任务,例如:

  • 特征选择:由于Lasso的稀疏性,可以用于从高维特征中筛选出重要的特征。
  • 噪声过滤:通过将噪声特征的系数压缩为零,可以减少噪声对模型的影响。
  • 预测建模:可以用于预测建模问题,如房价预测、销量预测等。
  • 异常检测:Lasso回归可以用于检测异常样本,因为异常样本对模型的影响通常表现为非常大的系数。

二、L2正则化(Ridge回归)

1、原理:

L2正则化(Ridge回归):L2正则化通过将参数的平方和作为惩罚项,使得模型中的系数更接近于零。L2正则化能够减小模型中各特征的权重,降低多重共线性的影响。

  • Ridge回归的目标函数是最小化残差平方和与正则化项之和,可以表示为:

min ||y - Xw||² + alpha * ||w||²

其中,y 是观测值的目标变量,X 是相应的特征矩阵,w 是模型的系数向量,alpha 是正则化强度。

与Lasso回归不同,Ridge回归使用L2正则化,这会使模型的系数趋向于较小的数值,而不是将某些系数压缩成零。L2正则化对模型的惩罚是系数的平方和的乘积,这表明L2正则化可能会将所有特征保留在模型中,但缩小系数的幅度,从而减少特征对预测的影响。

Ridge回归的一个重要应用是在存在共线性(多个特征高度相关)的数据集上进行回归分析。通过增加L2正则化项,Ridge回归可以减少共线性的影响,提高模型的稳定性和鲁棒性。

2、代码示例

在Scikit-learn中,Ridge是一个用于执行Ridge回归的类。可以按照以下步骤使用Ridge回归:

# 1.导入Ridge类:
from sklearn.linear_model import Ridge

# 2.创建Ridge对象并设置参数(如正则化强度alpha):
alpha = 1.0  # 正则化强度
ridge = Ridge(alpha=alpha)

# 3.使用训练数据拟合模型:
ridge.fit(X, y)

# 4.使用模型进行预测:
y_pred = ridge.predict(X_test)

 Ridge回归在缺乏明确特征选择的场景下非常有用,它可以通过限制参数的幅度来控制模型的复杂度。此外,与Lasso回归相比,Ridge回归的计算速度更快,但无法实现特征选择功能

三、弹性网络(Elastic Net回归)

1、原理:

弹性网络:弹性网络是L1正则化和L2正则化的线性组合。它综合了L1正则化的稀疏性和L2正则化的平滑性,可以在存在多重共线性的情况下更好地进行特征选择和参数缩减。

2、 结构:

弹性网络的目标函数由两部分组成:损失函数和正则化项。

1)损失函数:弹性网络使用的常见损失函数为均方误差(Mean Squared Error,MSE)。其目标是最小化观测值与预测值之间的差异。

2)正则化项:弹性网络结合了L1和L2正则化项。L1正则化通过绝对值之和惩罚模型系数,促使模型中的许多系数变为零,从而实现特征选择和稀疏性;L2正则化通过系数的平方和惩罚模型系数,降低系数的幅度,减小共线性的影响。

  • 弹性网络的目标函数可以表示为:

min MSE + alpha * (rho * L1_norm + 0.5 * (1 - rho) * L2_norm)

其中,MSE是损失函数,alpha是正则化参数,rho是L1正则化项和L2正则化项之间的混合比例,L1_norm是模型系数的绝对值之和(L1范数),L2_norm是模型系数的平方和(L2范数)。

弹性网络可以在特征选择和模型稳定性之间提供一个更好的平衡,尤其适用于训练集中存在多个高度相关的特征的情况。在实际应用中,为了选择最佳的正则化参数和混合比例,可以使用交叉验证等技术进行调优。

3、代码演示

在Scikit-learn中,ElasticNet是一个用于执行弹性网络回归的类。可以按照以下步骤使用弹性网络回归:

# 1.导入ElasticNet类::
from sklearn.linear_model import ElasticNet

# 2.创建ElasticNet对象并设置参数(如正则化强度alpha和混合比例l1_ratio)::
alpha = 0.5  # 正则化强度
l1_ratio = 0.5  # L1正则化项和L2正则化项的混合比例
elastic_net = ElasticNet(alpha=alpha, l1_ratio=l1_ratio)
# 3.使用训练数据拟合模型:
elastic_net.fit(X, y)

# 4.使用模型进行预测:
y_pred = elastic_net.predict(X_test)

四、总结

需要注意的是,正则化参数的选择往往需要经验和调优,过小的正则化参数可能无法有效控制过拟合,而过大的正则化参数可能导致欠拟合。一般来说,正则化参数的选择可以通过交叉验证等方法来确定。

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值