机器学习实验二——模型评估

一、模型性能影响因素

1. 模型评估

模型评估是对训练好的模型性能进行定量或定性评估的过程。它的目的是确定模型在新数据上的表现,并找出模型的优点和缺点。在机器学习中,模型评估可以帮助选择最佳的模型、确定模型的可靠性以及进行模型的改进。

2. 模型评估的类型

根据机器学习任务的不同,模型评估可以分为回归模型评估和分类模型评估。对于回归任务,常用的评价指标包括均方误差(MSE)、平均绝对误差(MAE)和R²分数。对于分类任务,常用的评价指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数等。

3. 过拟合和欠拟合

3.1 过拟合

过拟合指的是模型过度地学习了训练数据的噪声和随机变化,导致在训练集上表现良好但在测试集上表现较差的情况。解决过拟合的方法包括增加训练数据、使用正则化、减少特征数量、调整超参数和参数、降低模型复杂度等。

3.2 欠拟合

欠拟合是指模型未能捕获数据中的真实模式和特征,导致在训练集和测试集上都表现不佳的情况。通常是因为模型过于简单或者学习能力不足造成的。解决欠拟合的方法包括增加模型复杂度、增加更多特征、调整参数和超参数、降低正则化约束等。

3.3 直观解释

4. 模型泛化能力

模型泛化能力是指模型在未见过的数据上的表现能力,是衡量模型好坏的重要指标之一。模型的泛化能力越好,说明模型越能适应新数据,并且更具有普适性和可靠性。为了提高模型的泛化能力,需要避免过拟合和欠拟合,选择合适的模型和优化算法,以及充分利用数据进行训练和验证。

综上所述,模型评估、过拟合、欠拟合和模型泛化能力是机器学习模型开发过程中需要重点关注和处理的问题,它们直接影响着模型的性能和实际应用效果。

二、常见的分类模型评估指标

1. 混淆矩阵

混淆矩阵是模型评估中的一个重要部分,其他的分类模型评估指标都直接或间接的与混淆矩阵有着联系,所以在了解这些评价指标之前,先理解混淆矩阵是什么来方便记忆。

首先每一列表示真实值的标签,每一行表示预测值的标签。Positive 为正样本,Negative 为负样本。

根据不同行列意义我们可以得到四种分类:

TP真实类别为positive,模型预测的类别也为positive
FP预测为positive,但真实类别为negative,真实类别和预测类别不一致
FN预测为negative,但真实类别为positive,真实类别和预测类别不一致
TN真实类别为negative,模型预测的类别也为negative

TP 和 TN 都对应着预测正确的部分,FP 和 FN 对应着预测错误的部分。所以我们期望 TP 和 TN 越大越好,而 FP 和 FN 越小越好。

2. 准确率

计算公式如下:

                        Accuracy = (TP+TN)/(TP+FN+FP+TN)

准确率表示预测正确的样本(TP和TN)在所有样本(all data)中占的比例。准确率直观地反映了分类模型在整个数据集上的表现,越高表示模型越准确。在样本不平衡的情况下,准确率可能会受到影响,因为模型可能会更倾向于预测为样本数量较多的类别。

3. 精确率(查准率)

计算公式如下:

                        Precision = TP/(TP+FP)

精确率表示在预测为positive的样本中真实类别为positive的样本所占比例。它告诉了我们模型预测为正类别的样本中有多少是真正的正类别。

4. 召回率(查全率)

计算公式如下:

                        Recall = TP/(TP+FN)

召回率表示在真实为positive的样本中模型成功预测出的样本所占比例。它告诉了我们模型有多少能够捕捉到真正的正类别样本。精确率和召回率通常是互相影响的指标,提高召回率可能会降低精确率,反之亦然。在某些场景下,我们需要权衡精确率和召回率,并根据应用需求选择合适的模型。

5. F1-score

计算公式如下:

F1 = 2 / (1/Precision + 1/Recall) = (2*Precision*Recall) / (Precision+Recall)

F1值就是精确率和召回率的调和平均值,F1值认为精确率和召回率一样重要。

6. ROC 曲线和 AUC

ROC 曲线以假正例率(FPR)为横轴,真正例率(TPR,即召回率)为纵轴绘制的曲线。AUC 表示 ROC 曲线下方的面积,用于评估模型的分类性能。AUC 值越大,表示模型性能越好。

TPR(召回率)的计算公式为: TPR = TP / (TP+FN)

FPR 的计算公式为 : FPR = FP / (FP+TN)

