ml
  • Introduction
  • 机器学习基础
    • 机器学习基础_距离
    • 机器学习基础_概率论基础
    • 机器学习基础_线性代数基础
    • 机器学习基础_微积分基础
    • 机器学习基础_最优化理论
    • 机器学习基础_损失函数
  • 特征工程
    • 特征工程_归一化
    • 特征工程_编码
    • 特征工程_特征组合
    • 特征工程_特征选择
    • 特征工程_文本表示模型
    • 特征工程_图像增强
  • 模型评估
    • 模型评估_评估指标
    • 模型评估_AB测试
    • 模型评估_过拟合和欠拟合
    • 模型评估_超参数选择
    • 模型评估_模型评估方法
  • 降维
    • 降维_PCA主成分分析
    • 降维_LDA线性判别分析
  • 监督学习
    • 监督学习_朴素贝叶斯分类
    • 监督学习_决策树
    • 监督学习_K近邻法
    • 监督学习_支持向量机
    • 监督学习_CRF
  • 非监督学习
    • 非监督学习_K均值
    • 非监督学习_Mean_Shift均值漂移聚类
    • 非监督学习_DBSCAN基于密度的聚类方法
    • 非监督学习_Hierarchical_Clustering层次聚类
    • 非监督学习_Spectral_Clustering谱聚类
  • 半监督学习
  • 集成学习
  • 强化学习
Powered by GitBook
On this page
  • 评估指标
  • 准确率(Accuracy)
  • 精确度(Precision)
  • 召回率(Recall)
  • 均方根误差(RMSE)
  • F1得分
  • P-R曲线
  • ROC曲线
  • ROC曲线概念
  • 绘制ROC曲线
  • ROC和P-R曲线
  • AUC曲线
  • 聚类指标
  • 回归指标

Was this helpful?

  1. 模型评估

模型评估_评估指标

Previous模型评估Next模型评估_AB测试

Last updated 2 years ago

Was this helpful?

[TOC]

评估指标

准确率(Accuracy)

准确率是指分类正确的样本占总样本个数的比例,即

错误率是指分类错误的样本数占样本总数的比例,即

精确度(Precision)

相关(Relevant),正类
无关(NonRelevant),负类

被检索到 (Retrieved)

