昨天一直在复盘梯度下降,都没咋预习逻辑回归,好在不是很难,来捋捋

逻辑回归简介

逻辑回归是解决分类问题

数学基础-sigmoid函数

还要回顾一下概率论

极大似然估计

再来看一下对数

逻辑回归原理

逻辑回归的损失函数

例子:

分类问题评估

混淆矩阵(重点)

这个得记住,不难记,按英文名记就好了:

真实结果这边两个在预测的正例中就是Ture和False

在预测的反例就是倒过来False和Ture

预测的正例就是Positive,反例Negative

所以结合一下:

真正:Ture Positive(TP)           伪假:False Negative(FN)

伪正:False Positive(FP)         真假:Ture Negative(TN)

这样去理解:

例子:

精确率(Precision)

召回率(recall)

也叫查全,指的是预测为真正例样本占所有真实正例样本的比重例如:恶性肿瘤当做正例样本,则我们想知道模型是否能把所有的恶性肿瘤患者都预测出来

计算方法P = TP+ TP/(TP+ FN)

F1-score

ROC曲线、AUC指标

真正率TPR与假正率FPR

正样本中被预测为正样本的概率TPR True Positive Rate

负样本中被预测为正样本的概率FPR False Positive Rate

通过这两个指标可以描述模型对正/负样本的分辨能力

