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

【实例】逻辑回归实例讲解

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


本文讲解一个逻辑回归的实例

先是梳理建模的思路,按照算法思路,自行编写代码使用梯度下降法求解

最后,给出调用sklearn算法包进行求解的方法




      逻辑回归实例讲解-问题     


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





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



本节梳理用逻辑回归进行建模的思路



    逻辑回归建模思路    


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

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

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





   02. 逻辑回归求解-代码实现   



本节通过自写代码求解和调包求解两种方法,实现逻辑回归模型求解



     自行编写代码-求解逻辑回归     


下面使用梯度下降法求解逻辑回归的损失函数
以本文上述逻辑回归实例中的数据为例

 
python代码如下:
# -*- 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)             # 设定随机种子,以确保每次程序结果一次
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包的求解的代码如下:
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
import numpy as np
#----数据加载------
data = load_breast_cancer()
X    = data.data[:,4:8]
y    = data.target

np.random.seed(888)
#-----训练模型--------------------
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 





联系老饼