机器学习——正则化

定义:在损失函数上加上某些规则(限制、惩罚项),缩小解空间,从而减少求出过拟合解的可能性。

本质:牺牲模型在训练集上的正确率来提高推广泛化能力,W(模型参数)在数值上越小越好,这样可以更好的抵抗数值的扰动。

目的:防止训练的参数过拟合,增加模型的鲁棒性。

L1范数与L2范数

L1范数公式:(曼哈顿距离)
L 1 = ∣ ∣ w ∣ ∣ 1 = ∑ i = 1 n ∣ w i ∣ L_1=||w||_{1}=\sum_{i=1}^{n}|w_i| L1=∣∣w1=i=1nwi
L2范数公式:(欧氏距离)
L 2 = ∣ ∣ w ∣ ∣ 2 = ∑ i = 1 n ( w i ) 2 L2=||w||_2=\sqrt{\sum_{i=1}^{n}(w_i)^2} L2=∣∣w2=i=1n(wi)2
对应范数,空间中向量到原点的距离公式如下:
L p = ∣ ∣ w ∣ ∣ p = ∑ i = 1 n x i p p X = ( x 1 , x 2 , . . . , x n ) L_p=||w||_p=\sqrt[p]{\sum_{i=1}^{n}x_i^p}\\ X=(x_1,x_2,...,x_n) Lp=∣∣wp=pi=1nxip X=(x1,x2,...,xn)
上述范式可以加到任何算法的损失函数中,可以提到模型的泛化能力。

接下来介绍三种常用的正则化方法:套索回归(Lasso)、岭回归(Ridge)、弹性网络(Elastic-Net)

套索回归(Lasso)

先从简单线性回归的损失函数公式——最小二乘法来看:
J ( θ ) = 1 2 ∑ i = 1 n ( h θ ( x i ) − y i ) 2 令 J 0 = J ( θ ) , 并且对其进行 L 1 范式,正则化损失函数 , 则有下列式子 J(\theta)=\frac{1}{2}\sum_{i=1}^{n}(h_{\theta}(x^i)-y^i)^2\\ 令J_0=J(\theta),并且对其进行L1范式,正则化损失函数,则有下列式子\\ J(θ)=21i=1n(hθ(xi)yi)2J0=J(θ),并且对其进行L1范式,正则化损失函数,则有下列式子

J = J 0 + α ∗ ∑ i = 1 n ∣ w i ∣ 令 L 1 = α ∗ ∑ i = 1 n ∣ w i ∣ (权值的绝对值之和) J=J_0+\alpha*\sum_{i=1}^n|w_i|\\ 令L1=\alpha*\sum_{i=1}^n|w_i|(权值的绝对值之和)\\ J=J0+αi=1nwiL1=αi=1nwi(权值的绝对值之和)

所以说正则化的损失函数公式如下:
J = J 0 + L 1 J=J_0+L1 J=J0+L1
因为L1是带有绝对值符号的式子,所以J不完全可微。而求解损失函数利用的是梯度下降的方法,本质是求解损失函数J的最小值,所以可以将问题转换成**==>求解在L1范式约束下J0**什么时候取最小值。如下图:(正方形为约束条件,L1的α越小,其正方形的图形越大)

在这里插入图片描述

约束正方形中的顶点(特殊点)会导致一些特征值w为0,说明那些特征并不重要,不需要考虑,是可以删除的。同时,这也说明了套索回归(Lasso)具有稀疏性。

因为α可以控制约束范围,所以在求解的时候一般要把其设置成一个比较合理的值,并且要知道α越大,则越多参数为0。

权重更新规则

先介绍一个重要函数——符号函数sgn(x)
s g n ( w i ) = { 1 w i > 0 − 1 w i < 0 } sgn(w_i)=\begin{Bmatrix} 1 & w_i>0\\ -1&w_i<0 \end{Bmatrix} sgn(wi)={11wi>0wi<0}
由公式可以看出,wi=0,则函数不可导。而进行L1范式正则化的损失函数的参数更新还是依据梯度下降的,所以其更新的公式如下:
θ j n + 1 = θ j n − η ∗ α α θ j J \theta^{n+1}_j=\theta^n_j-\eta*\frac{\alpha}{\alpha \theta_j}J θjn+1=θjnηαθjαJ

θ j n + 1 = θ j n − η ∗ α α θ j ( J 0 + L 1 ) \theta^{n+1}_j=\theta^n_j-\eta*\frac{\alpha}{\alpha \theta_j}(J_0+L1) θjn+1=θjnηαθjα(J0+L1)

