机器学习————模型评估

目录

一、模型评估介绍

1.1 模型评估概述

1.2 混淆矩阵概述

1.3 分类算法常见指标

1.3.1 准确率(Accuracy)

1.3.2 精准率(Precision)

1.3.3 召回率(Recall)

1.3.4 F1分数(F1 Score)

1.3.5 PR曲线

1.3.6 AUC/ROC曲线

​编辑

1.4  欠拟合与过拟合介绍

1.4.1 欠拟合

1.4.2 过拟合

1.4.3 泛化能力

二、模型评估代码实战

2.1 数据集准备

2.2 KNN分类器并训练

2.3 绘制PR曲线和ROC曲线

2.4 PR与ROC曲线分析

三、模型评估总结

3.1 评估指标总结


一、模型评估介绍

1.1 模型评估概述

机器学习模型的评估方法主要目的是了解模型在训练数据上的表现,以确定模型是否有过拟合或欠拟合的问题,以及模型在新数据上的泛化能力

机器学习模型的评估方法涉及到多个方面,包括损失函数、训练误差、验证误差、测试误差、交叉验证、模型选择等。通过综合考虑这些因素,可以优化模型的性能,并选择具有较好泛化能力的模型。

评估指标是针对模型性能优劣的一个定量指标。一种评价指标只能反映模型一部分性能,如果选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不同的的评价指标

1.2 混淆矩阵概述

混淆矩阵(confusion matrix)是一个评估分类问题常用的工具,对于 k 元分类,其实它是一个k x k的表格,用来记录分类器的预测结果。例如对于常见的二分类,它的混淆矩阵是 2 x 2 的。

在二分类中,可以将样本根据其真实结果和模型的预测结果的组合划分为真阳性(true positive,TP)、真阴性(true negative,TN)、假阳性(false positive,FP)、假阴性(false negative,FN)。根据 TP、TN、FP、FN 即可得到二分类的混淆矩阵,如下图所示。

注意:
第一个字母表示真实值与预测值划分正确与否,T 表示判定正确, F 表示判定错误 (False)。
第二个字母表示分类器判定结果(预测结果), P 表示判定为正例, N 表示判定为负例

1.3 分类算法常见指标

1.3.1 准确率(Accuracy)

准确率指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为:

Accuracy=\frac{TP+TN}{TP+TN+FP+FN}

准确率能够清晰的判断我们模型的表现,但有一个严重的缺陷: 在正负样本不均衡的情况下,占比大的类别往往会成为影响 Accuracy 的最主要因素,此时的 Accuracy 并不能很好的反映模型的整体情况。

例如,一个测试集有正样本99个,负样本1个。模型把所有的样本都预测为正样本,那么模型的Accuracy为99%,看评价指标,模型的效果很好,但实际上模型没有任何预测能力。

1.3.2 精准率(Precision)

精确率又称为查准率,是针对预测结果而言的一个评价指标。指在分类正确的正样本个数占分类器判定为正样本的样本个数的比例。精确率是对部分样本的统计量,侧重对分类器判定为正类的数据的统计。它被定义为:

Precision=\frac{TP}{TP+FP}

1.3.3 召回率(Recall)

召回率指分类正确的正样本个数占真正的正样本个数的比例召回率也是对部分样本的统计量,侧重对真实的正类样本的统计。它被定义为:

Recall=\frac{TP}{TP+FN}

Precision Recall 的权衡
精确率高,意味着分类器要尽量在 “更有把握” 的情况下才将样本预测为正样本, 这意味着精确率能够很好的体现模型对于负样本的区分能力,精确率越高,则模型对负样本区分能力越强

召回率高,意味着分类器尽可能将有可能为正样本的样本预测为正样本,这意味着召回率能够很好的体现模型对于正样本的区分能力,召回率越高,则模型对正样本的区分能力越强

从上面的分析可以看出,精确率与召回率是此消彼长的关系, 如果分类器只把可能性大的样本预测为正样本,那么会漏掉很多可能性相对不大但依旧满足的正样本,从而导致召回率降低。

那么当不同模型的Recall和Precision各有优势时该如何选择模型?此时可以通过F1 Score来比较。

1.3.4 F1分数(F1 Score)

F1 Score精准率召回率的调和平均值,它同时兼顾了分类模型的准确率和召回率,是统计学中用来衡量二分类(或多任务二分类)模型精确度的一种指标。它的最大值是1,最小值是0,值越大意味着模型越好。 它定义为:

F1=2 * \frac{Precision * Recall}{Precision + Recall}

1.3.5 PR曲线

我们知道,分类模型的最后输出往往是一个概率值,我们一般需要把概率值转换为具体的类别,对于二分类来说,我们设置一个阈值(threshold),然后大于此阈值判定为正类,反之负类。

以上评价指标(Accuracy、Precision、Recall)都是针对某个特定阈值来说的,那么当不同模型取不同阈值时,如何全面的评价不同模型?而P-R曲线则是描述精确率和召回率变化的曲线

PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。

绘制步骤为:

