Python 全栈体系【四阶】(九)

news2025/1/20 18:39:06

第四章 机器学习

十二、逻辑回归

1. 概述

1.1 什么是逻辑回归

逻辑回归(Logistic Regression) 虽然被称为回归,但其实际上是分类模型,常用于二分类。逻辑回归因其简单、可并行化、可解释强而受到广泛应用。二分类(也称为逻辑分类)是常见的分类方法,是将一批样本或数据划分到两个类别,例如一次考试,根据成绩可以分为及格、不及格两个类别,如下表所示:

姓名成绩分类
Jerry861
Tom981
Lily580
………………

这就是逻辑分类,将连续值映射到两个类别中。

  • 根据样本数据,构建一个线性回归模型,预测输出(连续)
  • 将连续的预测数据,代入到逻辑函数中
  • 逻辑函数,将预测值映射到 0-1 区间范围内(将线性转为非线性)
  • 找到一个阈值 0.5
  • 大于 0.5 --> 1,小于 0.5 --> 0
1.2 逻辑函数

逻辑回归是一种广义的线性回归,其原理是利用线性模型根据输入计算输出(线性模型输出值为连续),并在逻辑函数作用下,将连续值转换为两个离散值(0 或 1),其表达式如下:

y = h ( w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . + w n x n + b ) y = h(w_1x_1 + w_2x_2 + w_3x_3 + ... + w_nx_n + b) y=h(w1x1+w2x2+w3x3+...+wnxn+b)

其中,括号中的部分为线性模型,计算结果在函数 h ( ) h() h()的作用下,做二值化转换,函数 h ( ) h() h()的定义为:

h = 1 1 + e − t h= \frac{1}{1+e^{-t}} h=1+et1

t = w T x + b \quad t=w^Tx+b t=wTx+b

该函数称为 Sigmoid 函数(又称逻辑函数),能将 ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)的值映射到 ( 0 , 1 ) (0, 1) (0,1)之间,其图像为:

在这里插入图片描述

可以设定一个阈值(例如 0.5),当函数的值大于阈值时,分类结果为 1;当函数值小于阈值时,分类结果为 0。也可以根据实际情况调整这个阈值。

1.3 分类问题的损失函数

对于回归问题,可以使用均方差作为损失函数,对于分类问题,如何度量预测值与真实值之间的差异?分类问题采用交叉熵作为损失函数,当只有两个类别时,交叉熵表达式为:

E ( y , y ^ ) = − [ y   l o g ( y ^ ) + ( 1 − y ) l o g ( 1 − y ^ ) ] E(y, \hat{y}) = -[y \ log(\hat{y}) + (1-y)log(1-\hat{y})] E(y,y^)=[y log(y^)+(1y)log(1y^)]

其中,y 为真实值, y ^ \hat{y} y^为预测值。

  • y = 1 y=1 y=1时,预测值 y ^ \hat{y} y^越接近于 1, l o g ( y ^ ) log(\hat{y}) log(y^)越接近于 0,损失函数值越小,表示误差越小,预测的越准确;当预测时 y ^ \hat{y} y^接近于 0 时, l o g ( y ^ ) log(\hat{y}) log(y^)接近于负无穷大,加上符号后误差越大,表示越不准确;
  • y = 0 y=0 y=0时,预测值 y ^ \hat{y} y^越接近于 0, l o g ( 1 − y ^ ) log(1-\hat{y}) log(1y^)越接近于 0,损失函数值越小,表示误差越小,预测越准确;当预测值 y ^ \hat{y} y^接近于 1 时, l o g ( 1 − y ^ ) log(1-\hat{y}) log(1y^)接近于负无穷大,加上符号后误差越大,表示越不准确.

2. 逻辑回归实现

sklearn 中,逻辑回归相关 API 如下:

