本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
本文展示一个逻辑回归算法实现的例子,加深对逻辑回归的理解
本文先梳理逻辑回归算法思路,再自行编写代码使用梯度下降法来训练逻辑回归模型
最后,再给出日常使用时通过sklearn算法包训练逻辑回归模型的代码
本节梳理使用逻辑回归进行建模的思路与流程
逻辑回归实例-问题与数据
已采集150组 乳腺癌数据:包含四个特征和乳腺癌类别
现在需要我们可以通过数据,训练一个逻辑回归,用于预测乳腺癌是良性还是恶性
具体数据如下:
特征:平均平滑度、平均紧凑度、平均凹面、平均凹点,类别:0-恶性、1-良性
说明:以上数据就是sklearn中的breast_cancer的数据
逻辑回归实例-建模思路
逻辑回归的整体建模思路如下
1、确定模型
在本实例中,我们假设X和Y符合逻辑回归模型
则有
2、逻辑回归模型求解
用梯度下降法求解逻辑回归损失函数中的W,如下:
先初始化一个W,
然后不断按负梯度方向 调整
最好能将数据归一化,这里为简化,我们对数据不作归一化
3、将解回代逻辑回归模型
将上述求得的W回代模型表达式即可得到最终的模型
本节通过自写代码和调包两种方法展示如何训练逻辑回归模型
逻辑回归算法实现-自行编写代码
逻辑回归模型的训练可以使用梯度下降算法
梯度下降法训练逻辑回归算法流程图如下:
以本文上述逻辑回归实例中的数据为例,编写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回代模型,可以得到最终的模型如下:
逻辑回归算法实现-调用sklearn
在实际中我们一般都会直接调包来完成逻辑回归模型训练,
以本文上述逻辑回归实例中的数据为例,展示如何调用sklearn包训练逻辑回归模型
调用sklearn包训练逻辑回归模型的具体代码如下:
"""
本代码展示在python中调用sklearn来训练逻辑回归模型
本代码来自《老饼讲解-机器学习》www.bbbdata.com
"""
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
#----数据加载------
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_)) # 打印模型阈值
代码运行结果如下:
本节画出分布图,用于检验逻辑回归模型对于两类样本是否有区分度
逻辑回归模型效果检验
我们画出训练样本中,各个p值段的0,1标签分布如下:
从图中可以看到,p值越高,属于1类别的就越多,
模型对样本已有较好的区分度,这说明逻辑回归模型训练已成功
备注:逻辑回归一般用AUC或KS作为模型评估指标,这里为简化,暂不作展开
以上就是如何实现逻辑回归算法的全部内容了~
End