入门篇(二)模型:逻辑回归(一步步从原理到实现)

article/2025/8/24 7:23:07

《老饼讲解机器学习》专注于机器学习的学习网站http://ml.bbbdata.com/teach#187


目录

一、问题

二、逻辑回归的思想

三、模型表达式

四、损失函数

(一) 单个样本评估正确的概率

(二) 所有样本评估正确的概率

(三) 损失函数

(四) 总结

五、模型求解

(一) 梯度下降算法

(二) 梯度公式

(三) 梯度下降算法应用于逻辑回归

六、实例解说

(一) 问题

(二) 建模思路

(三) 代码实现

(四) 模型结果

(五) 检验模型效果

七、本文总结

(一) 学习了逻辑回归模型原理

(二) 梯度下降法求解逻辑回归

八、附件


本文讲解机器学习入门第二个经典模型--逻辑回归!
好话不嫌多,机器学习的主要任务就是进行预测。

一、问题

现在有一组数据,需要利用各个特征去预测目标的类别是1还是0:

mean smoothnessmean compactnessmean concavitymean concave points是否良性
0.11840.27760.30010.14710
0.084740.078640.08690.070170
...............
0.087520.076980.047510.033841
0.082610.047510.019720.013491
...............
0.097520.11410.093880.058390
...............
0.084550.10230.092510.053020
0.11780.2770.35140.1520
0.052630.043620.00.01

二、逻辑回归的思想

我们知道,线性回归拟合的是数值,并不符合我们预测类别的需求。
但数值与类别也是有关联的。例如,天色越黑,下雨概率就越大。即值越大,属于某类别的概率也越大。值与概率之间可以互转。


在数学里通常用 \textbf{Sigmoid}(x) = \dfrac{1}{1+e^{-x}}函数将数值转化为概率:


逻辑回归就是这样的原理,先用 wx+b 作为综合值的评估,再套用 sigmoid 函数将综合评估值转为概率。所以,逻辑回归本骨子里还是线性模型。

三、模型表达式

逻辑回归的模型表达式如下:

在单变量时,它就是一条S曲线,其中,w控制了它的拉伸,b则控制了它的平移位置:


类似地,在两个变量时,它就是一个S面,在更多变量时,则是一个超S面。

四、损失函数

我们知道,损失函数引导我们去求取模型里的参数w和b,也就是指明我们想要一个什么样的w,b。
在逻辑回归中,我们用误差就不适合了。逻辑回归模型采用的是,模型预测正确概率最大化~!

(一) 单个样本评估正确的概率

模型对单个样本评估正确的概率\textbf{P}_{\text{right}}(x) 为:


解析 :逻辑回归的输出就是类别1的概率,真实值 也为1 时, P就是评估正确的概率 ; y= 0时,P是错误的概率,1-P 就是模型正确的概率。


巧妙的操作是,可以用一条式子把上述二式合并如下:

解析:当y=1时,第二个括号等于1,当y=0时,第一个括号为0.与上述二式一致。

(二) 所有样本评估正确的概率

假设每个样本是独立事件,则总评估正确的概率为所有样本评估正确的积:

(三) 损失函数

我们期待\textbf{P}_{\text{RightTotal}}​最大化,只要将损失函数设计成-\textbf{P}_{\text{RightTotal}}即可。又由于\textbf{P}_{\text{RightTotal}}中含有大量的乘号,为计算方便,我们外套一个对数。

最后,损失函数设计如下:

说明:
在连乘的情况下,使用对数使其转为加号是常用的操作。因为对数是单调函数,能让P最大化的W,同样会是令lnP最大化的W。

(四) 总结

逻辑回归损失函数设计的整体思路为:


这种思路设计的损失函数也叫最大似然损失函数。

五、模型求解

模型求解的技术背景

现在我们需要求解最佳的W,使损失函数

最小。也即令预测概率准确性最大化。
 

理论上,我们可以求损失函数的偏导,k+1个参数的偏导共k+1个方程,再联立求解即可。但遗憾的是,它的偏导数是非线性方程,我们没有能力去求解k+1个非线性方程的解


因此,我们退而求其次,使用算法去寻找一个优秀解。其中,梯度下降法就是一个经典的数值求解算法

(一) 梯度下降算法

其原理如下:


即先初始化一个初始解,然后不断地根据目标函数的梯度下降方向,调整x,最后达到局部最优值。具体理论请看《入门篇-求解算法:梯度下降》。

(二) 梯度公式

梯度下降法在迭代过程使用到了L(W)的梯度,我们需要求出L(W)的梯度公式(公式详细推导在文未给出):

\displaystyle \dfrac{\partial L(W)}{\partial W}= X^T(p-\text{y})

其中
(1) X 为m*n矩阵, m样本数, n为特征个数,即一行为一个样本,一列为一特征.   
(2) y,p 为 列向量, p = \dfrac{1}{1+e^{-XW}}
(3) W为列向量n*1的列向量

