算法系列——有监督学习——3.逻辑回归

一、概述

逻辑回归是一种学习某个事件发生概率的算法。利用这个概率,可以对某个事件发生或不发生进行二元分类。虽然逻辑回归本来是二元分类的算法,但也可以用于三种类别以上的分类问题。为了理解这个算法,请思考以下例子。

你在回家的路上发现下雪了。如果明天积雪,你就必须从鞋柜里翻出雪天穿的靴子做好准备。 现在的气温是2 ℃。请问明天不积雪,你可以穿平时的鞋子出门的概率是多少呢?

使用虚构的100天的数据,通过逻辑回归求出可以穿平时的鞋子出门的概率。以气温为横轴x,当出现积雪而需要穿着雪天穿的靴子出门时,纵轴y的值为0;当雪已经融化、可以穿着平时的鞋子外出时,纵轴y的值为1,绘制得到的数据散点图如图

在这里使用逻辑回归,就可以得到如图绿线所示的曲线,并利用该曲线求出在不同的气温下,雪已经融化、可以穿着平时的鞋子外出的概率。

具体来说,计算得到的概率分别是:气温为0 ℃时的概率为12%,为1 ℃时的概率为50%,为

2 ℃时的概率为88%。看起来明天可以穿平时的鞋子外出。

二、算法说明

如前所述,逻辑回归根据数据x和表示其所属类别的标签y进行学习,计算概率。数据x可以当作由特征值组成的向量处理。如果标签是二元分类,则可以使用前面的y=0, 1这种二元数值表示。逻辑回归的基本思想与线性回归一样,对数据x乘以权重向量w,再加上偏置w0,计算wx T +w0的值。逻辑回归和线性回归在从数据中学习权重w和偏置w0这一点上是相同的。与线性回归不同的是,为了计算概率,逻辑回归的输出范围必须限制在0和1之间。逻辑回归使用Sigmoid函数,返回0和1之间的数值。Sigmoid函数的图形如图所示。

二元分类通常将预测概率0.5作为阈值进行分类。例如,当概率小于0.5时,将y的预测值分类为0; 当概率大于0.5时,将y的预测值分类为1。根据问题的不同,有时会将阈值设置为大于或小于0.5 的值。 在学习过程中,我们使用逻辑损失作为误差函数进行最小化。与其他误差函数一样,逻辑损 失是在分类失败时返回大值,在分类成功时返回小值的函数。与在误差回归中引入的均方误差不同 的是,我们无法通过式子变形来计算逻辑损失的最小值,因此需要采用梯度下降法通过数值计算来 求解。 对于无法通过式子变形严密求解的情况,机器学习中经常会通过数值计算来近似求解。

三、示例代码

复制代码
import numpy as np
from sklearn.linear_model import LogisticRegression  #Scikit-learn中的逻辑回归分类模型
""" 
创建两个正态分布数据集:
前50个样本:均值=3,标准差=1。
后50个样本:均值=-1,标准差=1
使用np.r_将两个数组合并,并通过reshape转换为形状为(100, 1)的二维数组(逻辑回归要求输入为二维)
"""
X_train = np.r_[np.random.normal(3, 1, size=50),
          np.random.normal(-1, 1, size=50)].reshape((100, -1))
y_train = np.r_[np.ones(50), np.zeros(50)]   # 前50个样本标记为1,后50个标记为0,形成二分类标签
model = LogisticRegression()
model.fit(X_train, y_train)
print(model.predict_proba([[0], [1], [2]])[:, 1])  # 提取类别1的概率

运行结果:

计算可知,在0 ℃、1 ℃、2 ℃时概率的值(保留小数点后两位)分别约为0.11、0.51、0.90

四、决策边界

在解决分类问题时,如果让学习后的模型对未知数据分类,模型就会以某个地方为边界来区分分类

结果,这个边界就叫作决策边界。逻辑回归的决策边界是计算出的概率正好为50%的地方。下面看一下在平面的情况下的决策边界的图形。使用逻辑回归学习时的训练数据和决策边界如图所示。决策边界的形状因使用的算法不同而有很大的不同。在平面的情况下,逻辑回归的决策边界是直线。在其他算法中,比如KNN和神经网络,决策边界是更复杂的形式。

相关推荐
CoovallyAIHub7 分钟前
未来已来:从 CVPR & ICCV 观察 2025→2026 年计算机视觉的七大走向
深度学习·算法·计算机视觉
apcipot_rain32 分钟前
CSP集训错题集 第八周 主题:基础图论
算法·图论
天选之女wow32 分钟前
【代码随想录算法训练营——Day57(Day56周日休息)】图论——53.寻宝
算法·图论
rengang6639 分钟前
10-神经网络的工作原理:分析神经网络如何学习和推理
人工智能·深度学习·神经网络·学习
文火冰糖的硅基工坊44 分钟前
[人工智能-大模型-103]:模型层 - M个神经元组成的单层神经网络的本质
python·算法·机器学习
无语子yyds1 小时前
C++双指针算法例题
数据结构·c++·算法
Skrrapper1 小时前
【STL】set、multiset、unordered_set、unordered_multiset 的区别
c++·算法·哈希算法
SunnyKriSmile1 小时前
函数递归求最大值
c语言·算法·函数递归
傻啦嘿哟1 小时前
爬虫数据去重:BloomFilter算法实现指南
爬虫·算法
立志成为大牛的小牛1 小时前
数据结构——三十六、拓扑排序(王道408)
数据结构·学习·程序人生·考研·算法