PR曲线的横坐标为召回率R,纵坐标为精确率P
1.将预测结果按照预测为正类概率值排序
2.将阈值由1开始逐渐降低,按此顺序逐个把样本作为正例进行预测,每次可以计算出当前的P,R值
3.以P为纵坐标,R为横坐标绘制图像

1.3.6 AUC/ROC曲线

AUC的全拼是Area under the Curve,即曲线下的面积
ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。ROC 曲线是基于混淆矩阵得出的。AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类

ROC曲线的横坐标为假阳性率( False Positive Rate, FPR),即将负例错分为正例的概率 ,医学上称为误诊率; 纵坐标为真阳性率( True Positive Rate, TPR),将正例分对的概率。

横坐标:

FPR=\frac{TP}{FP+TN}

纵坐标:

TPR=\frac{TP}{TP+FN}

在ROC曲线中,设置不同的阈值,会得到不同的TPR和FPR,而随着阈值的逐渐减小越来越多的实例被划分为正类,但是这些正类中同样也掺杂着负类,即TPR和FPR会同时增大。

阈值最大时,所有的正样本预测为负样本,所有的负样本也预测为负样本,即分子都为0,所以FPR = 0, TPR = 0 ,对应坐标点为(0,0)。
阈值最小时,所有的负样本预测为正样本,所有的正样本也预测为正样本,即 FPR = 1, TPR = 1,对应坐标点(1,1)。
而当FPR = 0, TPR = 1时为最优分类点,分类器对应的ROC曲线应该尽可能靠近坐标轴的左上角,而对角线的位置意味着分类器的效果和随机猜测一样的差。
  ROC曲线在测试集中的样本分布发生变化的时候能够保持不变。 但遗憾的是,很多时候, ROC 曲线并不能清晰的说明哪个分类器的效果更好, 而 AUC 恰恰能够对分类器做出直观的评价。

AUC-ROC曲线下的面积(area under the curve)
AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好

AUC = 1: 完美的分类器,采用该模型,不管设定什么阈值都能得出完美预测(绝大多数时候不存在)
0.5 < AUC < 1: 优于随机猜测,分类器好好设定阈值的话,有预测价值
AUC = 0.5: 跟随机猜测一样,模型没有预测价值
AUC < 0.5 :比随机猜测还差,但是如果反着预测,就优于随机猜测。

绘制步骤:

1.假设已经得出一系列样本被划分为正类的概率Score值,按照大小排序。
2.从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于某个样本,其“Score”值为0.6,那么“Score”值大于等于0.6的样本都被认为是正样本,而其他样本则都认为是负样本。
3.每次选取一个不同的threshold,得到一组FPR和TPR,以FPR值为横坐标和TPR值为纵坐标,即ROC曲线上的一点。
4.根据3中的每个坐标点,画图。

1.4  欠拟合与过拟合介绍

1.4.1 欠拟合

指在机器学习和深度学习过程中,模型对训练数据的拟合程度不足,无法很好地捕捉到数据中的规律和特征。

欠拟合通常表现为模型在训练集和测试集上的性能均较差,无法达到预期的效果。欠拟合的主要原因是模型复杂度不够,无法有效地学习到数据的内在结构。

欠拟合的一般常见解决方法:

1.增加模型复杂度:提高模型的学习能力,以便更好地捕捉数据中的特征和规律。例如,增加网络层数、神经元数量等。
2.使用更有效的特征:通过特征提取、特征选择等方法,提高特征的代表性,使模型能够更好地学习数据中的内在结构。
3.优化算法和超参数:调整优化算法(如梯度下降法、Adam 等)和超参数(如学习率、批次大小等),以提高模型的学习效果。
4.数据增强:通过对训练数据进行变换、扩充等操作,增加数据的多样性,提高模型的泛化能力。
5.使用预训练模型:利用在大量数据上预训练好的模型进行迁移学习,可以有效地提高模型在目标任务上的性能。

1.4.2 过拟合

指在机器学习和深度学习过程中,模型对训练数据的拟合程度过高,以至于在面对新的、未曾在训练集中出现的数据时,模型的泛化能力较差的现象。

过拟合通常表现为模型在训练集上的性能很好,但在测试集和实际应用中的表现较差。过拟合的主要原因是模型学习能力过强,过于关注训练集中的单个样本特点,将其认为是普遍规律,从而导致模型在面对新数据时泛化能力下降

过拟合的一般常见解决方法:

1.增加训练数据量:更多的训练数据可以提高模型的泛化能力,降低过拟合的风险。
2.数据抽样:对训练数据进行抽样,降低数据集的复杂度,从而降低模型的过拟合风险。
3.减小模型复杂度:过于复杂的模型容易过拟合,通过降低模型复杂度(如减少网络层数、减少神经元数量等),可以降低过拟合的风险。
1.正则化方法:在损失函数中加入正则化项,如 L1 正则化、L2 正则化等,可以限制模型的复杂度,降低过拟合的风险。
5.早停法:在训练过程中,采用验证集(交叉验证等方法)监控模型性能,当模型性能不再提升时,提前终止训练,以防止模型在训练集上过拟合。

1.4.3 泛化能力