true positives(TP正类判定为正类,例子中就是正确的判定“这位是女生")

false positives(FP负类判定为正类,“存伪",例子中就是分明是男生却判断为女生,当下伪娘横行,这个错常有人犯)

未被检索到 (not Retrieved)

false negatives(FN正类判定为负类,“去真”,例子中就是,分明是女生,这哥们却判断为男生--梁山伯同学犯的错就是这个)

true negatives(TN负类判定为负类,也就是一个男生被判断为男生, 像我这样的纯爷们一准儿就会在此处)

根据这四种数据,有四个比较重要的比率:

灵敏度表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力:

特效度表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力:

召回率(Recall)

均方根误差(RMSE)

概念: RMSE经常被用来衡量回归模型的好坏,计算公式为

事实上,在流量预估这个问题中,噪声点确实是很容易产生的,比如流量特别小的美剧、刚上映的美剧或者刚获奖的美剧,甚至一些相关社交媒体突发事件带来的流量,都可能会造成离群点。

解决: 可以从三个角度来思考。

第一, 如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉。

第二,如果不认为这些离群点是“噪声点”的 话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去(这是一个宏大的话题,这里就不展开讨论了)。

第三,可以找一个更合适的指标来评估该模型。

F1得分

P-R曲线

原点附近代表当阀值最大时模型的精确率和召回率。

ROC曲线

ROC曲线概念

ROC曲线是Receiver Operating Characteristic Curve的简称, 中文名为“受试者工作特征曲线”。

通过下面的例子进一步来解释“截断点”的 概念。 在二值分类问题中,模型的输出一般都是预测样本为正例的概率。

样本序号
真实标签
模型输出概率
样本序号
真实标签
模型输出概率

1

p

0.9

11

p

0.4

2

p

0.8

12

n

0.39

3

n

0.7

13

p

0.38

4

p

0.6

14

n

0.37

5

p

0.55

15

n

0.36

6

p

0.54

16

n

0.35

7

n

0.53

17

p

0.34

8

n

0.52

18

n

0.33

9

p

0.51

19

p

0.30

10

n

0.505

20

n

0.1

假设测试集中有20个样本,表2.1是模型的输出结果。样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个 阈值,预测概率大于该阀值的样本会被判为正例,小于该阈值的样本则会被判为负例。

比如,指定阀值为0.9,那么只有第一个样本会被预测为正例,其他全部都是负例。

绘制ROC曲线

  1. 再根据模型输出的预测概率对样本进行排序(从高到低);

ROC和P-R曲线

这有什么实际意义呢?在很多实际问题中,正负样本数量往往很不均衡。比如,计算广告领域经常涉及转化率模型,正样本的数量往往是负样本数量的1/1000甚至1/10000。

AUC曲线

聚类指标

一个好的聚类方法可以产生高品质簇,是的簇内相似度高,簇间相似度低。一般来说,评估聚类质量有两个标准,内部质量评价指标和外部评价指标。

内部质量评价标准

  1. 轮廓系数(Silhouette Coefficient)

  2. Calinski-Harabaz指数(Calinski-Harabaz Index)

  3. 戴维森堡丁指数(DBI, Davies-Bouldin Index)

内部评价指标是利用数据集的属性特征来评价聚类算法的优劣。通过计算总体的相似度,簇间平均相似度或簇内平均相似度来评价聚类质量。评价聚类效果的高低通常使用聚类的有效性指标,所以目前的检验聚类的有效性指标主要是通过簇间距离和簇内距离来衡量。这类指标常用的有CH(Calinski-Harabasz)指标等

CH指标:

簇的凝聚度:

簇内点对的平均距离反映了簇的凝聚度,一般使用组内误差平方(SSE)表示

簇的邻近度:

外部质量评价标准

  1. 兰德指数(RI, Rand index)

  2. 调整兰德系数(Adjusted Rand index)

  3. 标准化互信息(NMI, Normalized Mutual Information)

外部质量评价指标是基于已知分类标签数据集进行评价的,这样可以将原有标签数据与聚类输出结果进行对比。

外部质量评价指标的理想聚类结果是:具有不同类标签的数据聚合到不同的簇中,具有相同类标签的数据聚合相同的簇中。外部质量评价准则通常使用熵,纯度等指标进行度量。

熵:

纯度:

回归指标

SSE(和方差、误差平方和):The sum of squares dueto error MSE(均方差、方差):Meansquared error RMSE(均方根、标准差):Root mean squared error R-square(确定系数):Coefficientof determination Adjusted R-square:Degree-of-freedomadjusted coefficient of determination

SSE:

R-square:

Adjusted R-square:

AIC赤池信息准则:

估计模型拟合数据的优良性,AIC值越小说明模型拟合得越好

Accurcy=ncorrectntotal=TP+TNTP+TN+FP+FNAccurcy=\frac{n_{correct}}{n_{total}}=\frac{TP+TN}{TP+TN+FP+FN}Accurcy=ntotal​ncorrect​​=TP+TN+FP+FNTP+TN​

其中ncorrectn_{correct}ncorrect​为被正确分类的样本个数,ntotaln_{total}ntotal​为总样本的个数。 准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。 所以,当不同类别的样本比例非常不均衡时, 占比大的类别往往成为影响准确率的最主要因素。

ErrorRate=1−Accurcy=FP+FNTP+TN+FP+FNErrorRate=1-Accurcy=\frac{FP+FN}{TP+TN+FP+FN}ErrorRate=1−Accurcy=TP+TN+FP+FNFP+FN​

精确率是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例。 召回率是指分类正确的正样本个数占真正的正样本个数的比例。 在排序问题中,通常没有一个确定的闽值把得到的结果直接判定为正样本或负样本,而是采用TopNTopNTopN返回结果的PrecisionPrecisionPrecision值和RecallRecallRecall值来衡量排序模型的性能,即认为模型返回的TopNTop NTopN的结果就是模型判定的正样本,然后计算前NNN个位置上的准确率Precision@NPrecision@NPrecision@N和前NNN个位置上的召回率Recall@NRecall@NRecall@N。

TruePositiveRate(真正率TPR或灵敏度sensitivity)=TPR=TPTP+FN=正样本预测结果数正样本实际数TrueNegativeRate(真负率TNR或特指度specificity)=TNR=TNTN+FP=负样本预测结果数负样本实际数FalsePositiveRate(假正率FPR)=FPR=FPFP+TN=被预测为正的负样本结果数负样本实际数FalseNegativeRate(假负率FNR)=FNR=FNTP+FN=被预测为负的正样本结果数正样本实际数True Positive Rate(真正率TPR或灵敏度sensitivity)=TPR=\frac{TP}{TP+FN}=\frac{正样本预测结果数}{正样本实际数} \\ True Negative Rate(真负率TNR或特指度specificity)=TNR=\frac{TN}{TN+FP}=\frac{负样本预测结果数}{负样本实际数} \\ False Positive Rate(假正率FPR)=FPR=\frac{FP}{FP+TN}=\frac{被预测为正的负样本结果数}{负样本实际数} \\ False Negative Rate(假负率FNR)=FNR=\frac{FN}{TP+FN}=\frac{被预测为负的正样本结果数}{正样本实际数} \\TruePositiveRate(真正率TPR或灵敏度sensitivity)=TPR=TP+FNTP​=正样本实际数正样本预测结果数​TrueNegativeRate(真负率TNR或特指度specificity)=TNR=TN+FPTN​=负样本实际数负样本预测结果数​FalsePositiveRate(假正率FPR)=FPR=FP+TNFP​=负样本实际数被预测为正的负样本结果数​FalseNegativeRate(假负率FNR)=FNR=TP+FNFN​=正样本实际数被预测为负的正样本结果数​
Sensitive=TPPSensitive = \frac{TP}{P}Sensitive=PTP​
specificity=TNNspecificity = \frac{TN}{N}specificity=NTN​

精确率(precision)计算的是所有“正确被检索的结果(TP)“占所有“实际被检索到的(TP+FP)(TP+FP)(TP+FP)"的比例:

P=TPTP+FPP=\frac{TP}{TP+FP}P=TP+FPTP​

在例子中就是希望知道此君得到的所有人中,正确的人(也就是女生)占有的比例,所以其precisionprecisionprecision也就是40%(20女生(20女生+30误判为女生的男生)\frac{20女生}{(20女生+30误判为女生的男生)}(20女生+30误判为女生的男生)20女生​).

召回率(recall)的公式是R=TPTP+FNR=\frac{TP}{TP+FN}R=TP+FNTP​,它计算的是所有“正确被检索的结果(TP)“占所有“应该检索到的结果(TP+FN)(TP+FN)(TP+FN)"的比例. 在例子中就是希望知道此君得到的女生占本班中所有女生的比例,所以其recallrecallrecall也就是100%(20女生(20女生+0误判为男生的女生)\frac{20女生}{(20女生+0误判为男生的女生)}(20女生+0误判为男生的女生)20女生​)

RMSE=∑i=1n(yi−y^)2nRMSE=\sqrt{\frac{\sum_{i=1}^{n}{(y_i-\hat y)^2}}{n}}RMSE=n∑i=1n​(yi​−y^​)2​​

其中,yiy_iyi​ 是第iii个样本点的真实值,y^\hat yy^​ 是第iii个样本点的预测值,nnn是样本点的个数。

​ 一般情况下,RMSRMSRMSE能够很好地反映回归模型预测值与真实值的概念偏离程度。

缺点: 但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSERMSERMSE指标变得很差。 回到问题中来,模型在95%的时间区间内的预测误差都小于1%, 这说明在大部分时间区间内,模型的预测效果都是非常优秀的。然而RMSERMSERMSE却一直很差,这很可能是由于在其他的5%时间区间内存在非常严重的离群点。

关于评估指标,其实是存在比RMSERMSERMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error,MAPE),它定义为

MAPE=∑i=1n∣yi−y^yi∣×100nMAPE=\sum_{i=1}{n}{|\frac{y_i-\hat y}{y_i}|}\times \frac{100}{n}MAPE=i=1∑​n∣yi​yi​−y^​​∣×n100​

相比RMSERMSERMSE,MAPEMAPEMAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。

除此之外,F1scoreF1scoreF1score和ROCROCROC曲线也能综合地反映一个排序模型的性能。

F1scoreF1scoreF1score是精准率和召回率的调和平均值,它定义为

F1=2×precision×recallprecision+recallF1=\frac{2 \times precision \times recall}{precision + recall}F1=precision+recall2×precision×recall​

为了综合评估一个排序模型的好坏,不仅要看模型在不同TopNTopNTopN下的Precision@NPrecision@NPrecision@N和Recall@NRecall@NRecall@N,而且最好绘制出模型的P−RP-RP−R(Precision-Recall)曲线。

P−RP-RP−R曲线的横轴是召回率,纵轴是精确率。

对于一个排序模型来说, 其P−RP-RP−R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。

整条P−RP-RP−R曲线是通过将阈值从高到低移动而生成的。

图是P−RP-RP−R曲线样例图,其中实线代表模型AAA的P−RP-RP−R曲线,虚线代表模型BBB的P−RP-RP−R曲线。

ROCROCROC曲线源于军事领域,而后在医学领域应用甚广,“受试者工作特征曲线”这一名称也正是来自医学领域。

ROCROCROC曲线的横坐标为假阳性率(False Positive Rate, FPRFPRFPR);纵坐标为真阳性率(True Positive Rate, TPRTPRTPR)。FPRFPRFPR和TPRTPRTPR的计算方法分别为

FPR=FPN,TPR=TPPFPR=\frac{FP}{N} ,TPR=\frac{TP}{P}FPR=NFP​,TPR=PTP​

式中,PPP是真实的正样本的数量,NNN是真实的负样本的数量,TPTPTP是PPP个正样本中被分类器预测为正样本的个数,FPFPFP是NNN个负样本中被分类器预测为正样本的个数。

假设有10位疑似癌症患者,其中有3位很不幸确实患了癌症(P=3P=3P=3),另外7位不是癌症患者(N=7N=7N=7)。医院对这10位疑似患者做了诊断,诊断出3位癌症患者,其中有2位确实是真正的患者(TP=2TP=2TP=2)。

那么真阳性率TPR=TPP=23TPR=\frac{TP}{P}=\frac{2}{3}TPR=PTP​=32​。对于7位非癌症患者来说,有一位很不幸被误诊为癌症患者(FP=1FP=1FP=1),那么假阳性率FPR=FPN=17FPR=\frac{FP}{N}=\frac{1}{7}FPR=NFP​=71​。

对于“该医院”这个分类器来说,这组分类结果就对应ROC曲线上的一个点(17,23\frac{1}{7}, \frac{2}{3}71​,32​)。 事实上,ROC曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的。

上面所说的“截断点”指的就是区分正 预测结果的阈值。 通过动态地调整截断点,从最高的得分开始(实际上是从正无穷开始,对应着ROCROCROC曲线的零点),逐渐调整到最低得分,每一个截断点都会对应一个FPRFPRFPR和TPRTPRTPR,在ROCROCROC图上绘制出每个截断点对应的位置, 再连接所有点就得到最终的ROCROCROC曲线。

就本例来说,当截断点选择为正无穷时,模型把全部样本预测为负例,那么FPFPFP和TPTPTP必然都为0,FPRFPRFPR和TPRTPRTPR也都为0,因此曲线的第 一个点的坐标就是(0,0)(0,0)(0,0)。

当把截断点调整为0.9时,模型预测1号样本为正样本,并且该样本确实是正样本,因此TP=1TP=1TP=1,20个样本中, 所有正例数量为P=10P=10P=10,故TPR=TPP=110TPR=\frac{TP}{P}=\frac{1}{10}TPR=PTP​=101​;

这里没有预测错的正样本, 即FP=0FP=0FP=0,负样本总数N=10N=10N=10,故FPR=FPN=010=0FPR=\frac{FP}{N}=\frac{0}{10}=0FPR=NFP​=100​=0,对应ROC曲线上的点(0,0.1)(0,0.1)(0,0.1)。

依次调整截断点,直到画出全部的关键点,再连接关键点即得到最终的ROCROCROC曲线,如下图所示。

其实,还有一种更直观地绘制ROCROCROC曲线的方法。

首先,根据样本 标签统计出正负样本的数量,假设正样本数量为PPP,负样本数量为NNN;

接下来,把横轴的刻度间隔设置为1/N1/N1/N,纵轴的刻度间隔设置为1/P1/P1/P;

依次遍历样 本,同时从零点开始绘制ROCROCROC曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在(1,1)(1,1)(1,1)这个点, 整个ROCROCROC曲线绘制完成。

可以看出,P−RP-RP−R曲线发生了明显的变化,而ROCROCROC曲线形状基本不变。

这个特点让ROCROCROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。

若选择不同的测试集,P−RP-RP−R曲线的变化就会非常大,而ROCROCROC曲线则能够更加稳定地反映模型本身的好坏。

所以,ROCROCROC曲线的适用场景更多,被广泛用于排序、推荐、广告等领域。

但需要注意的是,选择P−RP-RP−R曲线还是ROCROCROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P−RP-RP−R曲线则能够更直观地反映其性能。

顾名思义,AUCAUCAUC指的是ROCROCROC曲线下的面积大小,该值能够量化地反映基于ROCROCROC曲线衡量出的模型性能。

计算AUCAUCAUC值只需要沿着ROCROCROC横轴做积分就可以了。

由于ROCROCROC曲线一般都处于y=xy=xy=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p1-p1−p就可以得到一个更好的分类器),所以AUCAUCAUC的取值一般在[0.5,1][0.5,1][0.5,1]之间。

AUCAUCAUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

CH(K)=tr(B)/(K−1)tr(W)/(N−K)tr(B)=∑j=1k∣∣zj−z∣∣2tr(W)=∑j=1k∑xi∈zk∣∣xi−zj∣∣2CH(K)=\frac{tr(B)/(K-1)}{tr(W)/(N-K)} \\ tr(B)=\sum_{j=1}^{k}{||z_j-z||^2} \\ tr(W)=\sum_{j=1}^{k}{\sum_{x_i \in z_k}{||x_i-z_j||^2}}CH(K)=tr(W)/(N−K)tr(B)/(K−1)​tr(B)=j=1∑k​∣∣zj​−z∣∣2tr(W)=j=1∑k​xi​∈zk​∑​∣∣xi​−zj​∣∣2

其中tr(B)tr(B)tr(B)表示类间距离差矩阵的迹,tr(W)tr(W)tr(W)表示类内差矩阵的迹,zzz是整个数据集的均值,zjz_jzj​是第jjj个簇cjc_jcj​的均值,NNN代表聚类的个数, KKK代表当前的类。值越大,CH(K)CH(K)CH(K)聚类效果越好,CHCHCH主要计算簇间距离与簇内距离的比值

SSE=∑i=1r∑j=1ni(Xij−Xˉi)2Xˉi=1ni∑j=1niXij,i=1,2,...,rSSE=\sum_{i=1}^{r}{\sum_{j=1}^{n_i}{(X_{ij}-\bar X_i)^2}} \\ \bar X_i=\frac{1}{n_i}\sum_{j=1}^{n_i}{X_{ij}},i=1,2,...,rSSE=i=1∑r​j=1∑ni​​(Xij​−Xˉi​)2Xˉi​=ni​1​j=1∑ni​​Xij​,i=1,2,...,r

