机器学习之监督学习(二)二元逻辑回归

news2024/9/21 21:47:20

机器学习之监督学习(二)逻辑回归(二元分类问题)

  • 1. 分类 classification
  • 2.二元分类逻辑回归 binary-classified logistic regression
    • 模块1: sigmoid 激活函数 sigmoid function
    • 模型公式
    • 模块2: 决策边界 decision boundary
    • 代价函数
    • 梯度下降
    • 欠拟合与过拟合、正则化
    • 模块3:评价指标
      • 数据集的平衡性
      • 平衡数据集评价指标
      • 非平衡数据集评价指标
    • 模块4:K折交叉验证 K-Fold Cross-Validation

文章传送:
机器学习之监督学习(一)线性回归、多项式回归、算法优化
(建议:先看上一篇文章再食用更佳)

1. 分类 classification

分类的目标是根据输入数据将样本分配到不同类别中,输出标签是离散的如有限的类别。例如垃圾邮件过滤,手写数字0-9识别。

在这一章节我们先讨论二元分类问题,二元分类指输出值只有两个取值(表示两个类别)。

在上一篇文章中,我们详细介绍了线性回归模型,用于实现对连续输出数值的预测。当输出为有限值或有限类别时,线性回归模型是否还能生效?

看下图,横轴表示肿瘤的尺寸,纵轴表示肿瘤良性(0)或恶性(1),用X和O区分两种类别的数据点。当不考虑最右边的样本点时,可以看到当使用蓝色直线拟合,并选择y=0.5对应的临界x值作为分类的阈值时,的确能区分两个类别。但一旦加入右边的样本点(比较极端),可以看到模型判断肿瘤形状的效果就不太行了。从这个案例中可以看出线性回归模型并不适用于分类问题。广泛应用于解决分类问题的模型是逻辑回归模型。从后文可以看到,逻辑回归算法以线性回归算法为基础,但引入了激活函数,输出数据处于各个类别的概率,最大概率对应的类别即预测类别。

在这里插入图片描述

接下来让我们进入逻辑回归模型的学习,并最终运用它来实现手写数字0和1识别。


2.二元分类逻辑回归 binary-classified logistic regression


模块1: sigmoid 激活函数 sigmoid function

S型生长曲线是一类在自然和社会现象中常出现的曲线形状,它由三个阶段组成:起始阶段、加速阶段和饱和阶段。在起始阶段,增长速度较慢;在加速阶段,增长速度逐渐加快;在饱和阶段,增长速度逐渐减缓。
在这里插入图片描述
在数学上,描述S型曲线的函数称为sigmoid函数,表达式为:
g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1
(为了和模型表达式一致,将函数用g表示,输入变量用z表示)
1、函数图像,单调递增,奇函数
在这里插入图片描述
2、值域:g ∈ \in (0,1),由于输出范围在0到1之间,Sigmoid函数可以将任意实数映射到一个有限的范围内,适合处理概率问题,这使它成为了机器学习模型中常用的激活函数。
3、导数:
①sigmoid函数处处连续可微
②sigmoid函数的导数很容易计算,可以直接由求导处函数值经简单计算得出:
g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) g'(z)=g(z)(1-g(z)) g(z)=g(z)(1g(z))
(导数计算并不复杂,读者可以自行动笔进行计算)

在之后进入神经网络模型学习时,我们会对几种常用激活函数进行总结,除sigmoid激活函数之外,还包括线性激活函数、softmax激活函数、relu激活函数。


模型公式

了解了激活函数后,在这里我们先阐述逻辑回归模型的总体步骤,之后再对其原理进行深入剖析。

参数定义
符号定义
X:输入矩阵
y:输出/目标向量,二元分类问题中,假设取值y=0或1
y ^ \hat{y} y^:预测输出向量,二元分类问题中,假设取值y=0或1
m:训练数据量
n:特征数量

