逻辑回归(sigmoid函数、混淆矩阵、精确率召回率F1)

目录

一、概述

1、逻辑回归

2、激活函数  sigmoid函数

3、最大似然估计

二、逻辑回归

1、原理

2、损失函数

3、代码

三、混淆矩阵

1、定义

2、举例

3、代码

四、分类评估方法

1、精确率(Precision)

2、召回率(Recall)

3、F1(score)

4、代码

五、ROC曲线、AUC指标

1、ROC曲线

2、ROC 曲线图像中,4 个特殊点的含义

3、案例:ROC 曲线的绘制

4、AUC指标:曲线下面积

六、每日回顾

一、概述

1、逻辑回归

        逻辑回归是一种广泛应用于分类任务的统计模型,尤其擅长解决二分类问题(例如预测邮件是否为垃圾邮件、客户是否会购买产品等)。它通过逻辑函数(如Sigmoid函数)将线性回归的输出映射到[0,1]区间,从而得到事件发生的概率。尽管名称中包含"回归",但它实际上是一种分类算法。        

原理:把线性函数的输出作为激活函数输入,设置阈值完成分类

2、激活函数  sigmoid函数

        Sigmoid函数(也叫Logistic函数)是机器学习和神经网络中一个非常经典的非线性函数。它的核心作用是将任意实数输入映射到(0,1)区间,这个特性使其特别适合处理概率和二分类问题。

作用:把(-∞, +∞) 映射到 (0, 1),增加模型的非线性因素

单调递增函数,拐点在x=0,y=0.5(可自定义)的位置

导函数公式:

优点​​:

        输出概率解释​​:其输出值在(0,1)区间,天然适合解释为概率

        平滑可导​​:函数全程平滑且易于求导,便于在其基础上进行梯度下降等优化算法

缺点​​:

        梯度消失​​:当输入值的绝对值较大时(对应输出接近0或1),其导数会趋近于0。在深层神经网络中,这可能导致梯度在反向传播过程中逐渐变小并消失,使得网络训练困难

        输出非零中心​​:Sigmoid函数的输出恒为正值。这可能导致在训练过程中,权重更新时产生“之”字形抖动,收敛速度变慢

        计算成本​​:涉及指数运算(e^{-x}),计算量较大

3、最大似然估计

根据观测到的结果来估计模型算法中的未知参数

最大似然估计的基本原理是​​“既然事件已经发生,就假设它的发生概率是最大的”​​。这是一种在已知结果的前提下,反向推测最可能的原因(参数)的思维方式。

例子:

假设有一枚不均匀的硬币,出现正面的概率和反面的概率是不同的。假定出现正面的概率为𝜃

抛了6次得到如下现象 D = {正面,反面,反面,正面,正面,正面}。每次投掷事件都是相互独立的。则根据产生的现象D,来估计参数𝜃是多少?

f(𝜃) = θ⁴(1−θ)² 令导数=0求极值,可估计出𝜃值

二、逻辑回归

1、原理

​​        利用一个线性回归模型的计算结果,再通过一个Sigmoid激活函数,将这个结果映射到0到1之间,将其解释为“属于某个类的概率”​​。

把线性回归的输出,作为逻辑回归的输入

2、损失函数

损失函数的工作原理:每个样本预测值有A、B两个类别,真实类别对应的位置,概率值越大越好

3、代码

import pandas as pd
import numpy as np
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScalerdata = pd.read_csv("breast-cancer-wisconsin.csv")
print('清洗前数据集大小为:',data.shape)
# 数据清洗处理
# 将数据中的问号("?")替换为NaN值,然后删除包含NaN值的行
# 这样可以清理掉无效或缺失的数据记录
data = data.replace(to_replace="?", value=np.nan)
data = data.dropna()
print('清洗后数据集大小为:', data.shape)# x = data[data.columns[1:-1]]
x = data.iloc[:, 1:-1]
y = data['Class']
X_train, X_test, y_train, y_test = (train_test_split(x, y, test_size=0.2, random_state=22))transfor = StandardScaler()
X_train = transfor.fit_transform(X_train)
X_test = transfor.transform(X_test)es = LogisticRegression()
es.fit(X_train, y_train)y_predict = es.predict(X_test)
print('预测结果:\n', y_predict)
acc = accuracy_score(y_test, es.predict(X_test))
print('准确率:', acc)

三、混淆矩阵

1、定义

真实值是 正例 的样本中,被分类为 正例 的样本数量有多少,叫做真正例(TP,True Positive)
真实值是 正例 的样本中,被分类为 假例 的样本数量有多少,叫做伪反例(FN,False Negative)
真实值是 假例 的样本中,被分类为 正例 的样本数量有多少,叫做伪正例(FP,False Positive)
真实值是 假例 的样本中,被分类为 假例 的样本数量有多少,叫做真反例(TN,True Negative)