# 创建模型
# solver参数:逻辑函数中指数的函数关系(liblinear表示线性关系)
# C参数:正则强度,越大拟合效果越小,通过调整该参数防止过拟合
model = lm.LogisticRegression(solver='liblinear', C=1)

# 训练
model.fit(x, y)

# 预测
pred_y = model.predict(x)

以下是使用 sklearn 库提供的逻辑分类器(LogisticRegression)实现的代码:

# 逻辑分类器示例
import numpy as np
import sklearn.linear_model as lm
import matplotlib.pyplot as mp

x = np.array([[3, 1], [2, 5], [1, 8], [6, 4],
              [5, 2], [3, 5], [4, 7], [4, -1]])
y = np.array([0, 1, 1, 0, 0, 1, 1, 0])

# 创建逻辑分类器对象
model = lm.LogisticRegression()
model.fit(x, y)  # 训练

# 预测
test_x = np.array([[3, 9], [6, 1]])
test_y = model.predict(test_x)  # 预测
print(test_y)

# 计算显示坐标的边界
left = x[:, 0].min() - 1
right = x[:, 0].max() + 1
buttom = x[:, 1].min() - 1
top = x[:, 1].max() + 1

# 产生网格化矩阵
grid_x, grid_y = np.meshgrid(np.arange(left, right, 0.01),
                             np.arange(buttom, top, 0.01))

print("grid_x.shape:", grid_x.shape)
print("grid_y.shape:", grid_y.shape)

# 将x,y坐标合并成两列
mesh_x = np.column_stack((grid_x.ravel(), grid_y.ravel()))
print("mesh_x.shape:", mesh_x.shape)

# 根据每个点的xy坐标进行预测,并还原成二维形状
mesh_z = model.predict(mesh_x)
mesh_z = mesh_z.reshape(grid_x.shape)

mp.figure('Logistic Regression', facecolor='lightgray')
mp.title('Logistic Regression', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.pcolormesh(grid_x, grid_y, mesh_z, cmap='gray')
mp.scatter(x[:, 0],  # 样本x坐标
           x[:, 1],  # 样本y坐标
           c=y, cmap='brg', s=80)
mp.scatter(test_x[:, 0], test_x[:, 1], c="red", marker='s', s=80)
mp.show()

"""
[1 0]
grid_x.shape: (1100, 700)
grid_y.shape: (1100, 700)
mesh_x.shape: (770000, 2)
"""

执行结果:

在这里插入图片描述

3. 多分类实现

逻辑回归产生两个分类结果,可以通过多个二元分类器实现多元分类(一个多元分类问题转换为多个二元分类问题)。如有以下样本数据:

特征 1特征 2特征 3实际类别
x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3A
x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3B
x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3C

进行以下多次分类,得到结果:

第一次:分为 A 类(值为 1)和非 A 类(值为 0)

第二次:分为 B 类(值为 1)和非 B 类(值为 0)

第三次:分为 C 类(值为 1)和非 C 类(值为 0)

……

以此类推。

利用逻辑分类器实现多元分类示例代码如下:

# 多元分类器示例
import numpy as np
import sklearn.linear_model as lm
import matplotlib.pyplot as mp

# 输入
x = np.array([[4, 7],
              [3.5, 8],
              [3.1, 6.2],
              [0.5, 1],
              [1, 2],
              [1.2, 1.9],
              [6, 2],
              [5.7, 1.5],
              [5.4, 2.2]])
# 输出(多个类别)
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])

# 创建逻辑分类器对象
model = lm.LogisticRegression(C=200) # 调整该值为1看效果
model.fit(x, y)  # 训练

# 坐标轴范围
left = x[:, 0].min() - 1
right = x[:, 0].max() + 1
h = 0.005

buttom = x[:, 1].min() - 1
top = x[:, 1].max() + 1
v = 0.005

grid_x, grid_y = np.meshgrid(np.arange(left, right, h),
                             np.arange(buttom, top, v))