首先逻辑回归模型和线性回归模型一样,我们要设置 w w w b b b参数并使用最终使用梯度下降进行参数训练。在线性回归模型中,我们采用线性表达式预测目标值:
y ^ = f w ⃗ , b ( x ⃗ ) = w ⃗ ⋅ x ⃗ + b \hat{y}=f_{\vec{w},b}(\vec{x})=\vec{w}\cdot\vec{x}+b y^=fw ,b(x )=w x +b
在逻辑回归模型中,我们令
z = w ⃗ ⋅ x ⃗ + b z=\vec{w}\cdot\vec{x}+b z=w x +b
然后激活函数派上用场,将z输入,得到取值范围(0,1)的输出值,在二元分类问题中,sigmoid函数输出值用来预测某类别(y=1)的概率
f w ⃗ , b ( x ⃗ ) = g ( z ) = g ( w ⃗ ⋅ x ⃗ + b ) = P ( y = 1 ∣ x ⃗ , w ⃗ , b ) f_{\vec{w},b}(\vec{x})=g(z)=g(\vec{w}\cdot\vec{x}+b)=P(y=1|\vec{x},\vec{w},b) fw ,b(x )=g(z)=g(w x +b)=P(y=1∣x ,w ,b)
最后确定阈值 σ \sigma σ(一般0.5),如果g(z)< σ \sigma σ,则对应类别1,否则对应类别2。
i f f w ⃗ , b ( x ⃗ ) > σ , y ^ = 1 e l s e   y ^ = 0 if f_{\vec{w},b}(\vec{x})>\sigma,\hat{y}=1\\else ~\hat{y}=0 iffw ,b(x )>σ,y^=1else y^=0

为什么这样的模型能实现分类任务呢?我们得先了解决策边界(decision boundary )的概念。


模块2: 决策边界 decision boundary

看下图,共有两个特征 x 1 和 x 2 x_1和x_2 x1x2,紫色直线将两种类别的数据点进行了划分,从图中可以看出直线方程为:
x 1 + x 2 − 3 = 0 x_1+x_2-3=0 x1+x23=0
x 1 + x 2 − 3 x_1+x_2-3 x1+x23正是对两个特征的线性运算,如果参照 z = w ⃗ ⋅ x ⃗ + b z=\vec{w}\cdot\vec{x}+b z=w x +b,这里的权重向量是[1,1],偏置值是-3,我们记 x 1 + x 2 − 3 = z x_1+x_2-3=z x1+x23=z,则这条直线表示z=0。学过一点线性规划知识的我们知道,在紫色直线右边,z>0,对应y=1,在紫色直线左边,z<0,对应y=0,因此我们将z=0对应的这条直线称为这个问题中的一个决策边界
在这里插入图片描述
决策边界只能是直线吗?当然不是,参照我们将线性回归拓展到多项式回归的思想,我们可以将决策边界拓展到一般曲线,如下图:在这里插入图片描述

理解了决策边界后,再回过头来看上面逻辑回归的思路,就不觉得很无厘头了。
在sigmoid函数中,当z>0时,g(z)>0.5,对应类别y=1;当z<0时,g(z)<0.5,对应类别y=0。而上面所说的决策边界即表示z=0,边界的两侧区域(z>0,z<0)分别表示两个类别,这样就可以比较清晰的解释逻辑回归算法的底层原理。

代价函数

和线性回归一样,确定了模型后接下来便是确定成本函数,并使用梯度下降算法训练参数,优化模型。可是问题来了,这里的成本函数该如何选取,还是前面所说的平均平方损失函数吗?

结论是不宜采用平均平方损失函数
J ( w ⃗ , b ) = 1 m ∑ i = 1 m 1 2 ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 = 1 m ∑ i = 1 m 1 2 ( g ( w ⃗ ⋅ x ⃗ + b ) − y ( i ) ) 2 J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^2=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(g(\vec{w}\cdot\vec{x}+b)-y^{(i)})^2 J(w ,b)=m1i=1m21(fw ,b(x (i))y(i))2=m1i=1m21(g(w x +b)y(i))2
因为对于逻辑回归来说,平方误差成本函数不是简单的凸函数,容易陷入多个局部最小值中,因此不是最佳选择。
在这里插入图片描述

在介绍新的成本函数之前,我们先定义一下损失函数(loss)的概念,它描述了单个数据的预测误差,在平均平方损失函数中:
l o s s = L ( y ^ , y ) = 1 2 ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 loss=L(\hat{y},y)=\frac{1}{2}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^2 loss=L(y^,y)=21(fw ,b(x (i))y(i))2

在逻辑回归中,我们使用对数损失函数(也叫二元交叉熵损失函数(Cross-Entropy Loss)(log表示ln)

在这里插入图片描述

为了理解这个对数损失函数,我们需要画出两个函数图像:

在这里插入图片描述
y=1时,对应绿色曲线,当预测值=1时零损失,当预测值越接近0时,损失越大,趋近于无穷;
y=0时,对应蓝色曲线,当预测值=0时零损失,当预测值越接近1时,损失越小,趋近于无穷。
由于分段函数不方便研究,因此将其改写成(记 y ^ = f w ⃗ , b ( x ⃗ ( i ) ) \hat{y}=f_{\vec{w},b}(\vec{x}^{(i)}) y^=fw ,b(x (i))):
L ( y ^ , y ) = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) L(\hat{y},y)=-ylog(\hat{y})-(1-y)log(1-\hat{y}) L(y^,y)=ylog(y^)(1y)log(1y^)
那么代价函数为:
J ( w ⃗ , b ) = 1 m ∑ i = 1 m L ( f w ⃗ , b ( x ⃗ ( i ) ) , y ) J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}L(f_{\vec{w},b}(\vec{x}^{(i)}),y) J(w ,b)=m1i=1mL(fw ,b(x (i)),y)
可以证明这个代价函数为凸函数。

