【机器学习】Logistic回归#1基于Scikit-Learn的简单Logistic回归

news/2025/3/4 2:59:30/

主要参考学习资料:

机器学习算法的数学解析与Python实现》莫凡 著

前置知识:线性代数-Python

目录

  • 问题背景
  • 数学模型
    • 类别表示
    • Logistic函数
    • 假设函数
    • 损失函数
    • 训练步骤
  • 代码实现
  • 特点

问题背景

分类问题是一类预测非连续(离散)值的问题,即预先设定类别,向模型输入带有类别信息的训练集样本,最后进行预测。

待分类别只有两个的分类问题为二元分类问题,超过两个为多分类问题

多分类问题可以拆解为多次关于正类(是)和负类(否)的二元逻辑分类问题,形成数据结构中的二叉搜索树来解决。

数学模型

类别表示

用数值表示类别的形式有三种:

①数字形式:最直接,例如0为A类,1为B类,2为C类,本文从该形式入门。

②向量形式:广泛应用于深度学习,n元分类使用n个线性无关的n维向量来表示,例如[1,0,0]为A类,[0,1,0]为B类,[0,0,1]为C类。

③概率值形式:预测结果为每个类的可能概率,例如向量[0.114,0.514,0.810]的每个元素分别代表A、B、C三类的概率。

Logistic函数

离散数据往往与阶跃特征紧密联系,一个最基本的阶跃函数如下:

