算法一篇入门

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

作者 : 老饼 发表日期 : 2022-06-27 22:37:13 更新日期 : 2023-11-10 07:32:59
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com


正则化可以抑制系数过大,是防止过拟合的常用手段之一

本文通过讲解正则化应用于逻辑回归的实际例子,进一步具体掌握正则化的使用



    01.逻辑回归正则化    



本节介绍逻辑回归正则化后的损失函数

以及逻辑回归正则化后用梯度下降算法求解时的梯度公式



    逻辑回归应用正则化    


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

 逻辑回归原始损失函数
   
  
 逻辑回归正则化后的损失函数
 



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


梯度下降算法只要初始化解,然后将解不断往负梯度方法调整即可,
由于其中需要用到损失函数的梯度,因此正则化后的梯度公式也需要进行调整

 
  逻辑回归原始梯度公式
 
    
  
   逻辑回归加入正则项后的梯度公式
 
  
✍️备注
正则化后的梯度公式也就在原始公式上再加上正则部分的梯度即可
正则部分的梯度
的推导如下:
先对单个
求偏导,有:
 

则对整体有:
 




    02.代码实现-梯度下降求解正则化后的逻辑回归   



本节用代码实现梯度下降算法求解正则化后的逻辑回归

并对正则化与没有正则化两种情况得到的结果进行比较



    代码实现    


代码只需在第二课《【实例】逻辑回归实例讲解》中的代码进行小修改,
将原来第21行
 w = w - 0.01*(xt.T@(p-y))  改为 w = w - 0.01*(xt.T@(p-y)+2*lamb*w) 
修改后的代码如下:
# -*- coding: utf-8 -*-
"""
梯度下降求解逻辑回归(加入正则项)
"""
from sklearn.datasets import load_breast_cancer
import numpy as np
#----数据加载------
data = load_breast_cancer()
X    = data.data[:,4:8]
y    = data.target

#-----给x增加一列1---------
xt = np.insert(X, X.shape[1], 1, axis=1)

#-----梯度下降求解w---------------
np.random.seed(888)                         # 设定随机种子,以确保每次程序结果一次
lamb = 1                                    # 设置正则项的lambda
w = np.random.rand(xt.shape[1])             # 初始化
for i in range(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  








联系老饼