机器学习入门教程

【实例】正则化用于逻辑回归的实例讲解

作者 : 老饼 发表日期 : 2022-11-02 19:45:36 更新日期 : 2025-03-30 14:02:37
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



L2正则项是一种正则化技术,它用于惩罚模型中过大的系数,是防止过拟合的常用手段之一

本文通过讲解L2正则项应用于逻辑回归的实际例子,包括原理公式、代码实现等

通过本文,可以具体地了解L2正则项用于正则化模型的方法,以及使用L2正则化后的效果





    01.逻辑回归正则化    




本节介绍如何在逻辑回归中加入L2正则项来进行正则化




    逻辑回归应用正则化    


正则化常用的方法就是在损失函数中加入正则项,对于逻辑回归而言,如下

  逻辑回归原始损失函数,如下:
   
  
 加入L2正则项后的逻辑回归损失函数为:
 





     正则化逻辑回归的梯度求解方法    


梯度下降算法只要初始化解,然后将解不断往负梯度方法调整即可,
由于其中需要用到损失函数的梯度,因此正则化后的梯度公式也需要进行调整
   逻辑回归原始梯度公式为:
 
    
    
    加入L2正则项后的逻辑回归梯度公式为:
 
  
✍️备注
正则化后的梯度公式也就在原始公式上再加上正则部分的梯度即可
其中,正则部分的梯度
的推导如下:
先对单个
求偏导,有:
 

则对整体有:
 








    02. 逻辑回归正则化-代码实现   




本节展示如何实现梯度下降算法求解正则化后的逻辑回归模型





       逻辑回归正则化-代码实现      


代码只需在第二课《【实例】逻辑回归实例讲解》中的代码进行小修改,
将原来第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  





联系老饼