0基础跟德姆(dom)一起学AI 机器学习04-逻辑回归

逻辑回归简介

应用场景

逻辑回归是解决二分类问题的利器

数学知识

sigmoid函数

概率

极大似然估计

核心思想:

设模型中含有待估参数w,可以取很多值。已经知道了样本观测值,从w的一切可能值中(选出一个使该观察值出现的概率为最大的值,作为w参数的估计值,这就是极大似然估计。(顾名思义:就是看上去那个是最大可能的意思)

举个例子:

假设有一枚不均匀的硬币,出现正面的概率和反面的概率是不同的。假定出现正面的概率为𝜃, 抛了6次得到如下现象 D = {正面,反面,反面,正面,正面,正面}。每次投掷事件都是相互独立的。 则根据产生的现象D,来估计参数𝜃是多少?

```
P(D|𝜃) = P {正面,反面,反面,正面,正面,正面}
 = P(正面|𝜃) P(正面|𝜃) P(正面|𝜃) P(正面|𝜃) P(正面|𝜃) P(正面|𝜃)

=𝜃 *(1-𝜃)*(1-𝜃)𝜃*𝜃*𝜃 = 𝜃4(1 − 𝜃)
```

问题转化为:求此函数的极大值时,估计𝜃为多少

对数函数

逻辑回归原理

原理

逻辑回归概念 Logistic Regression

• 一种分类模型,把线性回归的输出,作为逻辑回归的输入。 

• 输出是(0, 1)之间的值

• 基本思想

1. 利用线性模型 f(x) = wx + b 根据特征的重要性计算出一个值
2. 再使用 sigmoid 函数将 f(x) 的输出值映射为概率值
   1. 设置阈值(eg:0.5),输出概率值大于 0.5,则将未知样本输出为 1 类
   2. 否则输出为 0 类

3.逻辑回归的假设函数
 h(w) = sigmoid(wx + b )

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

​      

**在逻辑回归中,当预测结果不对的时候,我们该怎么衡量其损失呢?**

我们来看下图(下图中,设置阈值为0.6),

那么如何去衡量逻辑回归的预测结果与真实结果的差异?

损失函数

逻辑回归API

API介绍

```python
sklearn.linear_model.LogisticRegression(solver='liblinear', penalty=‘l2’, C = 1.0)
```

**solver** **损失函数优化方法**:

训练速度:liblinear 对小数据集场景训练速度更快,sag 和 saga 对大数据集更快一些。 2 正则化:

1. newton-cg、lbfgs、sag、saga 支持 L2 正则化或者没有正则化
2. 2liblinear 和 saga 支持 L1 正则化

**penalty**:正则化的种类,l1 或者 l2

**C**:正则化力度

默认将类别数量少的当做正例

分类评估方法

混淆矩阵

混淆矩阵作用在测试集样本集中:

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

> True Positive :表示样本真实的类别
> Positive :表示样本被预测为的类别


**例子:**

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

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

1. 真正例 TP 为:3 
2. 伪反例 FN 为:3
3. 伪正例 FP 为:0
4. 真反例 TN:4

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

1. 真正例 TP 为:6
2. 伪反例 FN 为:0
3. 伪正例 FP 为:3
4. 真反例 TN:1

我们会发现:TP+FN+FP+TN = 总样本数量

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

如果我们对模型的精度、召回率都有要求,希望知道模型在这两个评估方向的综合预测能力如何?则可以使用 F1-score 指标。

样本集中有 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%**
7. **F1-score:(2\*3)/(2\*3+3+0)=67%**

**模型 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%** 
7. **F1-score:(2\*6)/(2\*6+0+3)=80%**

ROC曲线和AUC指标

ROC 曲线

ROC 曲线:我们分别考虑正负样本的情况:

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

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

1. (0, 0) 表示所有的正样本都预测为错误,所有的负样本都预测正确
2. (1, 0) 表示所有的正样本都预测错误,所有的负样本都预测错误
3. (1, 1) 表示所有的正样本都预测正确,所有的负样本都预测错误
4. (0, 1) 表示所有的正样本都预测正确,所有的负样本都预测正确

绘制 ROC 曲线

假设:在网页某个位置有一个广告图片或者文字,该广告共被展示了 6 次,有 2 次被浏览者点击了。每次点击的概率如下:

| 样本 | 是否被点击 | 预测点击概率 |
| :--: | :--------: | :----------: |
|  1   |     1      |     0.9      |
|  2   |     0      |     0.7      |
|  3   |     1      |     0.8      |
|  4   |     0      |     0.6      |
|  5   |     0      |     0.5      |
|  6   |     0      |     0.4      |

根据预测点击概率排序之后:

| 样本 | 是否被点击 | 预测点击概率 |
| :--: | :--------: | :----------: |
|  1   |     1      |     0.9      |
|  3   |     1      |     0.8      |
|  2   |     0      |     0.7      |
|  4   |     0      |     0.6      |
|  5   |     0      |     0.5      |
|  6   |     0      |     0.4      |

绘制 ROC 曲线:

**阈值:0.9**

1. 原本为正例的 1、3 号的样本中 3 号样本被分类错误,则 TPR = 1/2 = 0.5
2. 原本为负例的 2、4、5、6 号样本没有一个被分为正例,则 FPR = 0

**阈值:0.8**

1. 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
2. 原本为负例的 2、4、5、6 号样本没有一个被分为正例,则 FPR = 0

**阈值:0.7**

1. 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
2. 原本为负类的 2、4、5、6 号样本中 2 号样本被分类错误,则 FPR = 1/4 = 0.25

**阈值:0.6**

1. 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
2. 原本为负类的 2、4、5、6 号样本中 2、4 号样本被分类错误,则 FPR = 2/4 = 0.5

**阈值:0.5**

1. 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
2. 原本为负类的 2、4、5、6 号样本中 2、4、5 号样本被分类错误,则 FPR = 3/4 = 0.75

**阈值 0.4**

1. 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
2. 原本为负类的 2、4、5、6 号样本全部被分类错误,则 FPR = 4/4 = 1

(0, 0.5)、(0, 1)、(0.25, 1)、(0.5, 1)、(0.75, 1)、(1, 1)

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

AUC 值

1. 我们发现:图像越靠近 (0,1) 点则模型对正负样本的辨别能力就越强
2. 我们发现:图像越靠近 (0, 1) 点则 ROC 曲线下面的面积就会越大
3. AUC 是 ROC 曲线下面的面积,该值越大,则模型的辨别能力就越强
4. AUC  范围在 [0, 1] 之间
5. 当 AUC= 1 时,该模型被认为是完美的分类器,但是几乎不存在完美分类器

> AUC 值主要评估模型对正例样本、负例样本的辨别能力.

**分类评估报告api**

```python
sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )
  '''
  y_true:真实目标值
  y_pred:估计器预测目标值
  labels:指定类别对应的数字
  target_names:目标类别名称
  return:每个类别精确率与召回率
  '''
```

**AUC计算API**

```
from sklearn.metrics import roc_auc_score
  sklearn.metrics.roc_auc_score(y_true, y_score)
    计算ROC曲线面积,即AUC值
    y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
    y_score:预测得分,可以是正例的估计概率、置信值或者分类器方法的返回值
```

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

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

相关文章

No.13 笔记 | 网络安全防护指南:从法律法规到技术防御

一、法律法规 《中华人民共和国网络安全法》要点 遵守法律:所有个人和组织在使用网络时,必须遵守宪法和法律,不得利用网络从事危害国家安全等活动。 个人信息保护:禁止非法获取、出售或提供个人信息。若违反但未构成犯罪&#x…

Rust编程的匹配控制语句match

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 学过C语言的同学或许在等switch,明确告诉你们,Rust没有switc…

【微服务】—SpringBoot入门

⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记仓库👉https://github.com/A-BigTree/tree-learning-notes 个人主页👉https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 文章目录 1 SpringBoot快速入门1.1 SpringBoot简介1.1.1 简介1.1.2…

Python | Leetcode Python题解之第464题我能赢吗

题目: 题解: class Solution:def canIWin(self, maxChoosableInteger: int, desiredTotal: int) -> bool:cachedef dfs(usedNumbers: int, currentTotal: int) -> bool:for i in range(maxChoosableInteger):if (usedNumbers >> i) & 1…

音频剪辑在线工具 —— 让声音更精彩

你是否曾梦想过拥有自己的声音创作空间,却苦于复杂的音频编辑软件?接下来,让我们一同揭开这些音频剪辑在线工具的神秘面纱,看看它们如何帮助你实现从录音到发布的无缝衔接。 1.福昕音频剪辑 链接直达>>https://www.foxits…

55页可编辑PPT | 制造企业数字化转型顶层规划案例

基于集团的战略和运营特点,数字化转型应如何考虑? 在集团的战略和运营特点基础上进行数字化转型,需要实现业务多元化,整合资源和流程,推动国际化拓展,实施差异化战略,并通过数据驱动决策&#…

基于SpringBoot在线拍卖系统【附源码】

基于SpringBoot在线拍卖系统 效果如下: 网站首页界面 用户登录界面 竞拍商品界面 管理员登录界面 管理员功能界图 竞拍商品界面 系统界面 订单界面 研究背景 随着社会的发展,信息化时代带来了各行各业的变革。电子商务已成为人们日常生活不可或缺的一…

单片机教案 2.1 ATmega2560单片机最小应用系统

第二章 ATmega2560单片机I/O输入输出口简单应用 ATmega2560是一款基于AVR微控制器的高性能、低功耗的8位微处理器,广泛应用于嵌入式系统设计,尤其是Arduino Mega 2560开发板中。其拥有丰富的I/O资源和强大的处理能力,适用于各种电子项目&…

深入理解Transformer的笔记记录(非小白贴)NNLM → Word2Vec

文章的整体介绍顺序为: NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为计算机机器只认数学符号…

知识改变命运 数据结构【java对象的比较】

0:前言 在基本数据类型中,我们可以直接使用号比较是否相等,还记的学堆哪里时候,插入一个数据,就会与其他数据进行比较,当时我们传入的是Integer类型,在Integer类里面已经实现了compare。 如果…

Java | Leetcode Java题解之第464题我能赢吗

题目&#xff1a; 题解&#xff1a; class Solution {Map<Integer, Boolean> memo new HashMap<Integer, Boolean>();public boolean canIWin(int maxChoosableInteger, int desiredTotal) {if ((1 maxChoosableInteger) * (maxChoosableInteger) / 2 < desi…

【万字长文】Word2Vec计算详解(一)

【万字长文】Word2Vec计算详解&#xff08;一&#xff09; 写在前面 本文用于记录本人学习NLP过程中&#xff0c;学习Word2Vec部分时的详细过程&#xff0c;本文与本人写的其他文章一样&#xff0c;旨在给出Word2Vec模型中的详细计算过程&#xff0c;包括每个模块的计算过程&a…

宠物咖啡馆平台:SpringBoot框架的设计与实现

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

【Vue3 + TS + Vite】从0到1搭建后台管理系统

前言 没搭建过Vue3的项目&#xff0c;从0开始搭建一下&#xff0c;记录一下自己的步骤。 技术栈&#xff1a; vue3 ts scss pinia vite 我尽量写的详细一些&#xff0c;后续也会记录我在项目过程中&#xff0c;遇到的一些问题。 文章目录 前言环境搭建一、创建项目1. 使用…

车载超声波雷达

车载超声波雷达 法雷奥同致电子BOSCH豪恩汽电辉创海康威视珠海上富晟泰克 法雷奥 法雷奥集团&#xff08;Valeo&#xff09;是一家总部位于法国的专业致力于汽车零部件、系统、模块的设计、开发、生产及销售的工业集团。公司业务涉及原配套业务及售后业务&#xff0c;是世界领…

有点晕,inline, crossinline,noinline小计

inline 主要用于展开铺平函数&#xff0c;用于高频访问但是代码不是很多的方法&#xff0c;减少函数对象的定义 fun <T> List<T>.normalForeach(action:(T)->Unit){for(item in this){action(item)} }inline fun <T> List<T>.inlinedForeach(action…

wildcard使用教程,解决绝大多数普通人的海外支付难题

许多人可能已经注意到,国外的一些先进AI工具对国内用户并不开放。而想要使用这些工具,我们通常会面临两个主要障碍:一是网络访问的限制,二是支付问题。网络问题很容易解决&#xff0c;难的是如何解决在国内充值海外软件。 今天给大家推荐一个工具——wildcard&#xff0c;用它…

MISC - 第13天(python脚本 重命名文件,拼接二维码,cloacked-pixel工具,中文电码,五笔编码)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天继续讲解MISC的相关知识 [安洵杯 2019]吹着贝斯扫二维码 附件信息: 使用APCHPR暴力破解工具&#xff0c;flag.zip 破解失败可能线索在其他文件&#xff0c;放到hxd查看 在hxd中&#xff0c;发现该文件头JFIF 是j…

HUAWEI_HCIA_实验指南_Lib1.4_配置通过Telnet登录系统

一、原理概述 Telnet(Telecommunication Network Protocol)起源于ARPANET,是最早的Internet应用之一。 Telnet 通常用在远程登录应用中&#xff0c;以便对本地或远端运行的网络设备进行配置、监控和维护。如网络中有多台设备需要配置和管理&#xff0c;用户无需为每一台设备…

多模态方法总结

多模态方法总结 架构分为Transformer Encoder的方法和基于Transformer Encoder和Decoder的方法 Transfomer Encoder方法 这张图来源于VILT&#xff0c;基本概括了多模态领域的模型架构。 图a是VSE或VSE的架构&#xff0c;文本端进行一个轻量的word embedding&#xff0c;视觉…