机器学习:逻辑回归与混淆矩阵

article/2025/8/12 14:30:46

本文目录:

  • 一、逻辑回归Logistic Regression
  • 二、混淆矩阵
    • (一)精确率precision
    • (二)召回率recall
    • (三)F1-score:了解评估方向的综合预测能力
    • (四)Roc曲线
    • (五)Auc面积

一、逻辑回归Logistic Regression

基本思想:逻辑回归的假设函数: h(w) = sigmoid(wx + b ),线性回归的输出,作为逻辑回归的输入;逻辑回归特别适用于二分类问题,也可以用于多分类问题的处理。

• 具体流程

  1. 利用线性模型 f(x) = wx + b 根据特征的重要性计算出一个值;
  2. 再使用 sigmoid 函数将 f(x) 的输出值映射为概率值;
  3. 设置阈值,进行判定。比如针对二分类问题,如果输出概率值大于阈值(eg: 0.5),则将未知样本输出为一类(eg: 1 类);否则输出为另一类(eg: 0 类)。

代码如下:

例:
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScalerdef dm01_LogisticRegression():# 1. 获取数据.data = pd.read_csv('data/breast-cancer-wisconsin.csv')data.info()# 2. 数据预处理.# data = data.replace(to_replace='?', value=np.NAN)data = data.replace('?', np.NaN)data = data.dropna()data.info()# 3. 确定特征值和目标值.x = data.iloc[:, 1:-1]y = data.Classprint(f'x.head(): {x.head()}')print(f'y.head(): {y.head()}')# 3. 分割数据.x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=21)# 4. 特征处理.transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 5. 模型训练.estimator = LogisticRegression()estimator.fit(x_train, y_train)# 6. 模型预测y_predict = estimator.predict(x_test)print(f'预测值: {y_predict}')# 7. 模型评估print(f'准确率: {estimator.score(x_test, y_test)}')print(f'准确率: {accuracy_score(y_test, y_predict)}')if __name__ == '__main__':dm01_LogisticRegression()

二、混淆矩阵

在这里插入图片描述

(一)精确率precision

精确率也叫做查准率,指的是对正例样本的预测准确率。
在这里插入图片描述
例子:**

样本集中有 6 个恶性肿瘤样本,4 个良性肿瘤样本,我们假设恶性肿瘤为正例,则:

模型 A: 预测对了 3 个恶性肿瘤样本,4 个良性肿瘤样本

  1. 真正例 TP 为:3
  2. 伪反例 FN 为:3
  3. 假正例 FP 为:0
  4. 真反例 TN:4
  5. 精准率:3/(3+0) = 100%

模型 B: 预测对了 6 个恶性肿瘤样本,1个良性肿瘤样本

  1. 真正例 TP 为:6
  2. 伪反例 FN 为:0
  3. 假正例 FP 为:3
  4. 真反例 TN:1
  5. 精准率:6/(6+3) = 67%

(二)召回率recall

召回率也叫做查全率,指的是预测为真正例样本占所有真实正例样本的比重。
在这里插入图片描述
例子:**

样本集中有 6 个恶性肿瘤样本,4 个良性肿瘤样本,我们假设恶性肿瘤为正例,则:

模型 A: 预测对了 3 个恶性肿瘤样本,4 个良性肿瘤样本

  1. 真正例 TP 为:3
  2. 伪反例 FN 为:3
  3. 假正例 FP 为:0
  4. 真反例 TN:4
  5. 精准率:3/(3+0) = 100%
  6. 召回率:3/(3+3)=50%

模型 B: 预测对了 6 个恶性肿瘤样本,1个良性肿瘤样本

  1. 真正例 TP 为:6
  2. 伪反例 FN 为:0
  3. 假正例 FP 为:3
  4. 真反例 TN:1
  5. 精准率:6/(6+3) = 67%
  6. 召回率:6/(6+0)= 100%

(三)F1-score:了解评估方向的综合预测能力

在这里插入图片描述

(四)Roc曲线

ROC 曲线

  1. 正样本中被预测为正样本的概率,即:TPR (True Positive Rate)
  2. 负样本中被预测为正样本的概率,即:FPR (False Positive Rate)

以FPR为横坐标,TPR为纵坐标,描出不同阈值下的点所形成的曲线就是Roc曲线。
在这里插入图片描述

(五)Auc面积

Auc面积:

AUC 是 ROC 曲线下面的面积,该值越大,则模型的辨别能力就越强。AUC 范围在 [0, 1] 之间,主要用来判断模型对正例和负例的辨别能力。

图像越靠近 (0, 1) 点则 ROC 曲线下面的面积就会越大,对正负样本的辨别能力就越强;当 AUC= 1 时,该模型被认为是完美的分类器,但是几乎不存在完美分类器。

例:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, roc_auc_score# 1. 定义函数, 表示: 数据基本处理
def dm01_数据基本处理():# 1. 读取数据, 查看数据的基本信息.churn_pd = pd.read_csv('data/churn.csv')# churn_pd.info()# print(f'churn_pd.describe(): {churn_pd.describe()}')# print(f'churn_pd: {churn_pd}')# 2. 处理类别型的数据, 类别型数据做 one-hot编码(热编码).churn_pd = pd.get_dummies(churn_pd)churn_pd.info()# print(f'churn_pd: {churn_pd}')# 3. 去除列 Churn_No, gender_Malechurn_pd.drop(['Churn_No', 'gender_Male'], axis=1, inplace=True)  # 按列删除print(f'churn_pd: {churn_pd}')# 4. 列标签重命名, 打印列名churn_pd.rename(columns={'Churn_Yes': 'flag'}, inplace=True)print(f'列名: {churn_pd.columns}')# 5. 查看标签的分布情况 0.26用户流失value_counts = churn_pd.flag.value_counts()print(value_counts)# 2. 定义函数, 表示: 特征筛选
def dm02_特征筛选():# 1. 读取数据churn_pd = pd.read_csv('data/churn.csv')# 2. 处理类别型的数据, 类别型数据做 one-hot编码(热编码).churn_pd = pd.get_dummies(churn_pd)# 3. 去除列 Churn_No, gender_Malechurn_pd.drop(['Churn_No', 'gender_Male'], axis=1, inplace=True)# 4. 列标签重命名churn_pd.rename(columns={'Churn_Yes': 'flag'}, inplace=True)# 5. 查看标签的分布情况value_counts = churn_pd.flag.value_counts()print(value_counts)# 6. 查看Contract_Month 是否预签约流失情况sns.countplot(data=churn_pd, x='Contract_Month', hue='flag')plt.show()# 3. 定义函数, 表示: 模型训练 和 评测
def dm03_模型训练和评测():# 1. 读取数据churn_pd = pd.read_csv('data/churn.csv')# 2. 数据预处理# 2.1 处理类别型的数据, 类别型数据做 one-hot编码(热编码).churn_pd = pd.get_dummies(churn_pd)# 2.2 去除列 Churn_No, gender_Malechurn_pd.drop(['Churn_No', 'gender_Male'], axis=1, inplace=True)# 2.3 列标签重命名churn_pd.rename(columns={'Churn_Yes': 'flag'}, inplace=True)# 3. 特征处理.# 3.1 提取特征和标签x = churn_pd[['Contract_Month', 'internet_other', 'PaymentElectronic']]y = churn_pd['flag']# 3.2 训练集和测试集的分割x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=21)# 4. 模型训练.estimator = LogisticRegression()estimator.fit(x_train, y_train)# 5. 模型预测y_predict = estimator.predict(x_test)print(f'预测结果: {y_predict}')# 6. 模型评估print(f'准确率: {accuracy_score(y_test, y_predict)}')print(f'准确率: {estimator.score(x_test, y_test)}')# 计算AUC值.print(f'AUC值: {roc_auc_score(y_test, y_predict)}')if __name__ == '__main__':# dm01_数据基本处理()# dm02_特征筛选()dm03_模型训练和评测()

今天的分享到此结束。


http://www.hkcw.cn/article/kjklfdvRuK.shtml

相关文章

Spring是如何实现属性占位符解析

Spring属性占位符解析 核心实现思路1️⃣ 定义占位符处理器类2️⃣ 处理 BeanDefinition 中的属性3️⃣ 替换具体的占位符4️⃣ 加载配置文件5️⃣ Getter / Setter 方法 源码见:mini-spring 在使用 Spring 框架开发过程中,为了实现配置的灵活性&#xf…

继承与多态

继承与多态的分析 继承继承与访问限定比较派生类和基类关系派生类的构造顺序基类对象(指针)派生类对象(指针)的转换重载和隐藏 虚函数静态绑定与动态绑定指针调用其他调用的绑定方式虚函数实现的依赖 多态 继承 继承的本质&#…

API异常信息如何实时发送到钉钉

#背景 对于一些重要的API,开发人员会非常关注API有没有报错,为了方便开发人员第一时间获取错误信息,我们可以使用插件来将API报错实时发送到钉钉群。 接下来我们就来实操如何实现 #准备工作 #创建钉钉群 如果已有钉钉群,可以跳…

Amazon GameLift实战指南:低成本构建高并发全球游戏服务器架构

一、为什么游戏服务器需要GameLift? 行业痛点 传统自建服务器:扩容慢、DDoS防御弱、全球延迟不均 开源解决方案(如Agones):运维成本高、需K8s深度知识 云虚拟机手动扩缩容:响应延迟导致玩家流失 GameLi…

2025安装与配置archlinux很详细