2、举例

已知:样本集10样本,有 6 个恶性肿瘤样本,4 个良性肿瘤样本,我们假设恶性肿瘤为正
模型A:预测对了 3 个恶性肿瘤样本,4 个良性肿瘤样本,计算:TP、FN、FP、TN

真正例 TP 为:3         伪反例 FN 为:3

伪正例 FP 为:0        真反例 TN 为:4

3、代码

from sklearn.metrics import confusion_matrix
import pandas as pd# 已知:样本集10个样本,有 6个恶性肿瘤样本,4个良性肿瘤样本,我们假设恶性肿瘤为正
# 1、定义真实数据值,手动设置正反例
y_train = ['恶性', '恶性', '恶性', '恶性', '恶性', '恶性','良性', '良性', '良性', '良性']label = ['恶性', '良性']  # 样本标签,标签1为正例,标签2为反例
df_label = ['恶性(正例)', '良性(假例)']# 2、定义预测数据集,手动设置正反例
y_pred_A = ['恶性', '恶性', '恶性','良性', '良性', '良性', '良性', '良性', '良性', '良性']# 3、计算混淆矩阵
# 参数1:真实值,参数2:预测值,参数3:标签
cm_A = confusion_matrix(y_train, y_pred_A, labels=label)
print(f"混淆矩阵为:\n{cm_A}")# 4、将混淆矩阵转为DataFrame
# 参数1:矩阵,参数2:行标签,参数3:列标签
df_cm_A = pd.DataFrame(cm_A, index=df_label, columns=df_label)
print(f"混淆矩阵为:\n{df_cm_A}")y_pred_b = ['恶性', '恶性', '恶性','恶性', '恶性', '恶性','恶性', '恶性', '恶性','良性']
cm_b = confusion_matrix(y_train, y_pred_b, labels=label)
df_cm_b = pd.DataFrame(cm_b, index=df_label, columns=df_label)
print(f"混淆矩阵为:\n{df_cm_b}")

运行结果

四、分类评估方法

1、精确率(Precision)

查准率,对预测的正例样本准确率。比如:把恶性肿瘤当做正例样本,想知道模型对恶性肿瘤的预测准确率。

2、召回率(Recall)

也叫查全率,指的是预测为真正例样本占所有真实正例样本的比重。

3、F1(score)

若对模型的精度、召回率都有要求,希望知道模型在这两个评估方向的综合预测能力

4、代码

from sklearn.metrics import recall_score, f1_score
from sklearn.metrics import precision_score
y_train = ['恶性', '恶性', '恶性', '恶性', '恶性', '恶性','良性', '良性', '良性', '良性']
y_pred_A = ['恶性', '恶性', '恶性','良性', '良性', '良性', '良性', '良性', '良性', '良性']
y_pred_b = ['恶性', '恶性', '恶性','恶性', '恶性', '恶性','恶性', '恶性', '恶性','良性']
def dm01_precision():result1 = precision_score(y_train, y_pred_A, pos_label='恶性')print('模型A的精确率:', result1)result2 = precision_score(y_train, y_pred_b, pos_label='恶性')print('模型B的精确率:', result2)
def dm02_Recall():result1 = recall_score(y_train, y_pred_A, pos_label='恶性')print('模型A的召回率:', result1)result2 = recall_score(y_train, y_pred_b, pos_label='恶性')print('模型B的召回率:', result2)
def dm03_F1():result1 = f1_score(y_train, y_pred_A, pos_label='恶性')print('模型A的F1:', result1)result2 = f1_score(y_train, y_pred_b, pos_label='恶性')print('模型B的F1:', result2)
if __name__ == '__main__':dm01_precision()dm02_Recall()dm03_F1()

五、ROC曲线、AUC指标

1、ROC曲线

​​ROC曲线​​(Receiver Operating Characteristic Curve,受试者工作特征曲线)是一种图形化工具,用于展示二分类模型在不同分类阈值下的性能表现。它的​​横轴是假阳性率(FPR, False Positive Rate)​​,​​纵轴是真阳性率(TPR, True Positive Rate)​​。

​​真阳性率 (TPR)​​,也称为​​召回率(Recall)​​或​​灵敏度(Sensitivity)​​,计算公式为:TPR = TP / (TP + FN)。它表示​​实际为正例的样本中,被模型正确预测为正例的比例​​。