梯度下降

引入了二元交叉熵损失后,我们得到了逻辑回归问题中的代价函数,下一步进入优化环节,还是采用梯度下降。

计算偏导
对于对数损失函数,偏导计算比较繁琐,这里不展开详细计算,只给出最终结果:
∂ ∂ w j J ( w ⃗ , b ) = 1 m ∑ i = 1 m x j ( i ) ( s i g m o i d ( w ⃗ ⋅ x ⃗ ( i ) + b ) − y ( i ) ) ∂ ∂ b J ( w ⃗ , b ) = 1 m ∑ i = 1 m ( s i g m o i d ( w ⃗ ⋅ x ⃗ ( i ) + b ) − y ( i ) ) \frac{\partial}{\partial{w_j}}J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}x_j^{(i)}(sigmoid(\vec{w}\cdot\vec{x}^{(i)}+b)-y^{(i)})\\\frac{\partial}{\partial{b}}J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}(sigmoid(\vec{w}\cdot\vec{x}^{(i)}+b)-y^{(i)}) wjJ(w ,b)=m1i=1mxj(i)(sigmoid(w x (i)+b)y(i))bJ(w ,b)=m1i=1m(sigmoid(w x (i)+b)y(i))
对比之前多元线性回归偏导表达式,我们惊奇的发现,两者高度类似,只是逻辑回归中经过激活函数再输出目标值。
在这里插入图片描述
计算出偏导后,便可以开始迭代若干次,更新参数,不断减小J,优化模型,实现代码参考:
二元分类逻辑回归python代码实现
当然,在模型中不要忘了数据预处理环节,包括特征编码、特征缩放。

使用scikit-learn实现逻辑回归

#从linear_model模块引入逻辑回归模块
from sklearn.linear_model import LogisticRegression
#创建逻辑回归器
lr_model = LogisticRegression()
#匹配数据集进行训练
lr_model.fit(X, y)
#模型预测(输出1/0)
y_pred = lr_model.predict(X)
#查看分类准确率
print("Accuracy on training set:", lr_model.score(X, y))

欠拟合与过拟合、正则化

在线性回归中,我们使用多项式函数的复杂程度来说明欠拟合、过拟合;在逻辑回归中,我们用决策边界的复杂程度来直观说明。
图一中,决策边界是一条直线,分类效果一般,属于欠拟合,问题是高偏差;
图二中,决策边界是一条二次平面曲线,在分界线两侧,虽然有两个离群数据点分类错误,但具备优秀的泛化能力,属于正拟合;
图三中,决策边界是更加复杂的曲线,为了迎合两个离群数据点,它完美的隔离了两类数据点,但明显这属于过拟合,问题是高方差。
在这里插入图片描述
为了防止过拟合,我们仍然采用正则化:
J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( s i g m o i d ( w ⃗ ⋅ x ⃗ ( i ) + b ) − y ( i ) ) 2 + λ 2 m ∑ j = 1 n w j 2 J(\vec{w},b)=\frac{1}{2m}\sum_{i=1}^{m}(sigmoid(\vec{w}\cdot{\vec{x}^{(i)}}+b)-y^{(i)})^2+\frac{\lambda}{2m}\sum_{j=1}^{n}w_j^2 J(w ,b)=2m1i=1m(sigmoid(w x (i)+b)y(i))2+2mλj=1nwj2

引入正则化后,梯度计算变成:
∂ ∂ w j J ( w ⃗ , b ) = 1 m ∑ i = 1 m x j ( i ) ( s i g m o i d ( w ⃗ ⋅ x ⃗ ( i ) + b ) − y ( i ) ) + λ m w j ∂ ∂ b J ( w ⃗ , b ) = 1 m ∑ i = 1 m ( s i g m o i d ( w ⃗ ⋅ x ⃗ ( i ) + b ) − y ( i ) ) \frac{\partial}{\partial{w_j}}J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}x_j^{(i)}(sigmoid(\vec{w}\cdot\vec{x}^{(i)}+b)-y^{(i)})+\frac{\lambda}{m}w_j\\\frac{\partial}{\partial{b}}J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}(sigmoid(\vec{w}\cdot\vec{x}^{(i)}+b)-y^{(i)}) wjJ(w ,b)=m1i=1mxj(i)(sigmoid(w x (i)+b)y(i))+mλwjbJ(w ,b)=m1i=1m(sigmoid(w x (i)+b)y(i))