α α θ j J 0 = ∑ i = 1 n ( h θ ( x i ) − y i ) x j i \frac{\alpha}{\alpha\theta_j}J_0=\sum_{i=1}^{n}(h_{\theta}(x^i)-y^i)x_j^i αθjαJ0=i=1n(hθ(xi)yi)xji

α α θ j L 1 = α ∗ s g n ( w i ) \frac{\alpha}{\alpha\theta_j}L1=\alpha*sgn(w_i) αθjαL1=αsgn(wi)

对上述式子进行整合:
θ j n + 1 = θ j n − η ∗ ∑ i = 1 n ( h θ ( x i ) − y i ) x j i − η ∗ α ∗ s g n ( w i ) η > 0 , α > 0 如果 w i > 0 , 则 w i + 1 减小,反之增大 \theta^{n+1}_j=\theta^n_j-\eta*\sum_{i=1}^n(h_{\theta}(x^i)-y^i)x_j^i-\eta*\alpha*sgn(w_i)\\ \eta>0,\alpha>0\\ 如果w_i>0,则w_{i+1}减小,反之增大 θjn+1=θjnηi=1n(hθ(xi)yi)xjiηαsgn(wi)η>0,α>0如果wi>0,wi+1减小,反之增大
代码测试,如下:

from sklearn.linear_model import Lasso
# 创建数据
X = np.random.rand(100,20)
w = np.random.randn(20,1)
b = np.random.randint(1,20,size=1)
y = X.dot(w) + b + np.random.randn(100,1)

# 使用Lasso回归进行预测,具有稀疏性质
lasso = Lasso(alpha=0.1)
lasso.fit(X,y)
print('真是的w,b为:\n',w,b)
print('Lasso求解的w,b为:\n',lasso.coef_,lasso.intercept_)

岭回归(Ridge)

依旧从线性回归出发,其损失函数为:
J ( θ ) = 1 2 ∑ i = 1 n ( h θ ( x i ) − y i ) 2 令 J 0 = J ( θ ) , 并且对其进行 L 2 范式,正则化损失函数 , 则有下列式子 J(\theta)=\frac{1}{2}\sum_{i=1}^{n}(h_{\theta}(x^i)-y^i)^2\\ 令J_0=J(\theta),并且对其进行L2范式,正则化损失函数,则有下列式子\\ J(θ)=21i=1n(hθ(xi)yi)2J0=J(θ),并且对其进行L2范式,正则化损失函数,则有下列式子

J = J 0 + α ∗ ∑ i = 1 n ( w i ) 2 令 L 2 = α ∗ ∑ i = 1 n ( w i ) 2 (权值的绝对值之和) J=J_0+\alpha*\sum_{i=1}^n(w_i)^2\\ 令L2=\alpha*\sum_{i=1}^n(w_i)^2(权值的绝对值之和)\\ J=J0+αi=1n(wi)2L2=αi=1n(wi)2(权值的绝对值之和)

因此可以得到通过岭回归后的得到新的损失函数,如下:
J = J 0 + L 2 J=J_0+L2 J=J0+L2
L2的公式进行绘制图像,可以发现其是圆形,如下图:

在这里插入图片描述

从图中可以看出,其比较难与特殊点相交,不具有稀疏性,较Lasso而言,不太可能出现比较多参数w都为0的情况。

权重更新规则

由梯度下降进行权重更新,可得:
θ j n + 1 = θ j n − η ∗ α α θ j J \theta^{n+1}_j=\theta^n_j-\eta*\frac{\alpha}{\alpha \theta_j}J θjn+1=θjnηαθjαJ

θ j n + 1 = θ j n − η ∗ α α θ j ( J 0 + L 2 ) \theta^{n+1}_j=\theta^n_j-\eta*\frac{\alpha}{\alpha \theta_j}(J_0+L2) θjn+1=θjnηαθjα(J0+L2)

α α θ j J 0 = ∑ i = 1 n ( h θ ( x i ) − y i ) x j i \frac{\alpha}{\alpha\theta_j}J_0=\sum_{i=1}^{n}(h_{\theta}(x^i)-y^i)x_j^i αθjαJ0=i=1n(hθ(xi)yi)xji

α α θ j L 2 = 2 ∗ α ∗ w i \frac{\alpha}{\alpha\theta_j}L2=2*\alpha*w_i αθjαL2=2αwi

