机器学习(四) -- 模型评估(2)

本文详细介绍了机器学习中的模型评估,包括分类模型的错误率、精度、混淆矩阵、查准率、查全率、F1值、P-R曲线、ROC曲线与AUC,以及scikit-learn中的分类报告工具。通过实例演示了如何使用这些度量方法来评估模型性能。
摘要由CSDN通过智能技术生成

系列文章目录及链接

上篇:机器学习(四) -- 模型评估(1)
下篇:机器学习(四) -- 模型评估(3)
           机器学习(四) -- 模型评估(4)


前言

tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被“文章内容”删除线标记的,也可以自行跳过。“!!!”一般需要特别注意或者容易出错的地方。

本系列文章是作者边学习边总结的,内容有不对的地方还请多多指正,同时本系列文章会不断完善,每篇文章不定时会有修改。


衡量模型泛化能力的评价标准就是性能度量(模型评估指标、模型评价标准),而针对不同的任务有不同的评价指标。按照数据集的目标值不同,可以把模型评估分为分类模型评估、回归模型评估和聚类模型评估。

三、分类模型评估指标

错误率与精度(准确率)、混淆矩阵、查准率(精确率)、查全率(召回率)与F1值(F1_score)、PR曲线、ROC与AUC

1、错误率与精度(准确率)

概述里面就说过了,这是分类任务中最常用的两种性能度量。

错误率(error rate):分类错误的样本数/样本总数

​​

(公式还是要知道的,Ⅱ(*)是指示函数,在*为真(假)时取值为1(0))

精度(accuracy,准确率):1-错误率=分类正确的样本数/样本总数

​​

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split


# 引入数据集
iris = load_iris()

# 划分数据集以及模型训练
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=134)

# 模型训练
model = DecisionTreeClassifier()
model.fit(x_train, y_train)

​​

模型训练那一部分可以先不用管,我们现在主要是了解性能度量。

from sklearn.metrics import accuracy_score
# 精度
accuracy_score(y_test, model.predict(x_test))

 ​​

为了更形象一点,我们直接使用自制数据。

​​

2、查准率(精确率)、查全率(召回率)与F1值(F1_score)

2.1、混淆矩阵(confusion matrix)

混淆矩阵是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。如下,是一个二分类问题结果的混淆矩阵。

真实情况预测结果
P(正例)N(反例)
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

 预测结果是我们看到的,也就是经过模型计算出来的结果,TP+FP+TN+FN=样例总数。

API:

from sklearn.metrics import confusion_matrix

还是用刚才的自制数据来看哈,就很明了了。

​​

三分类问题在用混淆矩阵时,得到的是一个 3 X 3 的矩阵。此时预测结果和真实情况不再以正例、反例命名,而是数据集真实的分类结果。用鸢尾花结果来看。

​​

2.2、查准率(precision,精确率)

分类正确的正样本个数占预测结果为正的样本个数的比例。

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

API:

from sklearn.metrics import precision_score

​​

2.3、查全率(recall,召回率)

分类正确的正样本个数占真实值为正的样本个数的比例。

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

API:

from sklearn.metrics import recall_score

​​

!!!注意:precision_score 和 recall_score 方法默认用来计算二分类问题,若要计算多分类问题,则需要设置 average 参数。
average:评价值的平均值的计算方式。
        可以接收[None, 'binary' (default), 'micro', 'macro', 'weighted']
        'micro', 'macro':微和宏,下面会说到。
        ' weighted ' : 相当于类间带权重。各类别的P × 该类别的样本数量(实际值而非预测值)/ 样本总数量

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

2.4、P-R图

( P-R 曲线只能用于二分类问题)以查准率为纵轴、查全率为横轴作图,就得到查准率-查全率曲线,简称“P-R 曲线”,显示该曲线的图称为“P-R”图。

​​

若一个学习器的 P-R 曲线被另一个学习器的 P-R 曲线完全“包住”,则可断言后者的性能优于前者。

若两个学习器的 P-R 曲线发生了交叉,例如学习器 A 与 B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。

平衡点(Break-Even Point,简称 BEP):查准率=查全率时的取值。综合考虑查准率、查全率的性能度量,基于该方法则可断言学习器 A 优于学习器 B。

2.5、F1值(F1_score)

F1值是基于查准率与查全率的调和平均(harmonic mean)定义的:

​​

n为样例总数。

在一些应用中,对查准率和查全率的重视程度有所不同,会相应地添加权重。

Fβ则是加权调和平均定义:

​​

其中β>0 度量了查全率对查准率的相对重要性。
        β=1时退化为标准的 F1;
        β>1 时查全率有更大影响;
        β<1 时查准率有更大影响。

API

from sklearn.metrics import f1_score
from sklearn.metrics import fbeta_score
from sklearn.metrics import f1_score

f1_score(y_true,y_predict)



from sklearn.metrics import fbeta_score

print(fbeta_score(y_test, model.predict(x_test), beta=1, average='weighted'))

# 查全率有更大影响
print(fbeta_score(y_test, model.predict(x_test), beta=2, average='weighted'))

# 查准率有更大影响
print(fbeta_score(y_test, model.predict(x_test), beta=0.5, average='weighted'))

​​

​​

2.6、其他

很多时候我们有多个二分类混淆矩阵,需要进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计算法的“全局”性能,甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵。总之,希望在 n 个二分类混淆矩阵上综合考察查准率和查全率。

所以就有了

宏查准率(macro-P)、宏查全率(macro-R)和宏F1(macro-F1)

微查准率(micro-P)、微查全率(micro-R)和微F1(micro-F1)

宏:先计算再平均

​​

微:先平均再计算 

​​

print(f1_score(y_test, model.predict(x_test), average='macro'))


print(f1_score(y_test, model.predict(x_test), average='micro'))