不知不觉,距离上次安装archlinux已经2年多了。我又打算把archlinux作为主力机使用了。 以前也写过一些类似的文章,有一些不变的内容,我直接从原来的文章中复制了(包括截图)。 《2021年vmware安装archlinux》 https:/…

字节golang后端二面

前端接口使用restful格式,post与get的区别是什么? HTTP网络返回的状态码有哪些? go语言切片与数组的区别是什么? MySQL实现并发安全避免两个事务同时对一个记录写操作的手段有哪些? 如何实现业务的幂等性(在…

MyBatis03——SpringBoot整合MyBatis

目录 一、springboot整合mybatis 二、搭建环境 1、引入jar包 2、配置文件 3、准备控制层、业务层、持久层 4、SQLMapper文件 ​编辑 三、动态sql 四、分页 4.1逻辑分页 4.2物理分页 4.2.1引入分页插件在pom.xml 4.2.2使用分页插件 五、事务 编程式事务 声明式事…

【linux】知识梳理

操作系统的分类 1. 桌⾯操作系统: Windows/macOS/Linux 2. 移动端操作系统: Android(安卓)/iOS(苹果) 3. 服务器操作系统: Linux/Windows Server 4. 嵌⼊式操作系统: Android(底层是 Linux) Liunx介绍 liunx系统:服务器端最常见的操作系统类型 发行版:Centos和Ubuntu 远程连接操…

计算机网络第1章(上):网络组成与三种交换方式全解析

目录 一、计算机网络的概念二、计算机网络的组成和功能2.1 计算机网络的组成2.2 计算机网络的功能 三、电路交换、报文交换、分组交换3.1 电路交换(Circuit Switching)3.2 报文交换(Message Switching)3.3 分组交换(Pa…

经典面试题:一文了解常见的缓存问题

在面试过程中,面试官的桌子上摆放着很多高频的面试题,能否顺利回答决定了你面试通过的概率。其中缓存问题就是其中的一份,可以说掌握缓存问题及解决方法是面试前必须准备的内容。那么缓存有什么典型的问题,出现的原因是什么&#…

Python Turtle实战:打造高精度图形化秒表

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…

Python实现P-PSO优化算法优化卷积神经网络CNN回归模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 随着人工智能和深度学习技术的快速发展,卷积神经网络(CNN)在图像分类、目标检测…

OVD开放词汇检测 Detic 训练COCO数据集实践

0、引言 纯视觉检测当前研究基本比较饱和,继续创新提升空间很小,除非在CNN和transformer上提出更强基础建模方式。和文本结合是当前的一大趋势,也是计算机视觉和自然语言处理结合的未来趋势,目前和文本结合的目标检测工作还是有很…

leetcode0404. 左叶子之和-easy

1 题目:左叶子之和 官方标定难度:易 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15&#…

PINNs案例——二维磁场计算

基于物理信息的神经网络是一种解决偏微分方程计算问题的全新方法… 有关PINN基础详见:PINNs案例——中心热源温度场预测问题的torch代码 今日分享代码案例:二维带电流源磁场计算 该案例参考学习论文:[1]张宇娇,孙宏达&#xff0…

历年西安邮电大学计算机保研上机真题

历年西安邮电大学计算机保研上机真题 2025西安邮电大学计算机保研上机真题 2024西安邮电大学计算机保研上机真题 2023西安邮电大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 狗剩游泳 题目描述 酷暑难耐,好消息传来,毛…

【算法题】算法一本通

每周更新至完结,建议关注收藏点赞。 目录 待整理文章已整理的文章方法论数组与哈希表栈双指针(滑动窗口、二分查找、链表)树前缀树堆 优先队列(区间/间隔问题、贪心 )回溯图一维DP位操作数学与几何学二维DP随缘更新&a…

Spring如何实现组件扫描与@Component注解原理

Spring如何实现组件扫描与Component注解原理 注解配置与包扫描的实现机制一、概述:什么是注解配置与包扫描?二、处理流程概览三、注解定义ComponentScope 四、核心代码结构1. ClassPathScanningCandidateComponentProvider2. ClassPathBeanDefinitionSca…

NLP学习路线图(十六):N-gram模型

一、为何需要语言模型?概率视角下的语言本质 自然语言处理的核心挑战在于让机器“理解”人类语言。这种理解的一个关键方面是处理语言的歧义性、创造性和结构性。语言模型(Language Model, LM)为此提供了一种强大的数学框架:它赋…

使用ReactNative加载HarmonyOS Svga动画

这是一款使用ReactNative 加载HarmonyOS Svga动画的播放器插件 三端Svga动画统一使用点击这里 版本:v1.1.2 react-native-ohos-svgaplayer [!TIP] Github 地址 安装与使用 npm npm install react-native-ohos-svgaplayer yarn yarn add react-native-ohos-svgaplayer下面…