第二课:逻辑回归与梯度下降
逻辑回归
【实例】逻辑回归实例讲解
作者 : 老饼 日期 : 2022-06-26 03:35:26 更新 : 2022-11-29 04:48:13
本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.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 






联系老饼