机器学习算法--性能度量

性能度量:衡量模型泛化能力的评价标准

给定数据集D={(xi,yi)}  yi为xi的真实标记 f(xi)为xi的预测输出。

1.均方误差

对于回归任务一般采用均方误差:

2.错误率与精度

错误率:分类错误样本数占总样本数

精度:分类正确样本数占总样本数

3.查准率,查全率

对于二分类混淆矩阵:

定义查全率: 真实正例中有多少正例被分类正确识别出来  召回率

定义查准率:预测正例中有多少是真正的正例  正确率 

4.ROC  AUC

ROC 受试者工作特征

根据学习器的预测结果对于样例排序,按此顺序把样本作为正例进行预测,

计算假正例率作为横轴

计算真正例率作为纵轴

给定m+个正例  m-个反例  首先将分类阈值设为最大,即全是反例,然后将阈值设为每个样例的值,即每一次将一个样例划分为正例,计算出TFR与FPR绘出ROC曲线。若前一个坐标为(x,y),改变阈值为当前值,若为真正例,则(x,y+1/m);若为假正例,则(x+1/m, y).

AUC;ROC曲线下的面积

ROC绘制以及AUC求解:

def plotROC(predStrengths, classLabels):
    import matplotlib.pyplot as plt
	#初始绘制点
    cur = (1.0,1.0) #cursor
	#计算AUC
    ySum = 0.0 #variable to calculate AUC
	#正例真实数目
    numPosClas = sum(array(classLabels)==1.0)
	#y步长 x步长
    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;
			#只有当x移动时,才记录y的值
            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)

ROC图x轴为假阳例,当样本预测中反例增加时,x轴增加,y轴为真样例,当样本中正例增加时,y轴增加。输入对于样本空间的类别预测强度,升序排列,初始时阈值设置最小值,即全部样本都为正例,此时对应点(1,1)逐渐设置阈值为样本的测试值,每改变一次阈值,则改变一个样例的类别预测值,当该样本属于正例时,此时真正例要减少,相反,假正例率会减少。

AUC曲线对应可以视为许多宽为xStep的长方形之和,使用变量ySum来记录长方形的高度,每当x轴方向移动时,ySum增加相应高度

增加迭代次数10  50  100  绘出ROC曲线如图所示:

           

猜你喜欢

转载自blog.csdn.net/u014106644/article/details/83505545