指机器学习模型在面临未曾见过的数据时,能够保持良好性能的能力。换句话说,泛化能力是指模型在学习到数据中的规律和特征后,能够对新的、未曾在训练集中出现的数据做出准确的预测和处理。
泛化能力的重要性在于,它衡量了模型在实际应用中的性能,确保了模型不仅仅是在训练集上表现良好,而是在新的数据上也能有很好的表现。为了提高泛化能力,研究人员通常会采用各种方法,如数据抽样、正则化、交叉验证等。

二、模型评估代码实战

本次实战代码主要是为用来绘制PR曲线和ROC曲线,进行对比和不同k值下的比较。所以直接使用的sklearn库来简化训练过程。

2.1 数据集准备

本次实战中使用了Sklearn库中的make_classification函数来生成了一个二分类数据集(包含1000个样本,10个特征,并使用random_state设置随机种子,保证每次运行的模型都相同),并使用train_test_split函数将其划分为训练集和测试集

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import precision_recall_curve, roc_curve, auc

# 生成数据集
X, y = make_classification(n_samples=1000, n_classes=2, n_features=10, random_state=55)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

2.2 KNN分类器并训练

定义一个KNN分类器,其中k值为5(之后不同的k值就在这里更改)。使用训练集训练KNN模型。

# 定义KNN分类器
knn = KNeighborsClassifier(n_neighbors=5)

# 训练模型
knn.fit(X_train, y_train)

2.3 绘制PR曲线和ROC曲线

使用测试集进行预测,并计算预测结果的PR曲线和ROC曲线。绘制PR曲线和ROC曲线。

# 预测测试集
y_pred = knn.predict(X_test)

# 计算PR曲线和ROC曲线
precision, recall, _ = precision_recall_curve(y_test, y_pred)
fpr, tpr, _ = roc_curve(y_test, y_pred)
roc_auc = auc(fpr, tpr)

# 绘制PR曲线
plt.figure(figsize=(8, 6))
plt.plot(recall, precision, color='blue', lw=2, label='PR Curve (AUC = %0.2f)' % auc(precision, recall))
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('PR Curve')
plt.legend(loc='lower right')
plt.show()

# 绘制ROC曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='red', lw=2, label='ROC Curve (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc='lower right')
plt.show()

2.4 PR与ROC曲线分析

效果:

PR与ROC曲线的差异:

PR曲线:

1.反映模型在不同阈值下的性能:通过调整分类阈值,可以观察到模型在不同阈值下的精确率和召回率变化,从而找到最佳阈值。
2.适用于不平衡数据集:PR 曲线能够在类别不平衡的情况下,更好地评估模型的性能。对于多数类别的样本,召回率较低,而對於少数类别的样本,召回率较高。
3.综合评价模型性能:PR 曲线将精确率和召回率结合起来,提供更全面的模型性能评估。在优化模型时,可以关注 PR 曲线,以实现精确率和召回率的平衡。
4.易于理解和解释:PR 曲线直观地展示了模型在不同阈值下的性能,便于研究人员和用户理解和解释模型的性能。

ROC曲线:

1.适用于不同阈值:ROC 曲线可以反映模型在不同阈值下的性能,有助于找到最佳的分类阈值。
2.强调真正例的重要性:在 ROC 曲线中,TPR 表示真正例被正确分类的比例,因此 ROC 曲线可以用于评估模型对真正例的识别能力。
3.抗干扰性:ROC 曲线不受数据不平衡的影响,因此在类别不平衡的情况下,它仍然可以有效地评估模型的性能。
4.综合评价模型性能:ROC 曲线中的 AUC(Area Under Curve)可以作为评估模型性能的指标,AUC 值越大,模型的性能越好。
5.易于理解和解释:ROC 曲线直观地展示了模型在不同阈值下的性能,便于研究人员和用户理解和解释模型的性能。

不同K值下的ROC曲线:

K=2

K=5

根据实验发现,

当 K 较小时(如 K=2、3、4、5),模型更注重每个样本周围的少量邻居,这可能导致模型在训练集和测试集上表现差异较大,因此 ROC 曲线的 AUC 也会随着 K 值的变化而变化。

随着 K 值的增加(在K=5以后),模型更注重更多的邻居,因此可能会导致模型的泛化性能提高,从而 AUC 也趋于稳定。

三、模型评估总结

3.1 评估指标总结

通过对比上面的评估指标,总结概况如下:

精确率(Precision)是指在所有系统判定的“真”的样本中,确实是真的的占比。
召回率(Recall)是指在所有确实为真的样本中,被判为的“真”的占比。
F1值是为了综合考量精确率和召回率而设计的一个指标。
TPR(真阳性率)的定义,跟Recall一样。
FPR(假阳性率),又被称为误诊率,就是所有确实为“假”的样本中,被误判真的样本。
ROC曲线展示的是 TPR 与 FPR的曲线;与之对应的是PR曲线,展示的是Precision 与 Recall的曲线。
AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好。
对于最终分类指标的选择,在不同数据集,不同场景,不同时间下都会有不同的选择。对于二分类问题,通常用 AUC,而对于多分类,通常看 F1 值。

  • 30
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值