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

article/2025/8/24 8:33:42

跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注!

0 前言

在上一讲中,笔者通过五篇文章来详细的介绍了线性回归模型,那么本讲开始继续介绍下一个经典的机器学习算法逻辑回归(Logistics Regression)

如图所示为逻辑回归模型学习的大致路线,同样也分为三个阶段。在第一个阶段结束后,我们也就大致掌握了逻辑回归的基本原理。下面就开始正式进入逻辑回归模型的学习。

1 引例

通常来讲,一个新算法的诞生要么用来改善已有的算法模型,要么就是首次提出用来解决一个新的问题。而线性回归模型恰恰属于后者,是用来解决一类新的问题——分类(Classification)。那什么又是分类问题呢?

如图所示有两堆样本点,即二分类问题(Binary Classification),现在需要你建立一个模型来对新输入的样本进行预测,判断其应该属于那个类别。对于这个问题的描述用线性回归来解决肯定是不行的,因为两者本就属于不同类型的问题。退一步讲,即使是用线性回归来建模得到的估计也就是一条向右倾斜的直线,而我们这里需要的却是一条向左倾斜的直线。同时,回归模型的预测值都是位于预测曲线上的,而无法做到区分直线两边的东西。那既然用已有的线性回归解决不了,那我们可不可以在此基础上做一点改进以实现分类的目的呢?答案是当然可以。

2 建立模型

2.1 如何建立模型

既然是解决分类问题,那么我们完全可以通过建立一个模型用来预测每个样本点属于其中一个类别的概率 p p p,如果 p > 0.5 p>0.5 p>0.5那我们就可以认为该样本点属于这个类别,这样就能解决上述的二分类问题。可该怎么建立这个模型呢?

前面线性回归中,我们通过建模 h ( x ) = w x + b h(x)=wx+b h(x)=wx+b来对新样本进行预测,其输出值为可能的任意实数。但此处既然是要得到一个样本所属类别的概率,那最直接的办法就是通过一个函数 g ( z ) g(z) g(z),将 h ( x ) h(x) h(x)映射至 [ 0 , 1 ] [0,1] [0,1]的范围即可。由此,我们便得到了逻辑回归中的预测模型:
y ^ = h ( x ) = g ( w x + b ) (1) \hat{y}=h(x)=g(wx+b)\tag{1} y^=h(x)=g(wx+b)(1)
其中 w , b w,b w,b为未知参数; h ( x ) h(x) h(x)称为假设函数(hypothesis),当 h ( x i ) > 0.5 h(x_i)>0.5 h(xi)>0.5时,便可以认为样本 x i x_i xi属于正类,反之则认为属于负类;同时,我们将 w x + b = 0 wx+b=0 wx+b=0称为决策面(decision boundary)。当求解得到 w , b w,b w,b后,也就意味着我们得到了分类模型。

注:回归模型一般来说都是指对连续值预测的一类模型,而分类模型都是指对离散值(类标)预测的一类模型。但是由于历史的原因虽然逻辑回归被称为回归,但它却是一个分类模型,这算是一个例外。

2.2 如何求解模型

当我们建立好模型之后就需要找到一种方法来求解模型中的未知参数。同线性回归一样,此时我们也需要通过一种间接的方式,即通过目标函数来刻画预测标签(label)与真实标签之间的差距。当最小化目标函数后,我们便能得到需要求解的参数 w , b w,b w,b。现在先不假思索的给出逻辑回归中的目标函数(第二阶段再讲来历):

J ( w , b ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h ( x ( i ) ) ) ] h ( x ( i ) ) = g ( w x ( i ) + b ) (2) \begin{aligned} J(w,b) &= -\frac{1}{m}\left[\sum_{i=1}^{m}y^{(i)}\log h(x^{(i)}) + (1 - y^{(i)})\log (1 - h(x^{(i)}))\right]\\[2ex] h(x^{(i)})&=g(wx^{(i)}+b) \end{aligned}\tag{2} J(w,b)h(x(i))=m1[i=1my(i)logh(x(i))+(1y(i))log(1h(x(i)))]=g(wx(i)+b)(2)

其中, m m m表示样本总数, x ( i ) x^{(i)} x(i)表示第 i i i个样本, y ( i ) y^{(i)} y(i)表示第 i i i个样本的真实标签, h ( x ( i ) ) h(x^{(i)}) h(x(i))表示第 i i i个样本为正类的预测概率。

由公式(2)可以知道,当函数 J ( w , b ) J(w,b) J(w,b)取得最小值的参数 w ^ , b ^ \hat{w},\hat{b} w^,b^,就是我们要求的目标参数。原因在于,当 J ( w , b ) J(w,b) J(w,b)取得最小值时就意味着此时所有样本的预测标签与真实标签之间的差距最小,这同时也是最小化目标函数的意义。因此,对于如何求解模型 h ( x ) h(x) h(x)的问题就转化为了如何最小化目标函数 J ( w , b ) J(w,b) J(w,b)了。至此,我们对逻辑回归算法第一阶段核心部分的学习也就只差一步之遥,那就是评价指标与通过开源的框架来建模并进行预测。

