分类器性能的度量(来自《Machine Learning in Action》)

分类中的错误:(图片来自《Machine Learning in Action》(中文版)pdf)


在分类中,当某个类别的重要性高于其他类别时,就可以利用上述定义来定义出多个比“错误率”更好的新指标。

正确率(Precision)”TP/(TP + FP),预测为正例的样本中真正的正例的比例。

召回率(Recall)”TP/(TP + FN),预测为正例的真实正例占所有真实正例的比例。

ROC曲线(Receiver Operating Characteristic Curve)”,接受者操作特征。横轴是伪证例的比例,纵轴是真正例的比例,左下角的点对应将所有样例判为反例的情况,右上角的点对应将所有样例判为正例的情况。理想情况下,最佳分类器应该尽可能处于左上角(在假阳率很低的同时获得了很高的真阳率)
AUC曲线下的面积(Area Unser the Curve)”,给出分类器的平均性能。一个完美分类器AUC为1.0,随机猜测AUC为0.5。

def plotROC(predStrengths, classLabels):
    import matplotlib.pyplot as plt
    cur = (1.0,1.0)     #保留绘制光标的位置
    ySum = 0.0      #用于计算AUC的值
    numPosClas = sum(array(classLabels)==1.0)       #通过数组过滤的方式计算正例的数目
    yStep = 1/float(numPosClas)
    xStep = 1/float(len(classLabels)-numPosClas)
    sortedIndicies = predStrengths.argsort()
    fig = plt.figure()
    fig.clf()
    ax = plt.subplot(111)
    for index in sortedIndicies.tolist()[0]:
        if classLabels[index] == 1.0:
            delX = 0
            delY = yStep
        else:
            delX = xStep
            delY = 0
            ySum += cur[1]
        #开始绘制线
        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

你可能感兴趣的:(机器学习)