模块3:评价指标

在机器学习和数据挖掘领域,数据集的平衡性是指各类别样本数量的分布情况。以下是对平衡数据集和不平衡数据集的描述及示例:

数据集的平衡性


平衡数据集

定义:在平衡数据集中,各类别的样本数量大致相等,或至少没有明显的数量差异

示例
假设我们有一个数据集用于预测邮件是否为垃圾邮件(Spam或Not Spam)。如果这个数据集中有1000封邮件,其中500封是垃圾邮件,500封不是垃圾邮件,那么这是一个平衡数据集。


不平衡(倾斜)数据集

定义:在不平衡数据集中,各类别的样本数量存在显著差异,通常某些类别的样本数量远远少于其他类别。

示例
在一个医疗诊断数据集中,用于检测某种罕见疾病。如果这个数据集中有10000个样本,其中只有100个样本患有这种疾病,剩下的9900个样本没有患病,那么这是一个不平衡数据集。

在不平衡


无论是平衡还是非平衡数据集,都可以以对数损失(Log Loss)作为评价指标,因为它更关注模型预测的概率分布,与数据集是否平衡无关。
Log Loss = − 1 m ∑ i = 1 m [ y i ln ⁡ ( p i ) + ( 1 − y i ) ln ⁡ ( 1 − p i ) ] \text{Log Loss} = -\frac{1}{m} \sum_{i=1}^{m} \left[ y_i \ln(p_i) + (1 - y_i) \ln(1 - p_i) \right] Log Loss=m1i=1m[yiln(pi)+(1yi)ln(1pi)]

平衡数据集评价指标

对于类别分布大致均匀的平衡数据集,除了对数损失外,另一个常用且有效的指标是准确率。

准确率(Accuracy):表示分类正确率,即分类正确的数据数占总数据数比重。适用于类别分布均匀的情况,但在类别不平衡时可能会误导,因为多数类别的正确预测会掩盖少数类别的错误预测。
为了说明这点,我们举例如下:

在一个医疗数据集中,我们希望预测某种罕见病与健康的情况。如果数据集中有10000个样本,其中9900个是健康的,100个是罕见病的,即类别不平衡。

假设分类器对健康样本的准确率非常高,但对罕见病的检测效果较差。具体表现如下:

健康样本中,9850个被正确分类为健康,50个被错误分类为罕见病。
罕见病样本中,70个被正确分类为罕见病,30个被错误分类为健康。
根据公式,我们可以计算准确率=(9850+70)/10000=0.992,尽管这个准确率看起来很高,但它掩盖了对于罕见病的糟糕预测性能。

非平衡数据集评价指标

阳性事件(Positive Event)
定义:指在数据集中被标记为阳性的事件,通常表示某个特定的目标或现象的发生。例如,在医学研究中,阳性事件可能是患者确诊某种疾病;在金融诈骗检测中,阳性事件可能是检测到的诈骗行为。

特点:阳性事件通常是研究和分析的主要关注点,可能较少出现,导致数据集不平衡。

阴性事件(Negative Event)
定义:指在数据集中被标记为阴性的事件,表示特定的目标或现象未发生。继续以上述例子为例,阴性事件可能是患者未确诊为该疾病,或用户未发生诈骗行为。

特点:阴性事件通常发生频率较高,因此在非平衡数据集中,阴性样本往往占据更大比例。


在罕见病诊断案例中,我们定义y=1表示患罕见病,y=0表示不患病。定义患罕见病为阳性(positive)事件,不患病为阴性(negative)事件,则预测结果有四种情况,如下图表格所示,真阳性:患病->预测患病(True Positive,TP);假阳性:不患病->预测患病(False Positive,FP);真阴性:不患病->预测不患病(True Negative,TN);假阴性:不患病->预测患病(False Negative,FN)。

我们将这个表格称为混淆矩阵(confusion matrix),它是用于评价分类模型的一个重要指标之一。在这里插入图片描述

在这里插入图片描述

下面定义评价倾斜数据集预测效果的两个重要指标:

