博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习中的性能度量
阅读量:4068 次
发布时间:2019-05-25

本文共 4482 字,大约阅读时间需要 14 分钟。

回归任务

均方误差(Mean squared error, MSE)

E(f;D)=1mi=1m(f(xi)yi)2 E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2

均方根误差(Root-Mean-Squared-Error, RMSE)

E(f;D)=1mi=1m(f(xi)yi)2=MSE(f(x)ˆ) E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 = M S E ( f ( x ) ^ )

分类任务

错误率与精度

E(f;D)=1mi=1m(f(xi)yi) E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) ≠ y i )

acc(f;D)=1mi=1m(f(xi)=yi)=1E(f;D) a c c ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) = y i ) = 1 − E ( f ; D )

观察正确率的背后:准确率和召回率

Predicted Positive Predicted Negative
Actually Positiva True Positive, TP False Negative, FN
Actually Negative False Positive, FP True Negative, TN

查准率(precision)

P=TPTP+FP P = T P T P + F P

查全率(recall)

R=TPTP+FN R = T P T P + F N

F-measure标准

F=2×P×RP+R F = 2 × P × R P + R

from sklearn.metrics import f1_score

评价曲线

准确-召回曲线

P/R曲线更适合正类别比负类别更重要的任务,或者说正例数目比负例数目小得多的任务。信息检索或欺诈检索是它的典型应用领域。

from sklearn.metrics import precision_recall_curve

受试者工作特征曲线(Receiver Operator Characteristic, ROC)

ROC曲线对分类器的一般效果提供了一个更好的描述。ROC曲线刻画的是真正率假正率之间的关系。

y轴 x轴
P/R Precision = TP / (TP + FP) recall = TP / (TP + FN)
ROC TPR = TP / (TP + FN) FPR = FP / (FP + TN)

ROC和P/R曲线所假定的是二分类问题,画图时可以显示分类器在“1 vs REST”分类中的效果。

绘图过程

  • 给定m个正例和n个负例(m=n),根据学习器预测结果对样例进行排序,然后把分类阈值设为最大,把所有样本均预测为反例,此时真正例率和假正例率均为0,在坐标(0, 0)处标记一个点。
  • 然后,将分类阈值一次设为每个样例的预测值,即一次将每个样例划分为正例。设前一个标记点为(x, y),当前若为真正例,则对应标记点的坐标为(x, y+1/m);当前若为假正例,则对应标记点的坐标为(x+1/n, y),然后用线段连接相邻点即得。

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

曲线下面积(Area Under Curve, AUC)

AUC可以通过对ROC曲线下各部分的面积求和而得。假定ROC曲线是由坐标为{(x1,y1),(x2,y2),…,(xm,ym)}的点按序连接而形成(x1=0,xm=1),则AUC可估算为:

AUC=12i=1m1(xi+1xi)(yi+yi+1) A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 )

def plotROC(predStrengths, classLabels):    import matplotlib.pyplot as plt    cur = (1.0,1.0) #cursor    ySum = 0.0 #variable to calculate AUC    numPosClas = sum(array(classLabels)==1.0)    yStep = 1/float(numPosClas); xStep = 1/float(len(classLabels)-numPosClas)    sortedIndicies = predStrengths.argsort()#get sorted index, it's reverse    fig = plt.figure()    fig.clf()    ax = plt.subplot(111)    #loop through all the values, drawing a line segment at each point    for index in sortedIndicies.tolist()[0]:        if classLabels[index] == 1.0:            delX = 0; delY = yStep;        else:            delX = xStep; delY = 0;            ySum += cur[1]        #draw line from cur to (cur[0]-delX,cur[1]-delY)        ax.plot([cur[0],cur[0]-delX],[cur[1],cur[1]-delY], c='b')        cur = (cur[0]-delX,cur[1]-delY)    ax.plot([0,1],[0,1],'b--')    plt.xlabel('False positive rate'); plt.ylabel('True positive rate')    plt.title('ROC curve for AdaBoost horse colic detection system')    ax.axis([0,1,0,1])    plt.show()    print("the Area Under the Curve is: ", ySum * xStep)

