老饼讲解-机器学习 机器学习 神经网络 深度学习
机器学习入门
1.学前解惑
2.第一课:初探模型
3.第二课:逻辑回归与梯度下降
4.第三课:决策树
5.第四课:逻辑回归与决策树补充
6.第五课:常见的其它算法
7.第六课:综合应用

【实例】逻辑回归算法实现代码与例子

作者 : 老饼 发表日期 : 2022-06-26 03:35:26 更新日期 : 2024-04-16 09:35:31
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



在《逻辑回归模型原理介绍》一文中已讲解逻辑回归模型的原理与训练算法,

本文进一步讲解展示逻辑回归算法实现的例子,加深对逻辑回归的理解

本文先梳理建模的思路,按照算法思路,自行编写代码使用梯度下降法训练逻辑回归模型

最后,再给出日常使用时通过sklearn算法包训练逻辑回归模型的代码




      逻辑回归实例讲解-问题     


已采集150组 乳腺癌数据:包含四个特征和乳腺癌类别
现在需要我们可以通过数据,
  训练一个逻辑回归,用于预测乳腺癌是良性还是恶性
具体数据如下:
 
 特征:平均平滑度、平均紧凑度、平均凹面、平均凹点,类别:0-恶性、1-良性
说明:以上数据就是sklearn中的breast_cancer的数据





  01. 逻辑回归实现例子-建模思路梳理  




本节梳理用逻辑回归进行建模的思路,下节再展示逻辑回归实现代码




    逻辑回归建模思路    


逻辑回归的整体建模思路如下
 
逻辑回归建模思路
  1、确定模型  
在本实例中,我们假设X和Y符合逻辑回归模型
则有

  2、逻辑回归模型求解  
 
    用梯度下降法求解逻辑回归损失函数中的W,如下:
先初始化一个W,
然后不断按负梯度方向 调整
   最好能将数据归一化,这里为简化,我们对数据不作归一化

 
   3、将解回代逻辑回归模型  
 
将上述求得的W回代模型表达式即可得到最终的模型





   02. 逻辑回归训练-代码实现   




本节通过自写代码和调包两种方法展示如何训练逻辑回归模型




     逻辑回归算法实现-自行编写代码     


逻辑回归模型训练可以使用梯度下降算法,
梯度下降法训练逻辑回归算法流程图如下:
 
逻辑回归算法流程图
以本文上述逻辑回归实例中的数据为例,编写python代码如下:
"""
本代码展示梯度下降求解逻辑回归的python代码实现
本代码来自《老饼讲解-机器学习》www.bbbdata.com
"""
from sklearn.datasets import load_breast_cancer
import numpy as np
#----数据加载------
data = load_breast_cancer()                 # 加载breast_cancer数据
X    = data.data[:,4:8]                     # 作为示例,只使用4个变量来建模
y    = data.target                          # 类别标签
xt = np.insert(X, X.shape[1], 1, axis=1)    # 给X增加一列,作为阈值

#-----梯度下降求解w---------------
np.random.seed(888)                         # 设定随机种子,以确保每次程序结果一次
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))               # 往负梯度方向更新w
p = 1/(1+np.exp(-xt@w))                     # 最终的预测结果
print("参数w:"+str(w))                     # 打印参数
运行后输出结果如下:
 
 
参数w:[  7.16215375  14.98708501 -16.84689114 -73.92486786   3.38331608]




    逻辑回归算法实现-调用sklearn   


在实际中我们一般都会直接调包来完成逻辑回归模型训练,
以本文上述逻辑回归实例中的数据为例,展示如何调用sklearn包训练逻辑回归模型
调用sklearn包训练逻辑回归模型的具体代码如下:
"""
本代码展示在python中调用sklearn来训练逻辑回归模型
本代码来自《老饼讲解-机器学习》www.bbbdata.com
"""
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
import numpy as np
#----数据加载------
data = load_breast_cancer()                  # 加载breast_cancer数据
X    = data.data[:,4:8]                      # 作为示例,只使用4个变量来建模
y    = data.target                           # 类别标签

#-----训练模型--------------------
clf = LogisticRegression(random_state=0)     # 初始化逻辑回归模型         
clf.fit(X,y)                                 # 训练逻辑回归模型
#------打印结果------------------------
print("模型参数:"+str(clf.coef_))           # 打印模型系数
print("模型阈值:"+str(clf.intercept_))      # 打印模型阈值
运行后输出结果如下:
 
模型参数:[[-0.53024026 -3.48636783 -6.89132654 -4.37965412]]
模型阈值:[1.80112869]                                      




   最终的逻辑回归模型结果   


使用自行求解代码的结果如下
w=[  7.16,14.98,-16.84,-73.92,3.38]
 
 将w回代模型,可以得到最终的模型如下
 





  03. 逻辑回归模型-建模效果检验  



本节画出分布图,用于检验逻辑回归模型对于两类样本是否有区分度



    逻辑回归模型效果检验    


我们画出训练样本中,各个p值段的0,1标签分布:
 
 逻辑回归建模结果

从图中可以看到,p值越高,属于1类别的就越多,
模型对样本已有较好的区分度,这说明逻辑回归模型训练已成功
备注:逻辑回归一般用AUC或KS作为模型评估指标,这里为简化,暂不作展开





以上就是如何实现逻辑回归算法的全部内容了~






 End 





联系老饼