精确率/查准率 Precision
定义:精确率表示预测为阳性的对象中,为真阳性的对象所占的比重,公式表示为:
Precision = T P T P + N P \text{Precision}=\frac{TP}{TP+NP} Precision=TP+NPTP

召回率/查全率 Recall
定义:召回率表示实际为阳性的对象中,被预测为阳性的对象所占的比重,公式表达为:
Recall = T P T P + F N \text{Recall}=\frac{TP}{TP+FN} Recall=TP+FNTP

如何理解并区分这两个指标?下面形象的解释有利于理解两个指标的侧重点:
Precision 解释:宁可放走几个坏人,也不愿错杀无辜 (降低比例FP/(TP+FP))
Recall 解释:宁可错杀无辜,绝不放过一个坏人 (提升比例TP/(TP+FN))
从这个解释可以看出,Precision和Recall之间存在一定的对立关系。我们需要探讨如何在精确率和召回率之间做出权衡,使模型综合效果最优。

在前面中我们通常设定阈值 σ \sigma σ=0.5,根据我们的不同期望,可以对阈值进行修改(调高或调低),对应精确率或召回率的侧重。

1、希望在更有把握的情况下再诊断罕见病,即调高阈值 σ \sigma σ,那么在预测为阳性的对象里面,真阳性的比例会增大,即提高了精确率Precision,而另一方面在数据量不变的情况下,真阳性对象数减少(TP↓),而真实患病人数(TP+FN)不变,因此召回率Recall下降。

2、希望不错过任何可能得罕见病的对象,即调低阈值 σ \sigma σ,那么真阳性对象数减少(TP↑),召回率Recall上升,而精确率Precision下降。

在这里插入图片描述

如果两个指标中任一指标很差,那我们的分类模型很不理想,因此我们希望两个指标都足够好,这时引入一个综合指标F1 score:F1 Score 是精确率和召回率的调和平均数(避免一个指标过高而另一个指标过低的情况)
F 1   s c o r e = 2 P R P + R ( P : P r e c i s o n , R : R e c a l l ) F1~score=\frac{2PR}{P+R}(P:Precison,R:Recall) F1 score=P+R2PRP:Precison,R:Recall
如果你希望在F1分数中调整精准率和召回率的相对权重,可以使用加权F1分数(F-beta分数),其公式如下:
F β = ( 1 + β 2 ) P R β 2 P + R ( P : P r e c i s o n , R : R e c a l l , β : 表示 R 相对 P 的权重) F_{\beta}=\frac{(1+\beta^2)PR}{\beta^2P+R}(P:Precison,R:Recall,\beta:表示R相对P的权重) Fβ=β2P+R(1+β2)PRP:Precison,R:Recall,β:表示R相对P的权重)

由于事实上大多数的数据集都具备一定的倾斜性,因此Precision和Recall一般被认为在分类问题通用的评价指标,不只是局限于罕见病这种十分倾斜的分布情况。同时从上面的阈值调节可以看出,分类问题中一个模型评价指标与决策者的目标密切相关。

总结一下二元分类问题中,评价指标还包括:
准确率 Accuracy
A C C = T P + T N T P + N P + T N + P N ACC=\frac{TP+TN}{TP+NP+TN+PN} ACC=TP+NP+TN+PNTP+TN

P-R曲线
通过选择若干不同的阈值,得到若干(P,R)构成P-R曲线,P=R时对应的点为平衡点,通常认为平衡度越偏离原点或者曲线包络面积大的模型性能更优越。
在这里插入图片描述
ROC曲线 Receiver Operating Characteristic
首先定义:
T P R = T P T P + F N (查全率) TPR=\frac{TP}{TP+FN}(查全率) TPR=TP+FNTP(查全率)

F P R = F P T N + F P (错杀率) FPR=\frac{FP}{TN+FP}(错杀率) FPR=TN+FPFP(错杀率)

直观解释:TPR表示所有坏人中被抓出的比重,我们希望它越高越好;FPR表示所有好人中被错抓的比重,我们希望它越低越好,以TPR为纵轴,FPR为横轴建立坐标系,则(0,1)表示查全率100%,错杀率0%,即最优情况;(1,0)表示查全率0%,错杀率100%,即最坏情况;(0,0)表示TP=FP=0,即所有样本都被诊断为负类,(1,1)表示FN=TN=0,即所有样本都被诊断为正类。因此坐标点越接近左上角性能越佳。