mesh_x = np.column_stack((grid_x.ravel(), grid_y.ravel()))
mesh_z = model.predict(mesh_x)
mesh_z = mesh_z.reshape(grid_x.shape)

# 可视化
mp.figure('Logistic Classification', facecolor='lightgray')
mp.title('Logistic Classification', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.pcolormesh(grid_x, grid_y, mesh_z, cmap='gray')
mp.scatter(x[:, 0], x[:, 1], c=y, cmap='brg', s=80)
mp.show()

执行结果:

在这里插入图片描述

4. 总结

  • 逻辑回归是分类问题,用于实现二分类问题

  • 实现方式:利用线性模型计算,在逻辑函数作用下产生分类

  • 多分类实现:可以将多分类问题转化为二分类问题实现

  • 用途:广泛用于各种分类问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1330778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过使用Gromacs和MM-PBSA计算结合能

关键词:Gromacs、MM-PBSA、结合能、受体、配体 当前,Gromacs已经被广泛应用在生物,材料等领域的模拟计算,其便捷、灵活等特点受到广泛研究人员的青睐。在模拟领域,至关重要的一类问题是计算体系内的自由能。例如两个蛋…

【智慧办公】如何让智能会议室的电子标签实现远程、批量更新信息?东胜物联网硬件网关让解决方案更具竞争力

近年来,为了减少办公耗能、节能环保、降本增效,越来越多的企业开始从传统的办公模式转向智慧办公。 以智能会议室为例,会议是企业业务中不可或缺的一部分,但在传统办公模式下,一来会议前行政人员需要提前准备会议材料…

S7-1200/1500(T) 通过功能块FB38051实现 SINAMICS S200 的 EPOS 基本定位控制

SINAMICS S200 PN 是西门子推出的新一代伺服驱动系统。SINAMICS S200 将与 SIMOTICS S-1FL2伺服电机、Motion Connect 350/380 电缆相结合,作为新型单轴 AC/AC 伺服系统,增强了西门子伺服驱动产品的竞争力并扩大了西门子在标准伺服市场的产品组合覆盖范围…

HTML---浮动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.常见的网页布局 二.标准文档流 标准文档流常见标签 标准文档流的组成 块级元素<div…

Plantuml之对象图语法介绍(十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

什么是多域名证书?

多域名证书是一种SSL/TLS证书&#xff0c;允许在同一证书中添加多个域名。这些域名可以是不同的主机名或完全不同的域。传统的SSL证书通常只能用于一个域名&#xff0c;而多域名证书的引入使得一个证书可以涵盖多个域&#xff0c;为多站点的管理提供了便利。 多域名证书的优势 …

开启虚拟与现实的融合时代

数字人直播&#xff0c;作为一项新兴技术&#xff0c;正逐渐改变着我们的生活方式和沟通方式。它通过利用最先进的人工智能技术&#xff0c;使得虚拟形象得以与现实世界实时互动&#xff0c;为用户带来了全新的体验。本文将探讨数字人直播的意义、应用场景以及可能带来的影响。…

如何通过UMC配置外围组件

随着云计算技术的不断发展&#xff0c;在信息化建设模式上云是大势所趋。对于企业而言&#xff0c;已建立的内部集成并不能支撑其快速搭建开发环境、快速部署集群服务&#xff0c;并且动态水平扩展对多组织情况许可费用高昂、没有敏捷快速迭代机制&#xff0c;导致开发完毕就落…

MySQL部署之yum安装

MySQL https://www.mysql.com //mysql官网 yum安装步骤 yum安装 清理环境 [rootmysql ~]# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -yuserdel -r mysql[rootmysql ~]# rm -rf /etc/my* && rm -rf /var/lib/mysql && rm -rf /use/bin/m…

【LeetCode刷题笔记】前缀树

208. 实现 Trie (前缀树) 解题思路: 1. 前缀树 Map实现 ,使用一个 Map<Character, Trie> 来存储 每个字符 对应的 若干子节点 ,在构造函数中初始化 根节点 root 为 当前对象实例 , 在 插入

一文掌握分布式锁:Mysql/Redis/Zookeeper实现

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

羊大师解答,小孩是喝羊奶好还是牛奶好

小孩是喝羊奶还是牛奶好&#xff0c;这是一个经常让父母头疼的问题。羊奶和牛奶都是优质的乳制品&#xff0c;含有丰富的蛋白质、钙和维生素等营养成分&#xff0c;对小孩的生长发育都有重要作用。然而&#xff0c;从营养角度来看&#xff0c;两者还是有一些差异的。 羊奶和牛…

Netty 与 RPC(一)

Netty 与 RPC Netty 原理 Netty 是一个高性能、异步事件驱动的 NIO 框架&#xff0c;基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP 和文件传输的支持&#xff0c;作为一个异步 NIO 框架&#xff0c;Netty 的所有 IO 操作都是异步非阻塞的&#xff0c;通过 Future-List…

Python程序设计 前言:Python最全面的知识体系都在这里了

文章目录 Python最全面的知识体系学会Python后,可以选择什么岗位的工作?Python最全面的知识体系 Python 是一种广泛使用的高级编程语言,以其清晰的语法和强大的功能而闻名。Python 知识体系可以大致分为以下几个部分: 基础语法: 变量和数据类型:了解 Python 中的基本数据…

信息安全等级保护的定义与意义

目录 前言 信息安全等级保护定义 广义上 狭义上 技术和管理 信息安全的基本要素 信息安全等级保护的意义 当前形式 形式严峻 国家安全 三个基本一个根本 预期目标 最终效果 实际意义 前言 信息安全等级保护是对信息和信息载体按照重要性等级分级进行保护的一种…

百度百科如何创建品牌词条?

你知道一个初创品牌想要打响知名度有多难吗&#xff1f;花费金钱去投广&#xff0c;结果往往石沉大海&#xff0c;人们越来越有品牌意识&#xff0c;买手机、买电脑、买化妆品先要看牌子&#xff0c;买品牌的会更有面子。所以品牌没有名气&#xff0c;真的举步维艰。 百度百科…

【大数据】NiFi 中的 Controller Service

NiFi 中的 Controller Service 1.Service 简介1.1 Controller Service 的配置1.1.1 SETTING 基础属性1.1.2 PROPERTIES 使用属性1.1.3 COMMENT 页签 1.2 Service 的使用范围 2.全局参数配置3.DBCPConnectionPool 的使用样例4.在 ExcuseGroovyScript 组件中使用 Service 1.Servi…

面试题:什么是脚手架?为什么需要脚手架?常用的脚手架有哪些?

文章目录 前言脚手架介绍什么是脚手架 为什么需要脚手架不要重新造轮子 常用脚手架Vue框架MavenNettyJava EE 前言 微服务本身是一种架构风格&#xff0c;也是指导组织构建软件的一系列最佳实践集合。然而&#xff0c;业务团队在拆分应用后&#xff0c;会产生更多细粒度服务&a…

KingbaseV8R6单实例定时全量备份步骤

此场景为单机数据库节点内部备份&#xff0c;方便部署和操作&#xff0c;但备份REPO与数据库实例处于同一个物理主机&#xff0c;冗余度较低。 前期准备 配置ksql免密登录(必须) 在Kingbase数据库运行维护中&#xff0c;经常用到ksql工具登录数据库&#xff0c;本地免密登录…

@z-utils组 重构和自动化实现

highlight: monokai theme: github 包简介 z-utils组 是一个可以在vue/react/pure js 中使用的工具包&#xff0c;它包含三个子类&#xff0c;分别为 z-utils/base, z-utils/react, z-utils/vue 三个分别在不同区域使用。 他是原 zzy-javascript-devtools 的重构版本&#xf…