模型在训练集上的误差通常称为 训练误差 或 经验误差,而在新样本上的误差称为 泛化误差。显然,机器学习的目的是得到泛化误差小的学习器。然而,在实际应用中,新样本是未知的,所以只能使训练误差尽量小。
在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估。在诸多的评估指标中,大部分指标只能片面地反映模型的一部分性能。如果不能合理地运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。
误差矩阵 | 预测正值 | 预测负值 |
---|---|---|
真实正值 | TP | FN |
真实负值 | FP | TN |
True Positive(真正, TP):将正类预测为正类数。
True Negative(真负 , TN):将负类预测为负类数。
False Positive(假正, FP):将负类预测为正类数。–> 误报(Type I error):假的正样本(实际是负样本)。
False Negative(假负 , FN):将正类预测为负类数。–> 漏报(Type II error):假的负样本(实际是正样本)。
准确率是指分类正确的样本占总样本个数的比例。
A C C = T P + T N T P + T N + F P + F N ACC = \frac{TP+TN}{TP+TN+FP+FN} ACC=TP+TN+FP+FNTP+TN
准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。所以,当不同类别的样本占比十分不平衡时,占比较大的样本对准确率影响较大。
精确率是指分类正确的正样本个数占分类器判定(预测值)为正样本的样本个数的比例,又叫查准率。
P = T P T P + F P P = \frac{TP}{TP+FP} P=TP+FPTP
TP+FP代表无论真与假,报出来(预测值)数据都是正样本。
医学模型判断癌症病人我们希望Recall高一点(无病诊断为有病去治疗总比漏掉癌症病人好(所有真实患病的人里,检测出患病)),而自己买西瓜的话希望甜瓜的Precision高一点(我们买到的是预测为1(甜瓜)的样本,希望有限的买瓜次数下甜瓜更多)。
召回率是指分类正确的正样本个数占真正的正样本个数的比例,又叫查全率。
R = T P T P + F N R = \frac{TP}{TP+FN} R=TP+FNTP
precision与recall小例子:
金融诈骗分类中,正样本P代表是金融诈骗;负样本N代表不是金融诈骗。假设正样本P有100个,负样本N有100个。取threshold=0.5得TP=80,FP=20,问precision和recall分别是多少?如果取threshold=0.9,precision和recall将有什么变化?
解:
P r e c i s i o n = T P / ( T P + F P ) = 0.8 Precision = TP/(TP+FP)=0.8 Precision=TP/(TP+FP)=0.8,也可算误报率0.2,1-0.2 =0.8;
R e c a l l = T P / ( T P + F N ) = 0.8 Recall = TP/(TP+FN) = 0.8 Recall=TP/(TP+FN)=0.8,也可计算漏报率0.2,1-0.2=0.8;
若threshold=0.9,则TP减小,TP+FP减小,precision不确定;极端情况下FP为0,precision会上升。TP+FN不变,因此recall会减小。
通过上面的例子我们发现:实际上precision和recall没什么关系。
不同情况下我们希望在查准和查全上有个权衡。
因为我们二分类器输出的是预测为正样本的概率,是个[0,1]范围内的数值。那我们可以选择不同的阈值(比如我们的模型预测癌症的概率是0.2, 但是我们为了保守起见,高于0.1就认为是预测的正例)。
P-R曲线的横轴是召回率,纵轴是精确率。
改变阈值就能获得一系列的pair并绘制出曲线。对于不同的模型在相同数据集上的预测效果,我们可以画出一系列的PR曲线。一般来说如果一个曲线完全“包围”另一个曲线,我们可以认为该模型的分类效果要好于对比模型。
PR曲线越靠近右上越好。
F1值就是精准率和召回率的调和平均值的2倍。
F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1=\frac{2 \times Precision \times Recall}{Precision + Recall} F1=Precision+Recall2×Precision×Recall
2 F 1 = 1 P + 1 R \frac{2}{F_1} = \frac{1}{P} + \frac{1}{R} F12=P1+R1
F 1 = 2 T P 2 T P + F P + F N F_1 = \frac{2TP}{2TP+FP+FN} F1=2TP+FP+FN2TP
上述 F 1 F1 F1 值只是在二分类中,我们可以轻易扩展到多分类中。多分类中我们可以使用OneVsRest的策略,判断第i类的分类时,把不属于第i类的看做另一类,就能对每一类都算出一个F值了。使用宏平均(Macro)或者微平均(Micro)来考量多分类的效果。宏平均是多个分类F1值相加,而微平均是多个F1分子分母分别相加。
ROC曲线的全称是“受试者曲线”,与PR曲线类似。它相比PR曲线能够在样本不均衡的条件下给出更加合理的结果。先看一下ROC的纵轴和横轴:纵轴是真阳性率(True Positive Rate,TPR),横轴是假阳性率(False Positive Rate,FPR),对应的计算方式是:
T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP
F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP
TPR就是召回率(分母为正样本),FPR(分母为负样本)是负样本角度的召回率,即误召率(召回的是负样本的概率)。与PR曲线一样,我们可以通过调整阈值,来改变TPR和FPR。
AUC指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于y=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p就可以得到一个更好的分类器),所以AUC的取值一般在0.5~1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
ROC曲线越靠近左上越好。 如果一个模型ROC曲线完全cover另一个,说明该模型优于另一模型。
AUC一般指的是ROC曲线与横轴构成的面积。
计算方法:
1 m ∑ i = 1 m ( y i ^ − y i ) 2 \frac{1}{m} \sum_{i=1}^{m}(\hat{y_i} - y_i)^2 m1i=1∑m(yi^−yi)2
这也是线性回归的损失函数。
1 m ∑ i = 1 m ( y i ^ − y i ) 2 \sqrt{\frac{1}{m} \sum_{i=1}^{m}(\hat{y_i} - y_i)^2} m1i=1∑m(yi^−yi)2
MSE开个根号。数据太大可以开根号。
RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。
模型在95%的时间区间内的预测误差都小于1%,取得了相当不错的预测结果。那么,造成RMSE指标居高不下的最可能的原因是什么?–离群点。
解决办法?可以从三个角度来思考。
第一,如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉。
第二,如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去(这是一个宏大的话题,这里就不展开讨论了)。
第三,可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error,MAPE),MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
M A P E = 100 % n ∑ i = 1 n ∣ y i − y i ˉ y i ∣ MAPE = \frac{100\%}{n} \sum_{i=1}^{n} | \frac{ y_i - \bar{y_i} }{y_i} | MAPE=n100%i=1∑n∣yiyi−yiˉ∣
范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。
可以看到,MAPE跟MAE很像,就是多了个分母。
注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!
Mean Absolute Error ,是绝对误差的平均值,能更好地反映预测值误差的实际情况.
1 m ∑ i = 1 m ∣ y i ^ − y i ∣ \frac{1}{m} \sum_{i=1}^{m}|\hat{y_i} - y_i| m1i=1∑m∣yi^−yi∣
Symmetric Mean Absolute Percentage Error
注意点:当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用!
R 2 = 1 − ∑ i = 1 ( y i ^ − y i ) 2 ∑ i = 1 ( y i ˉ − y i ) 2 R^2 = 1 - \frac{\sum_{i=1}(\hat{y_i}-y_i)^2}{\sum_{i=1}(\bar{y_i}-y_i)^2} R2=1−∑i=1(yiˉ−yi)2∑i=1(yi^−yi)2
其中, y i ^ \hat{y_i} yi^是预测值, y i ˉ \bar{y_i} yiˉ是真实值的平均值。 0 < = R 2 < = 1 0<=R^2<=1 0<=R2<=1且越大越好。
三个 sum of squares:
在多元回归中,当样本容量一定时,随着特征的增加可决系数R2总是上升的,即使新特征与因变量不相关,R2也是上升。所以研究人员通常使用修正的可决系数(adjusted R2) R a 2 R^2_a Ra2。其定义如下:
R a 2 = 1 − ( 1 − R 2 ) n − 1 n − p − 1 = 1 − S S r e s / ( n − p − 1 ) S S t o t / ( n − 1 ) = 1 − S S r e s / d f r e s S S t o t / d f t o t \begin {aligned} R_a^2 &=1-(1-R^2)\frac{n-1}{n-p-1} \\ &=1-\frac{SS_{res} / (n-p-1)}{SS_{tot}/(n-1)} \\ &=1-\frac{SS_{res} / df_{res}}{SS_{tot}/df_{tot}} \end {aligned} Ra2=1−(1−R2)n−p−1n−1=1−SStot/(n−1)SSres/(n−p−1)=1−SStot/dftotSSres/dfres
样本量为n, 特征(自变量)数量为p, S S t o t SS_{tot} SStot的自由度(degrees of freedom)为 S S t o t = n − 1 SS_{tot}=n−1 SStot=n−1, S S r e s SS_{res} SSres的自由度为 d f r e s = n − p − 1 df_{res}=n−p−1 dfres=n−p−1。
修正的可决系数 R a 2 ≤ R 2 R_a^2 ≤R^2 Ra2≤R2。
可能是负数,当样本量较少,特征数量较多时可能会出现负值。
a. 外部法(基于有标注):Jaccard系数、纯度
b. 内部法(无标注):内平方和WSS和外平方和BSS
c. 此外还要考虑到算法的时间空间复杂度、聚类稳定性等
数据集 D = { x 1 , x 2 , . . , x m } D=\lbrace x_1,x_2,..,x_m \rbrace D={x1,x2,..,xm},假定通过聚类给出的簇划分为 C = { C 1 , C 2 , . . , C k } C=\lbrace C_1,C_2,..,C_k \rbrace C={C1,C2,..,Ck},参考模型给出的划分簇 C ∗ = { C 1 ∗ , C 2 ∗ , . . , C s ∗ } C^*=\lbrace C_1^*,C_2^*,..,C_s^* \rbrace C∗={C1∗,C2∗,..,Cs∗},令 λ , λ ∗ \lambda,\lambda^* λ,λ∗分别表示 C , C ∗ C,C^* C,C∗对应簇的标记向量。我们将样本两两配对考虑。
a = ∣ S S ∣ , S S = ( x i , x j ) ∣ λ i = λ j , λ i ∗ = λ j ∗ , i < j a=|SS|,SS={(x_i,x_j)|\lambda_i=\lambda_j,\lambda_i^*=\lambda_j^*,i
b = ∣ S D ∣ , S D = ( x i , x j ) ∣ λ i = λ j , λ i ∗ ≠ λ j ∗ , i < j b=|SD|,SD={(x_i,x_j)|\lambda_i=\lambda_j,\lambda_i^*\neq\lambda_j^*,i
c = ∣ D S ∣ , D S = ( x i , x j ) ∣ λ i ≠ λ j , λ i ∗ = λ j ∗ , i < j c=|DS|,DS={(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda_i^*=\lambda_j^*,i
d = ∣ D D ∣ , D D = ( x i , x j ) ∣ λ i ≠ λ j , λ i ∗ ≠ λ j ∗ , i < j d=|DD|,DD={(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda_i^*\neq\lambda_j^*,i
SS表示包含了在C中隶属于相同簇且在 C ∗ C^* C∗中也隶属于相同簇的样本对。
SD表示包含了在C中隶属于相同簇且在 C ∗ C^* C∗中也隶属于不同簇的样本对。
…以此类推
a + b + c + d = m ( m − 1 ) / 2 a+b+c+d=m(m-1)/2 a+b+c+d=m(m−1)/2
J C = a a + b + c JC=\frac{a}{a+b+c} JC=a+b+ca
F M = a a + b ⋅ a a + c FM=\sqrt{\frac{a}{a+b}\cdot\frac{a}{a+c}} FM=a+ba⋅a+ca
R I = 2 ( a + d ) m ( m − 1 ) RI=\frac{2(a+d)}{m(m-1)} RI=m(m−1)2(a+d)
RI取值范围为[0,1],值越大意味着聚类结果与真实情况越吻合。
RI越大表示聚类效果准确性越高,同时每个类内的纯度越高。
P u r i t y ( Ω , C ) = 1 N ∑ k max j ∣ w k ∩ c j ∣ Purity(\Omega,C)=\frac{1}{N}\sum_k \max_{j}|w_k\cap c_j | Purity(Ω,C)=N1k∑jmax∣wk∩cj∣
N表示样本总数, Ω = { w 1 , . . , w K } \Omega=\lbrace w_1,..,w_K \rbrace Ω={w1,..,wK} 聚类簇划分。 C = { c 1 , . . , c J } C=\lbrace c_1,..,c_J \rbrace C={c1,..,cJ}真实类标。上述过程即给每个「聚类簇」分配一个「类别」,且「为这个类别的样本」在该簇中「出现的次数最多」,然后计算所有 K 个聚类簇的这个次数之和再归一化即为最终值。
上诉性能度量在[0,1],越大越好。
Normalized Mutual Information,需要一直真实label。
先介绍互信息MI:
M I ( U , V ) = ∑ i = 1 R ∑ j = 1 C p i , j l o g ( p i , j p i × p j ) MI(U,V)=\sum_{i=1}^R\sum_{j=1}^{C}p_{i,j}log(\frac{p_{i,j}}{p_i\times p_j}) MI(U,V)=i=1∑Rj=1∑Cpi,jlog(pi×pjpi,j)
其中, U U U代表真实类标集合, V V V代表聚类结果集合。
例如:
对于真实类标集合 [ 1 , 1 , 2 , 2 ] [1,1,2,2] [1,1,2,2],聚类类标集合 [ 1 , 1 , 1 , 2 ] [1,1,1,2] [1,1,1,2]
此时 R = 2 R=2 R=2, U i U_i Ui是index的集合, U 1 = 1 , 2 U_1 = {1,2} U1=1,2, U 2 = 3 , 4 U_2 = {3,4} U2=3,4
此时 C = 2 C=2 C=2, V j V_j Vj是index的集合, V 1 = 1 , 2 , 3 V_1 = {1,2,3} V1=1,2,3, V 2 = 4 V_2 = {4} V2=4
p i = ∣ U i ∣ N p_{i}=\frac{|U_i|}{N} pi=N∣Ui∣, p j = ∣ V j ∣ N p_{j}=\frac{|V_j|}{N} pj=N∣Vj∣, p i , j = ∣ U i ∩ V j ∣ N p_{i,j}=\frac{|U_i\cap V_j|}{N} pi,j=N∣Ui∩Vj∣
标准化互信息:
N M I ( U , V ) = M I ( U , V ) f ( H ( U ) , H ( V ) ) NMI(U,V)=\frac{MI(U,V)}{f(H(U),H(V))} NMI(U,V)=f(H(U),H(V))MI(U,V)
其中 H H H函数为信息熵, H ( U ) = − ∑ i = 1 R p i l o g p i H(U)=-\sum_{i=1}^Rp_ilogp_i H(U)=−∑i=1Rpilogpi
f f f可以为 m i n / m a x min/max min/max函数;或几何平均 f ( x i , x j ) = x i x j f(x_i,x_j)=\sqrt{x_ix_j} f(xi,xj)=xixj;或算数平均 f ( x i , x j ) = x i + x j 2 f(x_i,x_j)=\frac{x_i+x_j}{2} f(xi,xj)=2xi+xj
考虑聚类结果的簇划分 C = { C 1 , C 2 , . . . , C k } C=\lbrace C_1,C_2,...,C_k \rbrace C={C1,C2,...,Ck}
a v g ( C ) avg(C) avg(C)对应簇C内样本间的平均距离: a v g ( C ) = 2 ∣ C ∣ ( ∣ C ∣ − 1 ) ∑ 1 ≤ i < j ≤ ∣ C ∣ d i s t ( x i , x j ) avg(C)=\frac{2}{|C|(|C|-1)}\sum_{1\leq i
d i a m ( C ) diam(C) diam(C)对应簇C内样本间的最远距离: d i a m ( C ) = m a x 1 ≤ i < j ≤ ∣ C ∣ d i s t ( x i , x j ) diam(C)=max_{1\leq i
d m i n ( C i , C j ) dmin(C_i,C_j) dmin(Ci,Cj)对应簇 C i , C j C_i,C_j Ci,Cj间最近样本间距离: d m i n ( C i , C j ) = m i n x i ∈ C i , x j ∈ C j d i s t ( x i , x j ) dmin(C_i,C_j)=min_{x_i \in C_i,x_j \in C_j} dist(x_i,x_j) dmin(Ci,Cj)=minxi∈Ci,xj∈Cjdist(xi,xj)
d c e n ( C i , C j ) dcen(C_i,C_j) dcen(Ci,Cj)对应簇 C i . C j C_i.C_j Ci.Cj中心点的距离: d c e n ( C i , C j ) = d i s t ( μ i , μ j ) dcen(C_i,C_j)=dist(\mu_i,\mu_j) dcen(Ci,Cj)=dist(μi,μj)
Davies-Bouldin Index(戴维森堡丁指数)(分类适确性指标)
D B I = 1 k ∑ i = 1 k max j ≠ i ( a v g ( C i ) + a v g ( C j ) d c e n ( C i , C j ) ) DBI = \frac{1}{k} \sum_{i=1}^{k} \max_{j\neq i}(\frac{avg(C_i)+avg(C_j)}{dcen(C_i,C_j)}) DBI=k1i=1∑kj=imax(dcen(Ci,Cj)avg(Ci)+avg(Cj))
含义:类内距离越小,同时类间(簇中心点)距离越大
缺点:因使用欧式距离 所以对于环状分布 聚类评测很差
Dunn Validity Index (邓恩指数)
D I = min 1 ≤ j ≤ k { min j ≠ i ( d m i n ( C i , C j ) max 1 ≤ l ≤ k d i a m ( C l ) ) } DI=\min_{1\leq j\leq k}\lbrace \min_{j\neq i}(\frac{dmin(C_i,C_j)}{\max_{1\leq l \leq k}diam(C_l)}) \rbrace DI=1≤j≤kmin{j=imin(max1≤l≤kdiam(Cl)dmin(Ci,Cj))}
任意两个簇元素的最短距离(类间)除以任意簇中的最大距离(类内)
含义:DVI越大意味着类间距离越大,同时类内距离越小
缺点:对离散点的聚类测评很高、对环状分布测评效果差
有很多不同的因素会导致 R 2 R^2 R2值偏高或偏低。仅凭R-Squared的值得出结论模型是好是坏就变得很危险 。例如:
不能用 R 2 R^2 R2值高低来比较不同模型的好坏?