在这里插入图片描述
通过改变阈值,得到不同的(TPR,FPR)并连接构成ROC曲线。关于ROC曲线,有几点值得注意:
①假设阈值从1变成0,ROC曲线一定由(0,0)变化到(1,1)
②ROC曲线不是光滑的,而是阶梯型的。为什么呢?因为样本的数量是有限的,而FPR和TPR的变化需要至少有一个样本变化了,在没有变化的间隙里,就不会有变化
③阈值的范围是[0,1],当阈值从1到0慢慢移动时,FPR会越来越大。因为FP(假正例)会越来越多;TPR也会越来越大,因为TP(真正例)也会越来越多
④如果在给定的样本中,我都随机预测,也就是0.5概率预测为阳性,0.5概率预测为阴性。那么这条曲线会是怎样的呢?可以想象,如果数据是均匀,那么这条曲线就是y=x。

AUC值 Area Under the Curve[以下内容转载模型评估指标 AUC 和 ROC,这是我看到的最透彻的讲解]

假设我们有一个分类器(假设样本数量足够大),输出是样本输入正例的概率,所有的样本都会有一个相应的概率,这样我们可以得到下面这个图:
在这里插入图片描述
其中,横轴表示预测为正例的概率,纵轴表示样本数。

所以,蓝色区域表示所有负例样本的概率分布,红色样本表示所有正例样本的概率分布。显然,如果我们希望分类效果最好的话,那么红色区域越接近1越好,蓝色区域越接近0越好。

为了验证你的分类器的效果。你需要选择一个阈值,比这个阈值大的预测为正例,比这个阈值小的预测为负例。如下图:

在这里插入图片描述

在这个图中,阈值选择了0.5于是左边的样本都被认为是负例,右边的样本都被认为是正例。可以看到,红色区域与蓝色区域是有重叠的,所以当阈值为0.5的时候,我们可以计算出准确率为90%。理论上说,当两个区域尽可能的分离,即重叠区域很小时,分类效果越好。

好,现在我们来引入ROC曲线,通过选择不同的阈值,得到若干(TPR,FPR)坐标点,绘制构成ROC曲线
在这里插入图片描述
在这里插入图片描述
上面两个图反映两个不同分类器,可以观察到当重叠面积越大时,TPR和FPR的值越接近(可以从图上直观理解),即ROC曲线越趋近于y=x这条直线,即无异于随机预测。而ROC曲线越凸,则分类效果越好。

综上两个图,如果我们想要用ROC来评估分类器的分类质量,我们就可以通过计算AUC(ROC曲线下的面积)来评估了,这就是AUC的目的。

其实,AUC表示的是正例排在负例前面的概率。AUC的值范围从0到1:
AUC = 1:表示模型可以完美地将所有正例排在负例之前。
AUC = 0.5:表示模型的表现和随机猜测一样,正例和负例的排序没有任何区分能力。
AUC < 0.5:表示模型的性能差于随机猜测,通常需要改进。

在这里插入图片描述

我们知道阈值可以取不同,也就是说,分类的结果会受到阈值的影响。如果使用AUC的话,因为阈值变动考虑到了,所以评估的效果更好。

另一个好处是,ROC曲线有一个很好的特性:当测试集中的正负样本分布发生变化了,ROC曲线可以保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。

在这里插入图片描述

在上图中,(a)和©为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,©和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。

模块4:K折交叉验证 K-Fold Cross-Validation

在上一篇文章讨论过当涉及超参数选择和模型对比选择时,我们通常会设置验证集,通过比较模型在验证集上的表现来做出参数选择、模型选拔。另一种强有力的模型评估方法是K折交叉验证,主要用于评估机器学习模型在新数据上的表现。它通过将数据集划分为多个子集来实现更可靠的模型效果评估。以下是K折交叉验证的详细步骤和:

K折交叉验证的详细步骤
1、数据准备:假设你有一个回归数据集,大小为N。
2、划分数据集:将数据集随机划分为K个相同大小的子集(折)。假设数据集的大小N可以被K整除,如果不能,则最后一个折的大小可能略小。
3、进行K次训练和验证:
对于每一次迭代i(从1到K):
选择验证集:将第i个子集作为验证集。
选择训练集:将其余的K-1个子集合并作为训练集。
训练模型:使用训练集训练回归模型。
验证模型:在验证集上评估模型的性能,记录下评估指标,如回归问题中的均方误差(MSE)、均绝对误差(MAE)和决定系数(R2 score);分类问题中的准确率(ACC)、查准率(Precision)、查全率(Recall)、AUC。
汇总结果:完成所有K次迭代后,计算这些性能指标的平均值和标准差,以获得模型性能的更全面理解。

优点
①更全面的评估:每一条数据都可以被用作训练和验证,避免了因数据划分方式不同而导致的评估结果不稳定。
②减少过拟合的风险:通过多次训练和验证,可以更好地评估模型的泛化能力。

缺点
①计算开销大:尤其在数据集较大时,K折交叉验证可能需要更多的计算资源和时间。
②选择K的影响:K的选择会影响模型评估的结果,通常选择的K为5或10。

注意
完成k折交叉验证后,根据交叉验证的结果,需要在整个训练集上重新训练模型,然后使用独立的测试集进行评估。

训练集-验证集-测试集 or k折交叉验证

①当数据量足够大且有代表性时,可以优先考虑使用训练集-验证集-测试集的划分,通常,训练集占70-80%,验证集占10-15%,测试集占10-15%。
②如果数据集较小,或者你希望评估模型的性能更加稳健,K折交叉验证是一个更好的选择。
③如果计算资源有限,使用训练集、验证集和测试集的划分可以减少计算需求,而不需要多次训练。

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

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

相关文章

【Redis】Redis 主从复制原理与配置详解:解决单点故障与性能瓶颈的最佳方案

目录 主从复制配置建立复制断开复制安全性只读传输延迟 拓扑⼀主⼀从结构一主多从结构树形主从结构 原理复制过程数据同步 psync全量复制部分复制实时复制 小结 主从复制 这部分相关操作不需要记忆!!! 后续⼯作中如果⽤到了能查到即可. 重点理解流程和原理. 单点问题&#xff1…

onvif应用--IPC鉴权(认证)

一、鉴权原理 1&#xff09;onvif的用户验证&#xff0c;是基于WS_UsernameToken&#xff0c;所谓的WS_UsernameToken加密&#xff0c;就是将用户名、密码、Nonce、Created都包含在了header里面 参数 意义 username待认证的用户名Nonce客户端随机产生的字符串Created请求认证…

arXiv风评被害?

arXiv “风评被害”&#xff1f; arXiv是一个在学术界具有重要影响力的开放预印本论文网站&#xff0c;自三十多年前创立以来&#xff0c;它已经成为了物理学、计算机科学、统计学等科学论文最重要的发布平台之一&#xff0c;同时也是众多科研人员分享和交流研究成果的重要渠道…

单片机工程师:创新与挑战之路

摘要&#xff1a;本文全面深入地探讨了单片机工程师这一职业角色。详细阐述了单片机工程师的职责范围、所需技能&#xff0c;包括硬件设计、软件编程、调试与测试等方面。分析了单片机在不同领域的应用&#xff0c;如工业控制、消费电子、智能家居等。同时&#xff0c;探讨了单…

【计算机组成原理】计算机系统的基本组成

文章目录 计算机硬件的基本组成早期的冯诺依曼机冯诺依曼结构冯诺依曼机的特点 现代计算机现代计算机的结构 各硬件的工作原理主存储器主存储器的基本组成 运算器运算器的基本组成 控制器控制器的基本组成 计算机软件 计算机硬件的基本组成 早期的冯诺依曼机 冯诺依曼在研究 …

图纸文件怎么加密?2024六款图纸加密软件推荐,个个好用不踩雷!

想象一下&#xff0c;公司的设计图纸被无意间泄露&#xff0c;结果对手提前推出了相似的产品。为了避免这种令人头疼的情况发生&#xff0c;图纸加密就显得尤为重要。 别担心&#xff0c;今天我们就带你了解2024年六款超好用的图纸加密软件&#xff0c;让你的图纸“安全感”爆…

业务复杂度治理方法论--十年系统设计经验总结

一、复杂度综述 1、什么是复杂度 软件设计的核心在于降低复杂性。 --《软件设计的哲学》 业界对于复杂度并没有统一的定义&#xff0c;斯坦福教授John Ousterhout从认知负担和工作量方面给出了一个复杂度量公式 &#xfeff; &#xfeff;&#xfeff; 子模块的复杂度cp乘…

快充协议方案的工作原理及场景应用

快充协议芯片是支持各种快充快充协议的芯片&#xff0c;它们能智能识别插入的设备类型&#xff0c;并根据设备的需求调整充电电压和电流&#xff0c;从而实现快速充电。 XSP08Q芯片是内置快充功能的协议芯片&#xff0c;它基于先进的充电技术&#xff0c;通过协商电压和电流&a…

【数据结构】二叉树顺序存储结构堆的应用以及解决TOP-K问题

文章目录 前言1. 堆的应用1.1 堆排序1.2 TOP-K问题 2. 结语 前言 前面我们学习了堆这个数据结构&#xff0c;这种数据结构是一种顺序结构存储的完全二叉树&#xff0c;现在我们来看一看堆的应用。 1. 堆的应用 1.1 堆排序 版本一&#xff1a;基于已有数组建堆、取堆顶元素完…