​​假阳性率 (FPR)​​,计算公式为:FPR = FP / (FP + TN)。它表示​​实际为负例的样本中,被模型错误预测为正例的比例。

2、ROC 曲线图像中,4 个特殊点的含义

3、案例:ROC 曲线的绘制

会得出不同阈值下的点坐标:(0, 0)、(0, 0.5)、(0, 1)、(0.25, 1)、(0.5, 1)、(0.75, 1)

则由 TPR 和 FPR 构成的 ROC 图像为

4、AUC指标:曲线下面积

​​AUC​​(Area Under the Curve)则是​​ROC曲线下的面积​​,用于量化模型的整体分类性能。AUC的取值范围在0到1之间。

ROC曲线的优劣可以通过曲线下的面积(AUC)来衡量,AUC越大表示分类器性能越好。​​AUC与ROC曲线​​:AUC就是这条ROC曲线下方的面积。ROC曲线越靠近左上角(即FPR越小,TPR越大),模型的性能通常越好,其AUC值也更接近1。

        当AUC=0.5时,表示分类器的性能等同于随机猜测当
        当AUC=1时,表示分类器的性能完美,能够完全正确地将正负例分类。
      (AUC=0时也可以,完美相反地正确预测)

AUC的核心优势在于其​​对类别不平衡不敏感​​,且​​综合了模型在所有可能阈值下的表现​​。理解其​​概率解释​​(随机正样本得分高于随机负样本的概率)有助于更深刻地把握其内涵。

六、每日回顾

1:逻辑回归主要解决什么类型的问题?逻辑回归的流程是什么 ?

2:混淆矩阵的四个基本元素(TP、TN、FP、FN)分别代表什么含义?

3:精确率(Precision)、召回率(Recall)的计算公式是什么?分别反映模型的什么能力?

4:ROC 曲线的横纵轴分别是什么?曲线上的每个点代表什么含义?

5:AUC 指标的含义是什么?其取值范围是多少?AUC=0.5、AUC=1 、AUC=0分别说明模型的什么性能?

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

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

相关文章

Redis底层实现原理之五大基础结构