(三) 梯度下降算法应用于逻辑回归

先初始化W,然后
(1) 按照梯度公式算出梯度,
(2) 将W往负梯度方向调整
不断循环(1)和(2),直到达到终止条件(例如达到最大迭代次数)

Pass: 工具包里通常不使用梯度下降算法,对于逻辑回归,会有更巧妙的求解算法,例如matlab工具箱里使用的就是牛顿法,它与梯度下降法思想类似。
在这里我们先学习梯度下降法求解,它是最经典必学的求解算法,没有之一。它简单,普适性广,通用。至于工具箱中使用的算法,在进阶篇我们再进行讲解。

六、实例解说

(一) 问题

以sk-learn中的breast_cancer的部分数据为例
已采集150组 乳腺癌数据:包含四个特征和乳腺癌类别(特征:平均平滑度、平均紧凑度、平均凹面、平均凹点,类别:恶性、良性)。
具体数据如下:

mean smoothnessmean compactnessmean concavitymean concave points是否良性
0.11840.27760.30010.14710
0.084740.078640.08690.070170
0.10960.15990.19740.12790
...............
0.087520.076980.047510.033841
0.086370.049660.016570.011151
0.076850.060590.018570.017231
0.082610.047510.019720.013491
...............
0.097520.11410.093880.058390
0.094880.085110.086250.044890
...............
0.11780.2770.35140.1520
0.052630.043620.00.01

现在需要我们可以通过数据,训练一个决策模型,用于预测乳腺癌是良性还是恶性。

(二) 建模思路

1、假设X和Y符合逻辑回归模型,则有\textbf{y} = \textbf{sigmoid}(XW)
2、用梯度下降法求解W:
   用梯度下降法求解损失函数中的W:先初始化一个w,然后不断按负梯度方向\displaystyle \dfrac{\partial L(W)}{\partial W}= X^T(p-\text{y})调整。 
   (最好能将数据归一化,这里为简化,我们不作归一化)
3、将W回代模型

(三) 代码实现

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)) #计算pw = 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]

(四) 模型结果

将w回代模型,我们可以得到模型:

\textbf{p} = \dfrac{1}{1+ e^{-(7.16*x_1+ 14.98*x_2 -16.84x*_3 -73.92*x_4 +3.38)}}

 (五) 检验模型效果

我们画出训练样本中,各个p值段的0,1标签分布:


可以看到,p值越高,属于1类别的就越多,模型对样本已有较好的区分度。

附:使用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.targetnp.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]

七、本文总结

(一) 学习了逻辑回归模型原理

逻辑回归模型是用于做二分类。输出属于分类1的概率。
(1) 模型函数:  相当于用线性函数综合所有变量,再用sigmoid函数将综合值转为概率值。
P(x) = \textbf{Sigmoid}(XW) = \dfrac{1}{1+e^{-(w_1x_1+w_2x_2+....w_kx_k+b)}}
(2) 模型的损失函数
用概率最大化作为损失函数,即取何值时,模型预测正确的概率最大。
(3) 模型求解
模型无法求得 精确解,使用梯度下降等算法进行数值求解(matlab的逻辑回归包里用的是牛顿法,与梯度下降法思想类似)。

(二) 梯度下降法求解逻辑回归

(1) 先求出待求解函数(损失函数)的梯度公式,
(2) 初始化一个初始解,根据梯度公式的负梯度方向,不断迭代,直到满足要求(例如达到最大迭代次数)




八、附件

文中两个重要公式推导《损失函数化简推导》与《损失函数梯度推导》推导过程见《入门篇-附件:逻辑回归公式推导》


相关文章

《入门篇-环境搭建:anaconda安装》

《​​​​​​入门篇-模型:逻辑回归》

《入门篇-模型:决策树-CART》


http://chatgpt.dhexx.cn/article/yL38Fhye.shtml

相关文章

Logistic逻辑回归模型与参数估计

一、引言 线性回归的因变量是连续变量,而逻辑回归解决的是因变量是分类变量的问题。当然,自变量既可以是连续的也可以是分类的,但是分类变量做自变量前需要做哑变量处理。 逻辑回归将分类因变量的0、1等 值转换为取其值的概率,将…

逻辑回归模型(一)——数学模型

学习李航的《统计学习算法》,今天周三,这周任务之一完成逻辑回归模型的博文记录。 逻辑回归(Logistic Regression)属于分类方法(classification)。逻辑回归与最大熵模型(maximum entropy)都属于…

【机器学习】1.逻辑回归模型(1)

目录 一、广义线性模型(Generalized Linear Model) 1、一个引例 2、定义 二、逻辑回归 1、对数几率模型(logit model) 2、逻辑回归与Sigmoid函数 三、逻辑回归模型的输出结果 四、逻辑回归的多分类拓展 1、OvO 2、OvR …

逻辑回归模型(Logistic Regression)及Python实现