混淆矩阵

在多分类问题中使用混淆矩阵(confusion matrix)评估正确率:对于多分类问题,我们不应该把关注点只局限在能否对体裁进行正确分类上,还应该仔细看一下那些互相混淆的类别。

from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)print(cm)

Neyman-Pearson 分类问题

在高风险分类(例如:高死亡率疾病监测、自动驾驶等场景)中控制假阳性率是非常重要的,由算法得出的结果将对个人产生巨大的影响。遗漏一名潜在病人的风险,远远高于误诊一名正常人。因此,我们希望在保证分类器假阳性率(即错误地将负样本分类为正样本的概率) 低于某个阈值 τ 的前提下,最小化其误分正样本的概率。

  • 调整标准分类器的参数
  • 引入基于领域知识的不平衡分类损失

代表性方法:

  • 代价敏感学习(Cost-sensitive learning)
  • 拉格朗日交替优化(LagragianMethod)
  • 排序——阈值法(Ranking-Thresholding)

Others

Bilingual Evaluation Understudy, BLEU

它主要用于衡量机器翻译相对于人类翻译的质量,它使用了精确度量的修改形式。

计算BLEU分数的步骤:

  • 把句子转换成单个词、两个词、三个词和四个词
  • 分别计算大小为1至4的n语法的精度
  • 取所有这些精度值的加权平均的指数
  • 将其与简短的惩罚项相乘

BLEU=BPexp(wnlog(Pn)) B L E U = B P ∗ e x p ( ∑ w n l o g ( P n ) )

BP={
1,crexp(1rc),c<r
B P = { 1 , c ≥ r e x p ( 1 − r c ) , c < r

这里BP是简短的惩罚项,r和c分别是参考翻译和候选翻译中的词的数量,w表示权重,P表示精度值

引入的惩罚项会惩罚那些短于参考翻译的候选翻译。例如,如果上述候选翻译的参考翻译是“The cat”,那么它对于单个词和两个词将具有很高的精度,因为两个单词都以相同的顺序出现在参考翻译中。但是,长度太短的话,实际上并不能很好的反映参考翻译的含义。有了这个简短的惩罚,候选翻译必须在长度、相同单词和单词顺序方面与参考翻译相匹配才能获得高分。

同:

exp(min(0,1lenlabellenpred))n=1kp1/2nn. exp ⁡ ( min ( 0 , 1 − l e n label l e n pred ) ) ∏ n = 1 k p n 1 / 2 n .
需要注意的是,匹配较长连续词比匹配较短连续词更难。因此,一方面,匹配较长连续词应被赋予更大权重。而上式中
p1/2nn p n 1 / 2 n
的指数相当于权重。随着 n 的提高,n 个连续词的精度的权重随着
1/2n 1 / 2 n
的减小而增大。例如
0.51/20.7,0.51/40.84,0.51/80.92,0.51/160.96 0.5 1 / 2 ≈ 0.7 , 0.5 1 / 4 ≈ 0.84 , 0.5 1 / 8 ≈ 0.92 , 0.5 1 / 16 ≈ 0.96
。另一方面,模型预测较短序列往往会得到较高的 n 个连续词的精度。因此,上式中连乘项前面的系数是为了惩罚较短的输出。举个例子,当 k=2 时,假设标签序列为 ABCDEF,而预测序列为 AB。虽然 p1=p2=1,但惩罚系数
exp(16/2)0.14 e x p ( 1 − 6 / 2 ) ≈ 0.14
,因此 BLEU 也接近 0.14。当预测序列和标签序列完全一致时,BLEU 为 1。

《Building Machine Learning Systems with Python》 P85 5.7 P146 9.4.4

《机器学习实战》 P128 7.7.1

《机器学习》 P28 2.3

《BLEU: a Method for Automatic Evaluation of Machine Translation

转载地址:http://nioji.baihongyu.com/

你可能感兴趣的文章
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>