阈值分类模型中是一个重要的概念,它用于决定将样本分配到哪个类别。通常情况下,机器学习模型输出的是样本属于某一类别的概率值(比如属于正类别的概率),而阈值则是用来将这个概率值转化为最终的分类结果的临界点。具体来说,如果模型输出的概率值大于等于阈值,那么该样本被划分为正类别;如果模型输出的概率值小于阈值,那么该样本被划分为负类别。

通过对分类阈值θ从大到小或者从小到大依次取值,我们可以得到很多组TPR和FPR的值,将其在图像中依次画出就可以得到一条ROC曲线,阈值θ取值范围为[0,1][0,1]。

展示了3个模型的ROC曲线,要知道哪个模型更好,则需要计算每条曲线的AUC值,一般认为AUC值越大越好。

7. PR 曲线和 AUC

PR 曲线以精确率(P)为横轴,召回率(R)为纵轴绘制的曲线。展示了在不同阈值下精确率(Precision)和召回率(Recall)之间的关系。PR 曲线和 AUC 用于评估样本不均衡情况下的分类器性能,特别适用于正负样本不平衡的情况。

利用PR曲线评估模型性能的方法:

(1)观察法:如果一条PR曲线被另一条PR曲线完全包住(允许部分重合,但不能有交叉),则后者的算法分类效果优于前者。如下图,黄优于蓝。

(2)平衡点法:当曲线交叉时可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点F1。整条PR曲线与直线P=R的交点称为这条PR曲线的平衡点(F1最大)。如果曲线A的平衡点高于曲线B的平衡点,则算法A优于算法B,反之算法B优于算法A。如下图所示,黄线平衡点高于绿线,故黄优于绿。

三、ROC曲线与PR曲线比较

ROC 曲线特点:

  1. 横纵坐标:ROC 曲线的横轴是假正例率(False Positive Rate,FPR),纵轴是真正例率(True Positive Rate,TPR)。
  2. 对称性:ROC 曲线通常是一个从左下角到右上角的曲线,对角线表示随机猜测的效果,而曲线越靠近左上角,表示分类器的性能越好。
  3. 面积计算:ROC 曲线下的面积(ROC AUC)越大,分类器性能越好,最大值为 1。
  4. 应用:ROC 曲线适用于评估不同分类器在不同阈值下的性能,并比较它们的整体分类能力。

PR 曲线特点:

  1. 横纵坐标:PR 曲线的横轴是召回率(Recall),纵轴是精确率(Precision)。
  2. 不对称性:PR 曲线通常不对称,因为正例数量可能远小于负例数量,因此曲线可能在精确率较高时下降。
  3. 面积计算:PR 曲线下的面积(Average Precision)越大,分类器性能越好,最大值为 1。
  4. 应用:PR 曲线更适合于不平衡数据集的评估,特别是在正例数量较少或者对正例的识别更加关注时。

ROC 曲线与 PR 曲线的差异分析:

  1. 指标不同:ROC 曲线关注的是真正例率和假正例率,而 PR 曲线关注的是精确率和召回率。
  2. 数据不平衡下的应用:在正负样本数量不平衡的情况下,PR 曲线更能反映分类器的性能。
  3. 评估重点:ROC 曲线适用于评估分类器在不同阈值下的性能,而 PR 曲线更适用于评估分类器在高精确率或高召回率时的性能。
  4. 阈值选择:ROC 曲线不受类别分布的影响,但 PR 曲线对于类别分布的变化较为敏感。

The Relationship Between Precision-Recall and ROC Curves 中证明了以下两条定理

定理 1:对于一个给定的的数据集,ROC 空间和 PR 空间存在一一对应的关系,因为二者包含完全一致的混淆矩阵。我们可以将 ROC 曲线转化为 PR 曲线,反之亦然。

定理 2:对于一个给定数目的正负样本数据集,曲线 A 在 ROC 空间优于曲线 B ,当且仅当在 PR 空间中曲线 A 也优于曲线 B。

从定理 2 来看,ROC 空间和 PR 空间两个指标似乎具有冗余性,那么为什么还需要这同时两个指标呢?答案是两者在样本不均衡的情况下表现有较大差异。

1. 对比

(1)ROC曲线优点

下图是 ROC 曲线和 Precision-Recall 曲线的对比,摘自 An introduction to ROC analysis

