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) 的输出值映射为概率值

  3. 设置阈值(eg:0.5),输出概率值大于 0.5,则将未知样本输出为 1 类

  4. 否则输出为 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:预测得分,可以是正例的估计概率、置信值或者分类器方法的返回值

```

相关推荐
SEU-WYL10 分钟前
基于深度学习的药物筛选与发现
人工智能·深度学习
An_ich19 分钟前
windows安装deepspeed setup.py 207行找不到文件
python·deepspeed
新手小白勇闯新世界1 小时前
吴恩达深度学习笔记(3)--深度学习的实际应用
人工智能·笔记·深度学习
SEVEN-YEARS1 小时前
使用OpenCV实现基于FisherFaces的人脸识别
人工智能·opencv·计算机视觉
十七算法实验室2 小时前
Matlab实现野马优化算法优化回声状态网络模型 (WHO-ESN)(附源码)
人工智能·深度学习·算法·决策树·随机森林·机器学习·matlab
水深00安东尼2 小时前
使用最小二乘法画噪声数据的近似曲线
算法·机器学习·最小二乘法
jndingxin3 小时前
OpenCV高级图形用户界面(2)关闭所有由 OpenCV 创建的窗口的函数destroyAllWindows()的使用
人工智能·opencv·计算机视觉
鬼圣3 小时前
【python开发笔记】-- python装饰器
开发语言·笔记·python
这时的时光属于调子3 小时前
Python--spi.quad学习笔记
笔记·python·学习