簇的邻近度用组间平方和(SSB)表示,即簇的质心CiC_iCi​到簇内所有数据点的总平均值ccc的距离的平方和

簇内包含单个类对象的一种度量。对于每一个簇,首先计算数据的类分布,即对于簇iii,计算簇iii的成员属于类jjj的概率

pij=mijmip_{ij}=\frac{m_{ij}}{m_i}pij​=mi​mij​​

其中mim_imi​表示簇iii中所有对象的个数,而mijm_{ij}mij​是簇iii中类jjj的对象个数。使用类分布,用标准公式:

ei=−∑j=1Kpijlog2pije_i=-\sum_{j=1}^{K}{p_{ij}log_2{p_ij}}ei​=−j=1∑K​pij​log2​pi​j

计算每个簇iii的熵,其中KKK是类个数。簇集合的总熵用每个簇的熵的加权和计算即:

e=∑i=1Kmimeie=\sum_{i=1}^{K}{\frac{m_i}{m}e_i}e=i=1∑K​mmi​​ei​

其中KKK是簇的个数,而mmm是簇内数据点的总和

簇内包含单个类对象的另外一种度量。簇iii的纯度为pi=max⁡apijp_i=\max_{a}{p_{ij}}pi​=maxa​pij​,而聚类总纯度为:

