本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
逻辑回归( Logistic Regression)模型是机器学习中最常用的二分类模型
本文针对入门快速讲解逻辑回归,包括逻辑回归模型、逻辑回归损失函数、代码实现等等
通过本文,让初学者可以快速的了解、上手逻辑回归模型,知道逻辑回归模型是什么、怎么使用
本节快速了解逻辑回归模型是什么,包括模型表达式以及损失函数
什么是逻辑回归模型
逻辑回归模型(Logistic regression)是机器学习中一个应用于二分类的概率模型
它在线性回归的基础上,加了一个S型的Logistic函数,因此称为逻辑回归模型
逻辑回归模型用于二分类,它输出样本属于正标签的概率
逻辑回归模型表达式为:
矩阵形式为:
其中,
直观地理解,逻辑回归模型就是用线性模型XW来作为样本的类别判别值
然后通过sigmoid函数,进一步将判别值XW转换为概率
逻辑回归模型的损失函数
逻辑回归使用的是交叉熵损失函数,如下:
其中,:样本个数
:第i个样本的标签,要么是0,要么是1
✍️交叉熵损失函数的意义
模型预测第i个样本为1类样本的概率为
因此,模型对第i个样本预测准确的概率为:
则有:
当时,
当时,
因此,逻辑回归的损失函数实际意义如下:
即基于模型的预测概率,在知道样本真实标签时所获得的信息量期望(熵)
本节讲解逻辑回归模型的训练方法与梯度公式
逻辑回归模型的训练
逻辑回归模型的训练,就是求解逻辑回归模型里的参数W,使得损失函数L最小
梯度下降算法与逻辑回归的梯度
求解逻辑回归的算法比较多,较简单、经典的求解方法就是使用梯度下降算法进行求解
梯度下降算法先初始化一个解,再不断往目标函数的负梯度方向调整解,如下:
使用梯度下降算法训练逻辑回归,在迭代过程中需要使用损失函数L(W)的梯度
逻辑回归损失函数L(W)的梯度公式如下:
其中
:样本的输入特征数据,矩阵
m为样本数,n为特征个数,即一行为一个样本
: 样本的标签y,列向量
:模型预测值,即,的列向量
:模型的权重,的列向量
公式的具体推导过程见《逻辑回归梯度公式推导》
逻辑回归模型训练
梯度下降训练逻辑回归模型的算法流程如下:
先初始化W,然后 1. 按照梯度公式算出梯度
2. 将W往负梯度方向调整
不断循环(1)和(2),直到达到终止条件(例如达到最大迭代次数)
软件包中不一定使用梯度下降算法,例如matlab工具箱里使用的就是牛顿法
虽然牛顿法训练会更快,但原理也相对更为复杂,在这里不再展开
本节展示如何训练一个逻辑回归模型,应用于二分类问题
逻辑回归例子
下面展示如何训练一个逻辑回归模型,用于识别样本的类别
数据
乳腺癌问题的具体数据如下:
特征:平均平滑度、平均紧凑度、平均凹面、平均凹点,类别:0-恶性、1-良性
即以sk-learn中的breast_cancer的数据,breast_cancer原数据中有30个特征,为方便讲解,我们这里只选4个
在sklearn中可以使用LogisticRegression来实现一个逻辑回归,具体代码实现如下:
'''
本代码展示在python中如何用sklearn来训练一个逻辑回归模型
本代码来自《老饼讲解-机器学习》www.bbbdata.com
'''
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
#----数据加载------
data = load_breast_cancer()
X = data.data[:,4:8] # 作为学习,这里我们只选择breast_cancer数据中的4个变量进行建模
y = data.target # breast_cancer的y
#----数据归一化------
xmin = X.min(axis=0) # 输入变量的最小值
xmax = X.max(axis=0) # 输入变量的最大值
X_norm=(X-xmin)/(xmax-xmin) # 对输入变量进行归一化
#-----训练模型--------------------
clf = LogisticRegression(random_state=0) # 初始化逻辑回归模型
clf.fit(X_norm,y) # 用数据训练逻辑回归模型
#------模型预测-------------------------------
pred_y = clf.predict(X_norm) # 预测类别
pred_prob_y = clf.predict_proba(X_norm)[:,1] # 预测属于1类的概率
print( "模型系数:",clf.coef_[0]) # 打印逻辑回归模型系数
print( "模型阈值:",clf.intercept_) # 打印逻辑回归模型阈值
print( "模型准确率:",(pred_y== y).sum()/len(y)) # 打印模型的准确率
运行结果如下:
可以看到,模型对样本类别预测的准确率为89.8%,说明模型是有效的
将模型系数与阈值代入逻辑回归模型表达式,所得到的模型为:
✍️备注:模型在训练时一般需要对数据进行归一化,所以该表达式也是针对归一化后的数据的
笔者语
逻辑回归模型是一个最常用的模型,也是机器学习中必须知道的一个模型
因为实际应用场景中,最常见的就是Yes/No这样的决策,而逻辑回归就是解决这样的问题
更直接的原因是,小贷评分卡中用的模型就是逻辑回归,深度学习中也喜欢以逻辑回归作为入门模型
因此,逻辑回归就成为了机器学习中最广为人知的模型之一
如何深入应用逻辑回归
本文仅作为逻辑回归模型的入门文章,快速了解和应用逻辑回归模型
更多逻辑回归模型的使用,可以参考本站逻辑回归系列文章《逻辑回归-专题详述》,
该系列文章讲解逻辑回归日常应用涉及的内容,包括参数讲解、模型表达式的提取、建模流程等等
如何自实现逻辑回归的原理
如果不想调用软件包,而是自行实现一个逻辑回归,可参考《课程:逻辑回归-原理与自实现》
该课程是老饼阅读matlab的逻辑回归源码后整理出来的课程
在课程中讲逻辑回归模型的细节原理,并用python复现出与matlab逻辑回归函数一模一样的结果
好了,以上就是逻辑回归模型的原理以及使用方法了~
End