u ( t ) = { 0 , t < 0 1 , t > 0 u(t)=\left\{\begin{matrix}0,t<0\\1,t>0\end{matrix}\right. u(t)={0,t<01,t>0

请

该函数的输出非0即1,符合二元分类问题的背景,但阶跃函数的不可导为机器学习的优化算法带来问题。

Logistic函数是一种Sigmoid函数(S型函数),作为扮演类似阶跃函数角色的可导函数,其表达式为:

L o g i s t i c ( z ) = 1 1 − e − z \mathrm{Logistic}(z)=\displaystyle\frac1{1-e^{-z}} Logistic(z)=1ez1

其图像为:

可见横坐标尺度越大,图像越近似于阶跃函数。

假设函数

利用Logistic函数将线性模型预测的连续值映射到分类问题所需的非连续值,得到假设函数:

H ( x ) = 1 1 + e − ( w T x i + b ) H(x)=\displaystyle\frac1{1+e^{-(\boldsymbol w^Tx_i+b)}} H(x)=1+e(wTxi+b)1

损失函数

Logistic回归的损失函数为对数损失函数/交叉熵损失函数

L ( x ) = − y log ⁡ y ^ − ( 1 − y ) log ⁡ ( 1 − y ^ ) L(x)=-y\log \hat y-(1-y)\log(1-\hat y) L(x)=ylogy^(1y)log(1y^)

从分类的两种情况来理解它:

若真实值为1,则预测值趋于1时损失值趋于0;

若真实值为0,则预测值趋于0时损失值趋于0;

训练步骤

Logistic回归算法的训练步骤与线性回归算法类似,只不过输出从连续变成了离散。

代码实现

python">#导入LogisticRegression类
from sklearn.linear_model import LogisticRegression  
#导入鸢尾花分类数据集
from sklearn.datasets import load_iris  
import numpy as np  
import matplotlib.pyplot as plt  
#载入鸢尾花数据集
iris = load_iris()  
#选择前两个特征作为输入(方便可视化)
X = iris.data[:, :2]
#提取分类标签
y = iris.target  
#训练Logistic回归模型
clf = LogisticRegression().fit(X, y)  
#用于可视化的函数
def plot_decision_boundary(X, y, model):  #根据两个特征的最值确定坐标边界x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1  y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1  #meshgrid方法生成分别以两个列表为横、纵坐标二维网格#二维数组xx和yy分别为网格各点的横、纵坐标矩阵xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))  #ravel方法将坐标矩阵展开到一维#c_方法按列连接矩阵,即将横、纵坐标一一组合#用模型遍历所有坐标得到各点预测值Z = model.predict(np.c_[xx.ravel(), yy.ravel()])  #将预测值调整为xx的形状Z = Z.reshape(xx.shape)  #contourf方法绘制等高线,横纵坐标xx和yy,高度Zplt.contourf(xx, yy, Z, alpha=0.8, cmap=plt.cm.coolwarm)  #绘制训练数据的散点图plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', cmap=plt.cm.coolwarm) #绘制轴标签和标题 plt.xlabel('Feature 1')  plt.ylabel('Feature 2')  plt.title('Logistic Regression Decision Boundary')  plt.show()  
plot_decision_boundary(X, y, clf)

运行结果:

可见模型对鸢尾花数据集中蓝色数据点分类较为准确,而浅色和红色效果较差,这是因为数据点在选取的两个特征维度下线性不可分。

可以通过 model.score(X,y) \texttt{model.score(X,y)} model.score(X,y)对模型进行性能评估。

特点

优点:形式简单,可解释性强,容易理解和实现,计算代价较低。

缺点:效果有时不好,容易欠拟合。

应用领域:二分类领域,或作为其他算法的部件,例如神经网络算法的激活函数。


http://www.ppmy.cn/news/1576437.html

相关文章

【Java基础】Java中new一个对象时,JVM到底做了什么?

Java中new一个对象时&#xff0c;JVM到底做了什么&#xff1f; 在Java编程中&#xff0c;new关键字是我们创建对象的最常用方式。但你是否想过&#xff0c;当你写下new MyClass()时&#xff0c;Java虚拟机&#xff08;JVM&#xff09;到底在背后做了哪些工作&#xff1f;今天&…

使用DeepSeek+KIMI生成高质量PPT

一、使用DeepSeek DeepSeek官网&#xff1a;DeepSeek 点击“开始对话”&#xff0c;进入交互页面。 在上图中&#xff0c;输入问题&#xff0c;即可获取AI生成的结果。 基础模型&#xff08;V3&#xff09;&#xff1a;通用模型&#xff08;2024.12&#xff09;&#xff0c;高…

基于互联网协议的诊断通信(DoIP)

1、ISO 13400标准和其他汽车网络协议标准有何不同&#xff1f; ISO 13400 标准即 DoIP 协议标准&#xff0c;与其他常见汽车网络协议标准&#xff08;如 CAN、LIN、FlexRay 等&#xff09;有以下不同&#xff1a; 通信基础与适用场景 ISO 13400&#xff1a;基于互联网协议&a…

【音视频】编解码相关概念总结

NALU RTP PS流 三者总体关系 NALU在RTP中的应用&#xff1a;视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU&#xff0c;这些NALU包含了视频编码数据。RTP协议通过其头部信息&#xff08;如时间戳、序列号等&#xff09;帮助接收端重新排列和…

PHP For 循环

基本概念 For循环的结构 在PHP编程中&#xff0c;for循环是一种强大的控制结构&#xff0c;用于重复执行特定代码块。其语法结构由三个关键部分组成&#xff1a; 初始化表达式 、 条件表达式 和 更新表达式 。这种结构设计使得for循环特别适合处理已知迭代次数的任务。 for循…

聊一聊 IM 如何优化监控

IM 系列 im doc 实时通讯文档仓库 聊一聊 IM 是什么&#xff1f; IM 即时通讯系统概览 聊一聊 IM 要如何设计&#xff1f; 聊一聊 IM 要如何设计功能模块&#xff1f; 聊一聊 IM 要如何进行架构设计&#xff1f; 聊一聊 IM 要如何进行技术选型&#xff1f; 聊一聊 IM 要…

python 之协程笔记

协程 协程的本质是用户态线程&#xff0c;由程序自行控制切换时机&#xff0c;无需操作系统介入。与线程相比&#xff0c;协程的三大核心优势&#xff1a; 资源占用极低&#xff1a;一个协程仅需KB级内存&#xff0c;可轻松创建数万个切换效率惊人&#xff1a;上下文切换在用户…

服务器硬防的优势有哪些?

服务器硬防也可以称为硬件防火墙&#xff0c;是一种专门用来保护网络不会受到未经授权访问所设计的设备&#xff0c;硬件防火墙是一个独立的设备&#xff0c;同时也是集成在路由器或者是其它网络设备中的一部分&#xff0c;下面&#xff0c;小编就来为大家介绍一下服务器硬防的…