文章目录1. 基础结构和编码类型2. 编码类型和数据结构实现2.1 字符串(String)2.2 压缩列表(listpack)2.3 哈希表(hashtable)2.4 快速列表(quicklist)2.5 整数集合(intset…

火山引擎数据智能体DataAgent总结分享

数据的冰山:看得见的资产与看不见的鸿沟 这张图片用“冰山”类比的方式展示了数据资产管理中的可见与不可见问题,并突出了数据利用的核心挑战与潜在陷阱。 1. 冰山之上的“看得见的资产” 内容:数据库、报表、指标等结构化、显性的数据资源。 核心挑战: 需要从“采集存储”…

100种高级数据结构 (速查表)

一、 基础结构的扩展与组合 (Advanced Linear Structures) 这些结构在数组、链表、队列、栈等基础结构上增加了特定功能或约束。双端队列 (Deque - Double-Ended Queue) 介绍:允许在队列的前后两端都进行插入和删除操作的线性结构。应用场景:工作窃取算法…

一个开源的企业官网简介

简介一个完美的企业官网系统,支持手机端和电脑端展示企业风采,还可以展示企业产品/企业新闻资讯等等.普通用户PC端展示普通用户手机端展示管理后台

TCP实现线程池竞争任务

服务端&#xff1a;#include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netinet/ip.h> #include<strings.h> #include<unistd.h> #include<ctype.h> #include<arpa/inet.h&…

Redis C++ 实现笔记(F篇)

Implementing Redis in C : F Redis C 实现笔记&#xff08;F篇&#xff09; 前言 本章代码及思路均来自Build Your Own Redis with C/C 本文章只阐述我的理解想法&#xff0c;以及需要注意的地方。 本文章为续<<Implementing Redis in C : E>>所以本文章不再…

finally 与 return的执行顺序

一、第一次试验public static void main(String[] args) throws InterruptedException {System.out.println(aaa(null));}private static StringBuilder aaa(Integer i) throws InterruptedException {StringBuilder sb new StringBuilder();try {i.toString();return sb;} ca…

Git安装教程

简介 Git 是目前全球最流行的分布式版本控制系统&#xff08;Distributed Version Control System, DVCS&#xff09;&#xff0c;核心作用是追踪文件修改历史、支持多人协同开发&#xff0c;并能高效管理代码&#xff08;或任何文本类文件&#xff09;的版本迭代。它由 Linux…

Linux安装RTL8821CE无线网卡驱动

1. 查看网卡芯片$ lspci | grep Net 01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter2. 预备配套sudo apt install -y dkms git3. 下载驱动并安装git clone https://github.com/tomaspinho/rtl8821ce.git cd r…

vue3存储/获取本地或会话存储,封装存储工具,结合pina使用存储

目录 一、基本用法&#xff08;原生 API&#xff09; 1. 存储数据 2. 获取数据 3. 删除数据 二、Vue3 中封装成工具函数&#xff08;推荐&#xff09; 三、以上工具函数在 Vue3 组件中使用 1. 在选项式 API 中使用 2. 在组合式 API&#xff08;setup 语法糖&#xff09;…

【Flink】DataStream API:基本转换算子、聚合算子

目录基本转换算子映射&#xff08;map&#xff09;过滤&#xff08;filter&#xff09;扁平映射聚合算子按键分区&#xff08;keyBy&#xff09;简单聚合&#xff08;sum/min/max/minBy/maxBy&#xff09;规约聚合&#xff08;reduce&#xff09;基本转换算子 有如下POJO类用来…

从淘宝推荐到微信搜索:查找算法如何支撑亿级用户——动画可视化

本篇技术博文摘要 &#x1f31f; 本文通过动画可视化深入解析数据结构中的核心查找算法&#xff0c;从基础概念到高阶应用&#xff0c;全面覆盖顺序查找、折半查找、分块查找、B树/B树及散列查找的核心原理与实现细节。文章以动态演示为核心工具&#xff0c;直观展现算法执行过…

图像正向扭曲反向扭曲

在图像处理领域&#xff0c;正向扭曲&#xff08;Forward Warping&#xff09;和反向扭曲&#xff08;Backward Warping&#xff09;是两种核心的图像坐标映射与像素重采样技术&#xff0c;核心区别在于“像素映射的方向”——是从“原始图像”到“目标图像”&#xff0c;还是从…

【C语言】 第三课 函数与栈帧机制详解

1 函数的基本概念 在C语言中&#xff0c;函数是程序的基本执行单元。一个函数的定义包括返回类型、函数名、参数列表和函数体。例如&#xff1a; int add(int x, int y) { // 函数定义int z x y;return z; }在使用函数前&#xff0c;通常需要声明&#xff08; declaration&am…

多个大体积PDF文件怎么按数量批量拆分成多个单独文件

在现代社会中&#xff0c;电子文档在我们的身边无所不在&#xff0c;而PDF文件时我们日常接触非常多的文档类型之一。PDF由于格式稳定、兼容性好&#xff0c;因此经常被用于各行各业。但是&#xff0c;我们平时在制作或搜集PDF文件时&#xff0c;文件太大&#xff0c;传输和分享…

ansible-角色

角色 一、利用角色构造ansible playbook 随着开发更多的playbook&#xff0c;会发现有很多机会重复利用以前编写的playbook中的代码。或许&#xff0c;一个用于为某一应用配置MySQL数据库的play可以改变用途。通过利用不同的主机名、密码和用户来为另一个应用配置MySQL数据库。…

git命令行打patch

在 Git 里打 patch&#xff08;补丁&#xff09;其实就是把某些提交的改动导出来&#xff0c;生成一个 .patch 文件&#xff0c;方便别人用 git apply 或 git am 打进代码里。&#x1f539; 常用方式1. 基于提交导出 patch导出最近一次提交&#xff1a;git format-patch -1 HEA…

文华财经多空提示指标公式 变色K线多空明确指标 文华wh6赢顺多空买卖提示指标

XX:240C;YY:MA(C,1);A1:POW(XX,2)/360-POW(YY,2)/260;A5:EMA2(EMA2(A1,20),5),LINETHICK2;A6:A5*0.9999,COLORSTICK;A20:EMA2(EMA2(A5,20),5),LINETHICK2;A60:EMA2(EMA2(A20,20),5),LINETHICK2;支撑:HHV(A5,30),COLORRED;天数:BARSSINCE(A5HHV(A5,0));YL:REF(A5,1)2.79-天数*0.…

记录一个防重Toast

当我们已经对某个按钮做了防暴力点击&#xff0c;但是依然在业务上有些复杂交互的情况&#xff0c;需要我们封装一个防重Toast。针对这类情况&#xff0c;可以直接使用下面的showDebouncedToastdata class ToastInfo(val id: Any? null,val command: MediaCommandDebouncer.M…

在线测评系统---第n天

主要完成了退出登录前后的代码的实现&#xff0c;以及题目列表的查询1.退出登录前端引入了全局前置守卫&#xff0c;如果cookie里面没有token则直接跳转到login页面&#xff1b;有则直接跳转到layout页面&#xff0c;无需重新登录后端接收到退出登录&#xff0c;将token置为无效…