真正率TRP(True Positive Rate

是作为ROC曲线的Y轴

假正率FPR(False Positive Rate

作X轴

ROC曲线(Receiver Operating Characteristic curve)

是一种常用于评估分类模型性能的可视化工具。ROC曲线以模型的真正率TPR为纵轴,假正率FPR为横轴,它将模型在不同阈值下的表现以曲线的形式展现出来

AUC (Area Under the ROC Curve)曲线下面积

ROC曲线的优劣可以通过曲线下的面积(AUC来衡量,AUC越大表示分类器性能越好

AUC=0.5时,表示分类器的性能等同于随机猜测

AUC=1时,表示分类器的性能完美,能够完全正确地将正负例分类。

图像中四个特殊点(顶点)的意义要稍微记一下

import pandas as pd
from sklearn.metrics import confusion_matrix,precision_score,recall_score,f1_score, roc_curve, auc
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False#todo 1、定义数据集  真实样本(10个  6个恶性  4个良性)   -》手动设置 恶性(正例) 良性(反例)
y_train=['恶性','恶性','恶性','恶性','恶性','恶性','良性','良性','良性','良性']#todo 2、 定义标签名
label=['恶性','良性']  #标签1:正样本(正例)  标签2:负样本(反例)
df_label=['恶性(正例)','良性(假例)']  #这是为了让格式好看#todo 3、定义 预测结果A   3个恶性 ,4个良性   改完后数据集  3个恶性   7个良性
y_pre_A=['恶性','恶性','恶性',     '良性','良性','良性',    '良性','良性','良性','良性']#todo 4、 把上述的预测结果A 转换为 混淆矩阵
cm_A=confusion_matrix(y_train,y_pre_A,labels=label)
# print(f"混淆矩阵A:\n{cm_A}")  #美化#todo 5、把混淆矩阵 转化为 DataFrame格式
df_A=pd.DataFrame(cm_A,index=df_label,columns=df_label)
print(f"预处结果A对应的DataFrame对象:\n{df_A}")#todo 6、 定义 预测结果B 预测对了 -》 6个恶性  1个良性
y_pre_B=['恶性','恶性','恶性','恶性','恶性','恶性','良性','恶性','恶性','恶性']
cm_B=confusion_matrix(y_train,y_pre_B,labels=label)
df_B =pd.DataFrame(cm_B,index=df_label,columns=df_label)
print(f"预处结果B对应的DataFrame对象:\n{df_B}")#总结: 混淆矩阵已经开发完成,接下来,计算他的TP\FN\FP\TN#todo 7 打印预测结果
#精确率  参1: 真实样本  参2:预测样本   参3:正例标签
print(f"预测结果A的精确率:{precision_score(y_train,y_pre_A,pos_label='恶性')}")
print(f"预测结果B的精确率:{precision_score(y_train,y_pre_B,pos_label='恶性')}")#召回率
print(f"预测结果A的召回率:{recall_score(y_train,y_pre_A,pos_label='恶性')}")
print(f"预测结果B的召回率:{recall_score(y_train,y_pre_B,pos_label='恶性')}")#F1值
print(f"预测结果A的F1值:{f1_score(y_train,y_pre_A,pos_label='恶性')}")
print(f"预测结果B的F1值:{f1_score(y_train,y_pre_B,pos_label='恶性')}")# 绘制ROC曲线
# 首先需要将标签转换为数字
y_train_num = [1 if label == '恶性' else 0 for label in y_train]
y_pre_A_num = [1 if label == '恶性' else 0 for label in y_pre_A]
y_pre_B_num = [1 if label == '恶性' else 0 for label in y_pre_B]# 为了获得更平滑的ROC曲线,我们需要生成预测概率而不是硬分类
# 这里我们模拟概率值来演示平滑的ROC曲线
np.random.seed(42)  # 为了结果可重现
y_pre_A_proba = []
for label in y_pre_A:if label == '恶性':# 对于预测为恶性的,我们生成一个相对高的恶性概率y_pre_A_proba.append(np.random.uniform(0.6, 1.0))else:# 对于预测为良性的,我们生成一个相对低的恶性概率y_pre_A_proba.append(np.random.uniform(0.0, 0.4))y_pre_B_proba = []
for label in y_pre_B:if label == '恶性':# 对于预测为恶性的,我们生成一个相对高的恶性概率y_pre_B_proba.append(np.random.uniform(0.7, 1.0))else:# 对于预测为良性的,我们生成一个相对低的恶性概率y_pre_B_proba.append(np.random.uniform(0.0, 0.3))# 计算ROC曲线
fpr_A, tpr_A, _ = roc_curve(y_train_num, y_pre_A_proba)
fpr_B, tpr_B, _ = roc_curve(y_train_num, y_pre_B_proba)# 计算AUC值
auc_A = auc(fpr_A, tpr_A)
auc_B = auc(fpr_B, tpr_B)# 绘制ROC曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr_A, tpr_A, color='blue', lw=2, label=f'预测结果A (AUC = {auc_A:.2f})')
plt.plot(fpr_B, tpr_B, color='red', lw=2, label=f'预测结果B (AUC = {auc_B:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--', label='随机猜测')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假正率 (False Positive Rate)')
plt.ylabel('真正率 (True Positive Rate)')
plt.title('ROC曲线对比')
plt.legend(loc="lower right")
plt.grid(True)
plt.show()

由于这个案例是将结果分成了几个类,而不是计算概率,所以曲线图变成了折线图,不过大家理解这个意思就好

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32----W25QXX

W25QXX款图W25QXX存储解读块--->扇-->页块分成128块一块64kb一块分成16扇一扇4kb一个扇区分成16页,页的大小是256个字节 当数据传入W25QXX最小的擦除单元是扇区当已经输入了一页的数据,这时RAM的数据会转存进FLASH,这时会置一个标志位&…

【Kafka】Kafka使用场景用例Kafka用例图

【Kafka】Kafka使用场景用例&Kafka用例图一、Kafka用例总图二、Kafka用例图示三、Kafka场景案例图一、Kafka用例总图 二、Kafka用例图示 三、Kafka场景案例图 注:以上图片来源于网络,如有不妥请私信删除!

Altium Designer(AD24)集成开发环境简介

🏡《专栏目录》 目录 1,概述 2,界面介绍 2,搜索功能简介 1,概述 Altium Designer 24的原理图,PCB等设计工作都是在集成开发环境中进行的,本文简单介绍集成开发环境界面。 2,界面介绍 如下图所示,Altium Designer 24的集成开发环境,包括: 标题栏:目前设计中文件的…

[论文阅读] 软件工程 | 告别“线程安全玄学”:基于JMM的Java类静态分析,CodeQL3分钟扫遍GitHub千仓错误

告别“线程安全玄学”:基于JMM的Java类静态分析,CodeQL3分钟扫遍GitHub千仓错误 论文信息类别详情论文原标题Scalable Thread-Safety Analysis of Java Classes with CodeQL主要作者及机构1. Bjrnar Haugstad Jatten(哥本哈根IT大学&#xff…

jQuery.ajax() 方法核心参数详解

大家好,欢迎来到程序视点!我是你们的老朋友.小二!jQuery.ajax() 方法核心参数详解基础参数url类型:String功能:请求地址,默认当前页地址。type类型:String(get/post为主,…

LCR 175. 计算二叉树的深度【简单】

LCR 175. 计算二叉树的深度【简单】 题目描述 某公司架构以二叉树形式记录,请返回该公司的层级数。 示例 1:输入:root [1, 2, 2, 3, null, null, 5, 4, null, null, 4] 输出: 4 解释: 上面示例中的二叉树的最大深度是 4,沿着路…

AI驱动健康升级:新零售企业从“卖产品”到“卖健康”的转型路径

随着健康意识的不断提升,健康管理增值服务正逐渐成为零售企业的核心竞争力。消费者对“产品服务”的需求激增,企业亟需构建覆盖健康评估、干预到跟踪的营养健康管理体系,通过数据化手段提升用户粘性。在此背景下,AI技术正推动健康…

2025年最新三维WebGIS开发学习路线图深度解析

地信小白为何学习webgis?我们在后台经常收到同学们关于地信测绘等专业的吐槽,总结后主要分为以下几类:第一种吐槽学校理论与实践脱节的,学校课程偏重理论,缺乏企业级真实项目经验,导致同学们简历空洞、单一…

15-Java-面向对象-标准JavaBean类

文章目录标准JavaBean类标准JavaBean类 类名需要见名知意成员变量使用private修饰提供至少两个构造方法 无参构造方法带全部参数的构造方法 成员方法 提供每一个成员变量对应的setXxx()/getXxx()如果还有其他行为,也需…

AI大模型应用研发工程师面试知识准备目录

一、大模型核心基础理论 大模型核心架构:Transformer(Encoder/Decoder结构、自注意力机制、多头注意力)、GPT系列(Decoder-only)、BERT系列(Encoder-only)的差异与适用场景关键技术原理&#xf…

基于单片机汽车防撞系统设计

传送门 👉👉👉👉单片机作品题目速选一览表🚀 👉👉👉👉单片机作品题目功能速览🚀 🔥更多文章戳👉小新单片机-CSDN博客&#x1f68…

《Java线程池面试全解析:从原理到实践的高频问题汇总》

线程池作为Java并发编程的核心组件,是面试中的必考知识点。无论是初级开发岗还是资深架构岗,对线程池的理解深度往往能反映候选人的并发编程能力。本文汇总了线程池相关的高频面试题,并提供清晰、深入的解答,助你轻松应对各类面试…

波特率vs比特率

一、核心定义1. 波特率(Baud Rate)定义:单位时间内传输的 “信号符号(Symbol)” 数量,单位为 “波特(Baud)”。这里的 “符号” 是通信中的基本信号单元,指信号在物理层的…

AI 生成式艺术重塑动漫角色创作:从技术逻辑到多元可能性(一)

当《蜘蛛侠:纵横宇宙》中风格迥异的角色群像惊艳银幕,当《鬼灭之刃》的 “柱” 系列角色凭借鲜明人设圈粉无数,动漫角色早已超越 “故事载体” 的属性,成为承载世界观、传递情感的核心符号。传统动漫角色创作往往依赖团队数月甚至…

npm install 报错问题解决 npm install --ignore-scripts

为避免恶意依赖包中的病毒,推荐使用npm命令时添加–ignore-scripts参数,以禁用第三方依赖包的预安装或安装后脚本。然而,某些依赖包需这些脚本才能正常工作。# 原 报错 npm install # 改为 npm install --ignore-scripts我遇到的以下2种报错都…

四个关于云属性的四个卫星数据集的介绍

一、前言 Himawari-8/9 (AHI)、Meteosat (SEVIRI)、GOES (ABI)、CLAAS-3,四个数据集/传感器,它们其实都属于静止气象卫星(GEO)云和辐射产品,在降水、云属性和能量收支研究中应用很广,AHI(亚太&a…

browser use完整梳理

brower use完整逻辑梳理 browser use的完整一次运行过程 INFO [service] Using anonymized telemetry, see https://docs.browser-use.com/development/telemetry. WARNING [Agent] ⚠️ DeepSeek models do not support use_visionTrue yet. Setting use_visionFalse for…

C/C++ 与 Lua 互相调用详解

Lua 是一门轻量级、嵌入式的脚本语言,常常与 C/C 结合使用。通过嵌入 Lua,可以让应用程序获得灵活的配置、脚本化逻辑和可扩展性。本文将介绍如何在 C/C 调用 Lua 函数,以及如何让 Lua 调用 C/C 函数。最后给出一个 完整的示例工程&#xff0…

2025-09-04 HTML2——常用标签与属性

文章目录1 文本标签1.1 标题 (<h1> - <h6>)1.2 段落 (<p>)1.3 文本格式化1.4 列表1.4.1 无序列表 (<ul>)1.4.2 有序列表 (<ol>)1.5 表格 (<table>)2 属性2.1 属性值2.2 全局属性2.3 特定元素的属性2.4 布尔属性2.5 自定义属性2.6 事件处理…

Cursor安装使用 与 Cursor网页端登录成功,客户端怎么也登陆不上

Cursor安装使用 Cursor是一款基于AI技术的智能代码编辑器&#xff0c;可通过官网&#xff08;https://cursor.sh&#xff09;下载安装(国内网直接可以访问)&#xff0c;其核心功能包括代码自动生成、智能补全和多轮对话编程&#xff0c;支持Windows、MacOS和Linux系统。‌ 1.…