​​

3、ROC与AUC

很多学习器为测试样本产生一个实值或概率预测,然后将这个预测值与一个“分类阈值”进行比较,大于阈值则分为正类,否则为负类。

分类阈值也就是截断点(cut point)。分类过程就相当于在排序中以某个“截断点”将样本分为两部分,前一部分判作正例,后一部分则判作反例。

在不同的应用任务中,可根据任务需求来采用不同的截断点。
        查准率:选择排序中靠前的位置进行截断。
        查全率:选择排序中靠后的位置进行截断。

ROC 全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,以“真正例率(True Positive Rate,简称 TPR)”为纵轴,以“假正例率(False Positive Rate,简称 FPR)”为横轴作图,就得到了“ROC曲线”。

​​

API:

from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
from sklearn.metrics import auc
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
from sklearn.metrics import auc
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei' # 设置字体为SimHei # 显示中文
plt.rcParams['axes.unicode_minus']=False # 修复负号问题


fpr,tpr,thresholds=roc_curve(y_true,y_predict)

plt.plot(fpr, tpr)
plt.axis("square")
plt.xlabel("假正例率/False positive rate")
plt.ylabel("正正例率/True positive rate")
plt.title("ROC curve")
plt.show()

​​

AUC(Area Under ROC Curve): ROC 曲线下的面积大小。该值能够量化地反映基于 ROC 曲线衡量出的模型性能。AUC值(面积)越大的分类器,性能越好。

!!!注意:roc_curve() 同 precision_recall_curve(),都只能用于二分类问题,但 roc_auc_score() 方法支持计算多分类问题的 auc 面积。

4、分类报告

scikit-learn 中提供了一个非常方便的工具,可以给出对分类问题的评估报告,Classification_report() 方法能够给出精确率(precision)、召回率(recall)、F1 值(F1-score)和样本数目(support)。

API:

from sklearn.metrics import classification_report
from sklearn.metrics import classification_report

# 自制数据
print(classification_report(y_true,y_predict))

# 鸢尾花数据
print(classification_report(y_test, model.predict(x_test)))


旧梦可以重温,且看:机器学习(四) -- 模型评估(1)
欲知后事如何,且看:机器学习(四) -- 模型评估(3)
                                    机器学习(四) -- 模型评估(4)

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习模型评估、选择和验证是指评估模型的性能、从多个模型中选择最佳模型,并验证模型的泛化能力。常用的评估方法包括准确率、精确率、召回率、F1 分数、ROC 曲线和 AUC 等。常用的选择方法包括交叉验证、超参数调优、学习曲线分析等。 ### 回答2: 机器学习的目标是通过训练来构建模型,以便能够高效地预测未知数据。但是,模型的准确性不仅取决于所使用的算法,还取决于其它因素,例如数据和参数设置。 模型评估能够帮助我们了解模型性能的好坏。评估算法的过程通常涉及到数据划分、交叉验证和各种评估指标。一般来说,数据划分的过程将数据集拆分成训练集和测试集。用训练集来构建模型并进行参数调整,然后使用测试集来衡量模型的性能。交叉验证是在数据集合上的一个更安全和更可靠的方法,它将原始数据集划分成K个互斥的子集,并使用K-1个子集来训练模型,用剩余的子集来评估模型的性能。 选择正确的模型非常关键,因为模型的性能可以直接影响结果的准确性。选择模型的一个重要因素是如何表示数据集。数据可以使用多种方式表示,而不同的数据表示方式有不同的优劣。选择适当的模型是当然的,但是我们还应该使用技术来优化模型,并防止模型过度拟合或欠拟合。 模型验证是评估模型如何执行任务的最终步骤。验证后,我们可以使用模型进行预测并将其应用于新数据。如果模型的性能不符合要求,可以通过重新评估、更改数据集或改变模型参数来尝试改善。模型验证是机器学习流程中非常重要的一部分,可以确保我们的模型效果良好,从而为我们提供可靠的预测结果。 总之,机器学习是一种建立复杂模型的方法,不同的算法、数据表示方式和参数会影响其性能。为了找到最佳模型,我们需要进行模型评估、选择和验证等工作。这些步骤是机器学习流程的关键组成部分,可以帮助我们构建高效且准确的模型,从而应对各种实际应用场景。 ### 回答3: 机器学习是一种人工智能领域的重要技术,它允许计算机从历史数据中学习,建立预测模型,并用于未来的数据预测和决策。模型评估、选择与验证是机器学习过程中的重要一环,以保证模型的准确性、稳定性和泛化能力。 模型评估的目的是检验模型的表现,并度量其优劣。常用的评估指标包括精确度、召回率、F1值等,这些指标可以用于比较不同模型之间的性能表现。评估模型时,通常需要将数据集划分为训练集和测试集,训练集用于训练模型,而测试集用于评估模型性能。评估模型的结果可以指导我们调整模型的参数,提高模型的预测精度模型选择是在多个模型中选择最合适的模型。常用的模型选择方法包括交叉验证、留一法等。交叉验证是将数据集分成k个子集,每个子集轮流作为测试集进行模型评估,其余部分用于训练模型,最后将测试集误差取平均值作为综合误差来评估模型的性能。 模型验证是对模型的泛化能力的验证。泛化能力是指模型对未知数据的预测精度,即模型是否能够对新数据进行较好的预测。在模型验证中,需要将数据集划分为训练集、验证集和测试集。在训练集中训练模型,在验证集上调整模型参数,并在测试集上验证模型的泛化能力。常用的验证方法包括留存法、k折交叉验证等。 综上所述,模型评估、选择与验证对于机器学习中的预测模型非常重要。这些技术可以保证模型的准确性和稳定性,并提高模型的泛化能力,为数据分析和预测提供可靠依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值