图 (a) 和 (b) 是在样本正负比例为 1:1 下的 ROC 曲线和 PR 曲线,图 (c) 和 (d) 是在样本正负比例为 1:10下的 ROC 曲线和 PR 曲线。

在图中我们可以清楚的观察到,在测试集正负样本发生变化的时候,ROC曲线能够保持基本不变ROC 这种对不平衡样本的稳定性使得其曲线下的面积 AUC 不会发生突变。

(2)PR曲线优点

然而,ROC 曲线不会随着类别分布的改变而改变的优点在一定程度上也是其缺点。因为 ROC 曲线这种不变性其实影响着的是 AUC 值,或者说是评估分类器的整体性能。但是在某些场景下,我们会更关注正样本,这时候就要用到 PR 曲线了。

比如说信用卡欺诈检测,我们会更关注 precision 和 recall,比如说如果要求预测出为欺诈的人尽可能准确,那么就是要提高 precision;而如果要尽可能多地预测出潜在的欺诈人群,那么就是要提高 recall。一般来说,提高二分类的阈值就能提高 precision,降低阈值就能提高 recall,这时便可观察 PR 曲线,得到最优的阈值。

2. 总结

(1)ROC 曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言 PR 曲线关注于正例。

(2)如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则 ROC 曲线比较适合,因为类别分布改变可能使得 PR 曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则 PR 曲线比较适合。

四、不同k值下的ROC曲线及分析

1.导库

这次的ROC曲线绘制在上次kNN算法实验的基础上,对不同k值下的kNN算法进行一个ROC曲线绘制。主要导入了如下库:

# 导入所需的库
import numpy as np
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt

sklearn.metrics.roc_curve用于计算 ROC(接收者操作特征)曲线的函数。roc_curve 函数接受真实标签和预测标签作为输入,然后返回在不同阈值下的 FPR、TPR 和阈值。

sklearn.metrics.roc_auc_score用于计算 ROC 曲线下的面积(Area Under the Curve,AUC)作为性能指标的函数。ROC AUC 是 ROC 曲线下方的面积,通常用来比较不同分类器的性能。ROC AUC 越接近于 1,表示分类器性能越好;越接近于 0.5,表示分类器性能越差。

matplotlib.pyplot一个用于绘制图表的 Python 库。在这里用来将ROC曲线图可视化。

2.代码

在前一次kNN实验下加入如下代码进行ROC曲线的绘制:

y_tes,y_pre=datingclasstest()
# 将列表转换为 NumPy 数组
y_tes = np.array(y_tes)

# 使用 NumPy 数组进行条件替换
y_tes[y_tes == 3] = 0
y_tes[y_tes == 2] = 0

# 将列表转换为 NumPy 数组
y_pre = np.array(y_pre)

# 使用 NumPy 数组进行条件替换
y_pre[y_pre == 3] = 0
y_pre[y_pre == 2] = 0



fpr, tpr, thresholds = roc_curve(y_tes, y_pre)  # 计算ROC曲线的各项指标:假正率(fpr)、真正率(tpr)和阈值(thresholds)
print(roc_auc_score(y_tes, y_pre))
# 绘制ROC曲线和Precision-Recall曲线
plt.figure(figsize=(8, 4))  # 创建一个画布
plt.subplot(121)  # 创建第一个子图用于绘制ROC曲线
plt.plot([0, 1], [0, 1], 'k--')  # 绘制对角线
plt.plot(fpr, tpr, label='ROC curve')  # 绘制ROC曲线
plt.xlim([0.0, 1.0])  # 设置x轴范围
plt.ylim([0.0, 1.05])  # 设置y轴范围
plt.xlabel('False Positive Rate')  # 设置x轴标签
plt.ylabel('True Positive Rate')  # 设置y轴标签
plt.title('Receiver operating characteristic')  # 设置标题
plt.legend(loc="lower right")  # 显示图例
plt.show()  # 显示图形

3.绘制效果

(1)当k=3时:

AUC值为0.941左右

(2)当k为6时:

AUC值为0.952左右

(3)当k为99时:

AUC值为0.897左右

4.总结

由绘制的不同k值下ROC曲线图可以发现,不同k值对应的kNN算法性能各不相同,k=6时性能优于k=3时的算法,但当k值越来越多,如图中所示当k值大到99时性能并没有随之增大,反而差于k=3或6时的算法性能。故可知,最恰当的k值大小不能太小也不能太大,要在具体情况实验中不断获取更为恰当的k值。ROC曲线能够帮助我们对不同的算法模型进行评估帮助我们进行相应的优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值