对上述式子进行整合可得:
θ j n + 1 = θ j n ( 1 − η ∗ 2 ∗ α ) − η ∗ ∑ i = 1 n ( h θ ( x i ) − y i ) x j i \theta^{n+1}_j=\theta^n_j(1-\eta*2*\alpha)-\eta*\sum_{i=1}^n(h_{\theta}(x^i)-y^i)x^i_j θjn+1=θjn(1η2α)ηi=1n(hθ(xi)yi)xji
观察上式可发现,其θ会加速减小,可以获得更小的参数值,可以有效地防止过拟合。

代码测试,如下:

# 导入随机梯度下降的包
from sklearn.linear_model import SGDRegressor,LinearRegression
# 导入岭回归
from sklearn.linear_model import Ridge
# 创建数据
X = np.random.rand(100,5)
w = np.random.randint(1,10,size=(5,1))
b = np.random.randint(1,10,size=1)
# 加点噪声,生成数据
y = X.dot(w) + b + np.random.randn(100,1)

# 测试
print('真实的答案是:',w,b)
ridge = Ridge(alpha=1, solver='sag')
ridge.fit(X,y)
print('岭回归求解的答案是:', ridge.coef_,ridge.intercept_)

弹性网络(Elastic-Net)

公式如下:
min ⁡ w 1 x n s a m p l e s ∣ ∣ X w − y ∣ ∣ 2 2 + α ∗ ρ ∣ ∣ w ∣ ∣ 1 + α ( 1 − ρ ) 2 ∣ ∣ w ∣ ∣ 2 2 \min_{w}\frac{1}{xn_{samples}}||Xw-y||_2^2+\alpha*\rho||w||_1+\frac{\alpha(1-\rho)}{2}||w||_2^2 wminxnsamples1∣∣Xwy22+αρ∣∣w1+2α(1ρ)∣∣w22

  • 允许使用L1、L2范数作为先验正则项训练的线性回归模型
  • 允许学习到一个只有少量参数是非零系数的模型(lasso),但仍保持Ridge的正则性质
  • 在多特征相互关联的时候比较有效

代码测试,如下:

from sklearn.linear_model import SGDRegressor,LinearRegression
from sklearn.linear_model import ElasticNet
# 创建数据
X = 2 * np.random.rand(100,20)
w = np.random.randn(20,1)
b = np.random.randint(1,20,size=1)
y = X.dot(w) + b + np.random.randn(100,1)

# 使用弹性网络(l1_ratio越接近1,像lasso的概率越大,越接近0,越像Ridge)
elasticnet = ElasticNet(alpha= 0.5,l1_ratio=0.4)
elasticnet.fit(X,y)
print('初始的w,b为:\n',w,b)
print('elasticnet求解的w,b为\n',elasticnet.coef_,elasticnet.intercept_)

# 使用随机梯度下降,这里的l1_ratio是控制是使用哪个范式进行计算的
sgd = SGDRegressor(penalty='l2', alpha=0, l1_ratio=0)
sgd.fit(X,y.reshape(-1))
print('sgd求解的答案为:\n',sgd.coef_,sgd.intercept_)
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习中的二分类逻辑回归是一种用于解决二分类问题的算法。它的基本思路是通过构建一个逻辑回归模型,将输入的特征映射到一个概率值,然后根据这个概率值进行分类。 逻辑回归使用sigmoid函数来处理hθ(x),这是因为sigmoid函数的取值范围在0到1之间,可以将线性回归的输出转化为一个概率值。通过sigmoid函数处理后,我们可以将概率值大于等于0.5的样本划分为正类,概率值小于0.5的样本划分为负类。这使得逻辑回归可以用于二分类问题。 代价函数的推导和偏导数的推导是为了求解逻辑回归模型中的参数θ。通过最小化代价函数,我们可以得到最优的参数θ,使得模型的预测结果与真实标签最接近。 在正则化逻辑回归中,我们引入正则化项的目的是为了避免过拟合。正则化项可以惩罚模型中的参数,使得参数的值趋向于较小的数值,从而降低模型的复杂度。在正则化逻辑回归中,一般不对θ1进行正则化,这是因为θ1对应的是截距项,它影响模型在原点的位置,不参与特征的权重调整。 综上所述,机器学习中的二分类逻辑回归是一种通过构建逻辑回归模型,利用sigmoid函数将线性回归的输出转化为概率值,并通过最小化代价函数求解参数θ的算法。正则化逻辑回归则是在逻辑回归的基础上引入正则化项,避免过拟合问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [吴恩达机器学习之逻辑回归(二分类)](https://blog.csdn.net/q642634743/article/details/118831665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [机器学习笔记——逻辑回归之二分类](https://blog.csdn.net/dzc_go/article/details/108855689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值