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