本文主要是介绍机器学习之监督学习(二)二元逻辑回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
机器学习之监督学习(二)逻辑回归(二元分类问题)
- 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+e−z1
(为了和模型表达式一致,将函数用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)(1−g(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 x1和x2,紫色直线将两种类别的数据点进行了划分,从图中可以看出直线方程为:
x 1 + x 2 − 3 = 0 x_1+x_2-3=0 x1+x2−3=0
x 1 + x 2 − 3 x_1+x_2-3 x1+x2−3正是对两个特征的线性运算,如果参照 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+x2−3=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=1∑m21(fw,b(x(i))−y(i))2=m1i=1∑m21(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^)−(1−y)log(1−y^)
那么代价函数为:
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=1∑mL(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)}) ∂wj∂J(w,b)=m1i=1∑mxj(i)(sigmoid(w⋅x(i)+b)−y(i))∂b∂J(w,b)=m1i=1∑m(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=1∑m(sigmoid(w⋅x(i)+b)−y(i))2+2mλj=1∑nwj2
引入正则化后,梯度计算变成:
∂ ∂ 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)}) ∂wj∂J(w,b)=m1i=1∑mxj(i)(sigmoid(w⋅x(i)+b)−y(i))+mλwj∂b∂J(w,b)=m1i=1∑m(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=1∑m[yiln(pi)+(1−yi)ln(1−pi)]
平衡数据集评价指标
对于类别分布大致均匀的平衡数据集,除了对数损失外,另一个常用且有效的指标是准确率。
准确率(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+R2PR(P: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)PR(P: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折交叉验证是一个更好的选择。
③如果计算资源有限,使用训练集、验证集和测试集的划分可以减少计算需求,而不需要多次训练。
这篇关于机器学习之监督学习(二)二元逻辑回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!