Linux CentOS 部署Docker

1. yum 配置 &#xff08;1&#xff09;更新yum yum update -y 如果不升级更新yum 可能在后续docker部署后再更新容器会出现oci runtime error等 &#xff08;2&#xff09;安装yum工具类准备 yum install -y yum-utils device-mapper-persistent-data lvm2 &#xff08;3&…

不再为存储‘分家’烦恼,teamOS让你的数据全家桶,一键即达

在数字化浪潮下&#xff0c;数据管理已成为企业运营的核心环节。作为企业管理者&#xff0c;我深知数据的重要性&#xff0c;也明白数据管理所面临的种种挑战。 最近开始使用企业网盘&#xff0c;在体验了一段时间后&#xff0c;目前来说&#xff0c;让我比较满意的就是可道云…

C盘红了怎么办?C盘快满了怎么办?如何提高电脑运行速度?

在电脑的日常使用中&#xff0c;C盘红了&#xff08;也就是C盘满了&#xff09;&#xff0c;那是常有的事&#xff0c;本文将详述一下&#xff0c;C盘红了之后的多种处理方法&#xff0c;只要你看完了&#xff0c;就必有一款适合你。 一、系统自带的磁盘清理 当你的C盘红了&…

vue3 置空a-select数据

置空a-select数据 项目中遇到需求&#xff0c;选择第一个下拉框后&#xff0c;发请求获取数据第二个下拉框数据&#xff08;第二个下拉框已选的情况下需要置空&#xff09;。 解决方法&#xff1a;formData.value.checkUser {value: “” ,label:“”} <a-col :span"…

Win32中的字符串

ANSI字符和Unicode字符 在Visual C中&#xff0c;用CHAR来表示8位ANSI字符&#xff0c;用WCHAR来表示16位Unicode字符&#xff08;宽字符&#xff09; 1 typedef char CHAR 2 typedef wchar_t WCHAR 一般常用的定义如下 TypedefDefinitionCHARcharPSTR or LPSTRchar*PCSTR o…

一个跨平台的换源工具,一键更换操作系统上的软件源或镜像源

大家好&#xff0c;今天给大家分享的是一个全平台通用换源工具chsrc&#xff0c;旨在为各种软件在不同平台上提供从命令行进行换源的功能。 项目介绍 chsrc支持 Linux&#xff08;包括麒麟、openEuler、deepin 等&#xff09;、Windows、macOS、BSD 等多种操作系统&#xff0c…

MySQL数据类型-介绍

MySQL 支持多种数据类型&#xff0c;这些数据类型可以根据它们所存储的数据类型大致分为几类&#xff1a;数值类型、日期和时间类型、字符串&#xff08;字符&#xff09;类型、空间数据类型以及JSON数据类型。 一、数据类型 1.整数类型 TINYINT&#xff1a;非常小的整数。例…

第 2 章:AJAX 的使用

AJAX 的使用 核心对象&#xff1a;XMLHttpRequest&#xff0c;AJAX 的所有操作都是通过该对象进行的。 1. 使用步骤 创建 XMLHttpRequest 对象 var xhr new XMLHttpRequest(); 设置请求信息 xhr.open(method, url);//可以设置请求头&#xff0c;一般不设置 xhr.setReques…

计算机网络八股文之TCP协议

TCP/IP模型 链路层 物理层&#xff1a;主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由1、0转化为电流强弱来进行传输&#xff0c;到达目的地后再转化为1、0&#xff0c;也就是我们…

WPS Office for Linux 12 个人版上线deepin 23商店:UI 视觉重构,新增多项 AI 功能

查看原文 全新WPS Office For Linux个人版&#xff08;12.1.0.17881&#xff09;与deepin 23的AI功能深度融合&#xff0c;正式上架在社区商店啦&#xff01; 这是 Linux 版本的一次里程碑式的重大更新。在产品能力层面上&#xff0c;在 deepin 23 上WPS Office 几乎实现了与 …

30天一次过PMP资料分享!2024备考PMP必看!!!

1、华为项目管理工具模板 2、PMP思维导图 3、PMBOK指南第七版-中文电子版 4、敏捷电子书&#xff08;含敏捷实践指南&#xff09; 5、300道敏捷题 6、PMBOK第六版章节思维导图 PMP备考攻略&#xff1a; 1. 充分了解PMP考试大纲&#xff1a; 详细了解PMP考试大纲&#xff0c;明…