https://www.cnblogs.com/sumai/p/5221067.html 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳性,目标变量是离散的,只有两种取值,通常会编码为0和1。假设我们有一个特征X,画出散点图&…

逻辑回归详解

逻辑回归通常用于解决分类问题,比如:客户是否该买某个商品,借款人是否会违约等。实际上,“分类”是逻辑回归的目的和结果,中间过程依旧是“回归”,因为通过逻辑回归模型,我们得到的是0-1之间的连…

什么是逻辑回归?

深度学习(Deep Learning)是机器学习(Machine Learning)的一大分支,它试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 逻辑回归(Logistic Regression,也译作…

逻辑回归模型调参

文章目录 一、逻辑回归(Logistic Regression)二、样本不均衡问题处理1 、过采样方法(一)、随机过采样法(二)、SMOTE算法 2 、欠采样方法(一)、随机欠采样 三、网格搜索快速调优损失函数(对数似然损失) 四、模型评价ROC曲线 一、逻…

逻辑回归(模型的建立与求解)

跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注! 0 前言 在上一讲中,笔者通过五篇文章来详细的介绍了线性回归模型,那么本讲开始继续介绍下一个经典的机器学习算法逻辑回归(Logistic…

逻辑回归模型

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 逻辑回归模型本质就是将线性回归模型通过Sigmoid函数进行了一个非线性转换,得到一个介于0~1之间的概率值。因此,逻辑回归模型的本质是预测概率,而不是直接预测具…

解读Logistic回归模型

一、logistic回归的由来 logistic回归在百度百科是这样定义的: logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。 由此可见 logistic回归是从线性回归模…

logistic回归模型

logistic回归模型 前言logistic回归模型logit变换几率logistic模型二项逻辑回归模型损失函数 logistic回归模型的应用logistic回归模型的评价 前言 从这一期开始,我们准备介绍一系列机器学习算法模型,主要包括logistic回归,决策树&#xff0…

逻辑回归模型logistic原理详解

Hello! 小A又来咯! 之前我们详细的介绍了使用线性回归模型来进行回归学习,那如果要做分类任务该怎么办呢? 考虑二分类任务,其输出值y属于集合[0,1]。而线性回归模型zw^T*xb是实值。为了进行分类任务,我们需要将实值z转…

Python实现逻辑回归模型教程

理解多个预测变量与连续响应变量之间关系通常适用线性回归,但当响应变量为类别变量时需要适用逻辑回归。 逻辑回归是尝试从数据集中把W观测记录分为不同类别的分类算法。 常见的分类回归场景有: 通过信用分和账户余额预测客户贷款是否违约通过篮球比赛中…

【机器学习笔记4】逻辑回归模型

目录 什么是逻辑回归? Sigmoid函数 决策边界 逻辑回归的损失函数 为什么平方误差模型不可行? 对数损失函数 单个样例损失: 整体损失函数 梯度下降算法 补充:F1-score评价指标 F1-Score简介 相关概念 F-Score 示例及…

逻辑回归模型详解(Logistic Regression)

目录 广义线性模型 极大似然法 逻辑回归的假设函数 逻辑回归的损失函数 交叉熵损失函数 为什么LR模型损失函数使用交叉熵不用均方差 交叉熵损失函数的数学原理 交叉熵损失函数的直观理解 交叉熵简介 对数损失函数和交叉熵损失函数 逻辑回归优缺点 其他 逻辑回归与…

机器学习算法(一):逻辑回归模型(Logistic Regression, LR)

目录 1 LR 1.1 直观表述 1.2 决策边界(Decision Boundary) 2. 权值求解 2.1 代价函数(似然函数) 2.1.1 为什么损失函数不用最小二乘?即逻辑斯蒂回归损失函数为什么使用交叉熵而不是MSE? 2.1.2 代价函…

详解逻辑回归

目录 1. 逻辑回归模型介绍1.1 Logistic分布1.2 Logistic回归1.3 代价函数1.4 求解1.5 正则化1.5.1 L1正则化1.5.2 L2正则化1.5.3 L1正则化和L2正则化区别 2 与其他模型的对比2.1 与线性回归2.2 与 SVM2.3 与朴素贝叶斯 3. 模型细节3.1 为什么适合离散特征3.2 为什么不用平方误差…

逻辑回归模型(Logistic Regression)

逻辑回归符合伯努利分布。伯努利分布就是我们常见的0-1分布,即它的随机变量只取0或者1,各自的频率分别取1−p和p,当x0或者x1时,我们数学定义为: 所以在常规的逻辑回归模型中,只有两个类别,0或者…

逻辑回归(Logistic Regression)详解

逻辑回归也称作logistic回归分析,是一种广义的线性回归分析模型,属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的n组数据&…

逻辑回归模型及案例(Python)

1 简介 逻辑回归也被称为广义线性回归模型,它与线性回归模型的形式基本上相同,最大的区别就在于它们的因变量不同,如果是连续的,就是多重线性回归;如果是二项分布,就是Logistic回归。 Logistic回归虽然名…