本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
L2正则项是一种正则化技术,它用于惩罚模型中过大的系数,是防止过拟合的常用手段之一
本文通过讲解L2正则项应用于逻辑回归的实际例子,包括原理公式、代码实现等
通过本文,可以具体地了解L2正则项用于正则化模型的方法,以及使用L2正则化后的效果
本节介绍如何在逻辑回归中加入L2正则项来进行正则化
逻辑回归应用正则化
正则化常用的方法就是在损失函数中加入正则项,对于逻辑回归而言,如下
逻辑回归原始损失函数,如下:
加入L2正则项后的逻辑回归损失函数为:
正则化逻辑回归的梯度求解方法
梯度下降算法只要初始化解,然后将解不断往负梯度方法调整即可,
由于其中需要用到损失函数的梯度,因此正则化后的梯度公式也需要进行调整
逻辑回归原始梯度公式为:
加入L2正则项后的逻辑回归梯度公式为:
✍️备注
正则化后的梯度公式也就在原始公式上再加上正则部分的梯度即可
其中,正则部分的梯度的推导如下:
先对单个求偏导,有:
则对整体有:
本节展示如何实现梯度下降算法求解正则化后的逻辑回归模型
逻辑回归正则化-代码实现
代码只需在第二课《【实例】逻辑回归实例讲解》中的代码进行小修改,
将原来第21行 w = w - 0.01*(xt.T@(p-y)) 改为 w = w - 0.01*(xt.T@(p-y)+2*lamb*w)
修改后的代码如下:
"""
本代码用于展示-梯度下降求解逻辑回归(加入正则项)
本代码来自老饼讲解-机器学习:www.bbbdata.com
"""
from sklearn.datasets import load_breast_cancer
import numpy as np
#----数据加载------
data = load_breast_cancer() # 加载数据
X = data.data[:,4:8] # 样本的变量(这里只取4个变量)
y = data.target # 样本的标签
# 梯度下降训练逻辑回归
xt = np.insert(X, X.shape[1], 1, axis=1) # 给x增加一列1,用于充当阈值b
np.random.seed(888) # 设定随机种子,以确保每次程序结果一次
lamb = 1 # 设置正则项的lambda
w = np.random.rand(xt.shape[1]) # 初始化
for i in range(10000): # 直接迭代10000次
p = 1/(1+np.exp(-xt@w)) # 计算p
w = w - 0.01*(xt.T@(p-y)+2*lamb*w) # 往负梯度方向更新w
p = 1/(1+np.exp(-xt@w)) # 最终的预测结果
print("参数w:"+str(w)) # 打印结果
代码运行结果如下:
当lamb设为0时(相当没有正则项),得到的结果为:
参数w:[ 7.16 , 14.98, -16.84 ,-73.92,3.38]
当lamb设为1时,得到的结果为:
参数w:[-0.26, -2.35, -4.54, -2.70 , 1.33]
从上述结果可以看到,正则项系数设为0时(相当于没有正则化),求得的系数有些偏大
而正则项系数设为1后,就不再有过大的系数了, 通过对比,可以看到,正则化是有效的
好了,以上就是如何在逻辑回归中加入正则化了~
End