3 Scikit-learn建模

  • 制作数据集

    def make_data():num_points = 200centers = [[1, 1], [2, 2]]  # 指定中心x, y = make_blobs(n_samples=num_points, centers=centers, cluster_std=0.2, random_state=np.random.seed(10))index_pos, index_neg = (y == 1), (y == 0)x_pos, x_neg = x[index_pos], x[index_neg]plt.scatter(x_pos[:, 0], x_pos[:, 1], marker='o', label='positive')plt.scatter(x_neg[:, 0], x_neg[:, 1], marker='s', label='negative')plt.legend(fontsize=15)plt.show()return x, y
    

    生成下图所示的数据集:

  • 模型训练与预测

    def decision_boundary(x, y):###########  模型求解并预测model = LogisticRegression()model.fit(x, y)pred = model.predict([[1, 0.5], [3, 1.5]])print("样本点(1,0.5)所属的类标为{}\n样本点(3,1.5)所属的类标为{}".format(pred[0], pred[1]))###########  绘制决策面x_min, x_max = x[:, 0].min() - .5, x[:, 0].max() + .5y_min, y_max = x[:, 1].min() - .5, x[:, 1].max() + .5h = .02  # step size in the meshxx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))x_new = np.hstack([xx.reshape(-1, 1), yy.reshape(-1, 1)])Z = model.predict(x_new)Z = Z.reshape(xx.shape)plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)###########  绘制原始样本点index_pos, index_neg = (y == 1), (y == 0)x_pos, x_neg = x[index_pos], x[index_neg]plt.scatter(x_pos[:, 0], x_pos[:, 1], marker='o', label='positive')plt.scatter(x_neg[:, 0], x_neg[:, 1], marker='s', label='negative')plt.legend(fontsize=15)plt.show()
    if __name__ == '__main__':x, y = make_data()decision_boundary(x, y)#结果:
    #样本点(1,0.5)所属的类标为0
    #样本点(3,1.5)所属的类标为1
    

    训练完成之后,我们便可以绘制出如下所示的一个决策面,用于样本点的分类。

4 总结

在这篇文章中,①笔者首先通过一个例子引入了什么是分类,然后说了为什么不能用线性回归模型进行建模的原因;②其次,通过对线性回归的改进得到逻辑回归模型,并直接的给出了目标函数;③最后通过开源的sklearn框架搭建了一个简单的逻辑回归模型,并对决策面进行了可视化。虽然内容不多,也不复杂但却包含了逻辑回归算法的核心思想。同时,余下的内容也会在后续的文章中进行介绍。本次内容就到此结束,感谢阅读!

若有任何疑问,请发邮件至moon-hotel@hotmail.com并附上文章链接,青山不改,绿水长流,月来客栈见!

引用

  • 示例代码:关注公众号回复“示例代码”即可直接获取!

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

相关文章

逻辑回归模型

本文代码及数据集来自《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回归虽然名…

PyCharm如何修改配置大内存

现在的电脑标配都8G以上内存了,不过很多IDE仍然是以低配电脑为标准,去配置软件占用硬件的程度 因为内存会直接影响到软件的性能,可以通过手动去设置大内存 一、首先启动虚拟机 进入pychram的bin目录,可以看到2个以vmoptions为后…

jvm最大内存限制多少?

(1)堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小 于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,…

大内存时代虚拟内存现在还有用吗

但凡用过Windows的人,大多听说过“虚拟内存”这四个字。尤其在当年物理内存还普遍偏低的年代,虚拟内存几乎成了每一个玩电脑的人都曾摆弄过 的东东。不过随着硬件技术不断发展,内存价格逐步白菜化,我们的电脑再也不像当年那样算计…

笔记本电脑查看几个卡槽,支持最大内存,内存条参数详细步骤,开启双通道条件

1:一个命令,轻松查看电脑支持多大内存 使用 Win R组合快捷键,打开 运行 操作框,然后在打开后面 输入命令 cmd ,并点击下方的“确定”进入命令操作窗口,如下图所示。 然后在打开的CMD命令窗口输入命令&am…

在Jupyter里按需删除大内存变量并且释放内存

使用情形: 项目需要对多个大内存变量进行处理,但是每个大内存变量处理的时候都需要加载一个另外共同的大内存变量。现在处理完一个变量之后,只能重启kernel然后处理另一个变量;但是理论上我们可以删除一个变量的内存并读入下一个…

xp计算机如何查看内存大小,xp如何查看内存大小

想知道怎么查看电脑内存的大小吗,下面是学习啦小编带来的关于xp如何查看内存大小的内容,欢迎阅读! xp查看内存大小方法一: 一: 右键单击 我的电脑,选择 【属性】 查看 二: 打开控制面板,打开【系…

Android Studio如何设置占用的最大内存?

1.File-Settings,如下图,是应用到所有项目中的。 2.下方的“Daemon Heap Size Setting”是设置当前项目编译时所能使用的最大内存的,所以如果我们需要仅当前项目有效,可以在这里设置,设置好之后点击“确定”,完成更改。

不花里胡哨看电脑主板支持最大内存与频率

怎么看电脑主板支持最大内存 WinR输入Cmd回车 wmic memphysical get maxcapacity如上图 Maxcapacity:最大内存 k/1024M/1021G 33554432/1024/102132GB说明最高支持32GB的内存 怎么看电脑主板内存条卡槽 CtrlShiftEsc 可以看到卡槽、速度频率 怎么看电脑主板支…