purity=∑i=1Kmimpipurity=\sum_{i=1}^{K}{\frac{m_i}{m}p_i}purity=i=1∑K​mmi​​pi​

SSE=∑(Yactual−Ypredict)2SSE = \sum(Y_{actual} - Y_{predict})^2SSE=∑(Yactual​−Ypredict​)2
R2=1−∑(Yactual−Ypredict)2∑(Yactual−Ymean)2=1−SSESSTSST=∑i=1nwi(Yactual−Ymean)2R^2 = 1-\frac{\sum(Y_{actual}-Y_{predict})^2}{\sum(Y_{actual}-Y_{mean})^2}=1-\frac{SSE}{SST} \\ SST = \sum_{i=1}^{n}w_i(Y_{actual} - Y_{mean})^2R2=1−∑(Yactual​−Ymean​)2∑(Yactual​−Ypredict​)2​=1−SSTSSE​SST=i=1∑n​wi​(Yactual​−Ymean​)2
Radjusted2=1−(1−R2)(n−1)n−p−1R^2 _{adjusted}=1-\frac{(1-R^2)(n-1)}{n-p-1}Radjusted2​=1−n−p−1(1−R2)(n−1)​

其中nnn是样本数量;ppp是特征数量;R2R^2R2是决定系数,该指标消除了样本数量和特征数量的影响,做到了真正的0~1,越大越好。

AIC=e2kT∑t=1Tet2Te2kT:惩罚因子AIC=e^\frac{2k}{T}\frac{\sum_{t=1}^{T}e_t^2}{T} \\ e^\frac{2k}{T}:惩罚因子AIC=eT2k​T∑t=1T​et2​​eT2k​:惩罚因子

不可不知的11个重要机器学习模型评估指标
08 聚类算法 - 聚类算法的衡量指标
机器学习(7)——聚类算法
十分钟掌握聚类算法的评估指标
AIC和BIC准则
模型选择方法:AIC和BIC
异世界.png
1569979463652
1569981873028
1569981579326
1569981858984