性能度量:衡量模型泛化能力的评价标准
给定数据集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曲线如图所示: