非均衡分类问题
Posted zhhy236400
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非均衡分类问题相关的知识,希望对你有一定的参考价值。
非均衡分类问题:
1、样本正反例数量差距大;
2、不同类别的分类代价不相等。
除了分类错误率,还有以下分类性能度量指标:正确率、召回率和ROC曲线
正确率:预测为正例的样本中真正正例的比例。
召回率:预测为正例的真实正例占所有真实正例的比例。
正确率和召回率很难同时达到很高。
ROC曲线:横轴为伪正例的比例(假阳率),纵轴为真正例的比例(真阳率)。
def plotROC(predStrengths,classLabels): import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘] plt.rcParams[‘axes.unicode_minus‘] = False cur = (1.0, 1.0) 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() fig = plt.figure() fig.clf() ax = plt.subplot(111) # print(type(sortedIndicies)) # print(sortedIndicies.tolist()) 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=‘y‘) cur = (cur[0] - delX, cur[1] - delY) ax.plot([0, 1], [0, 1], ‘r--‘) plt.xlabel(‘假阳率‘) plt.ylabel(‘真阳率‘) plt.title(‘AdaBoost马疝病检测系统的ROC曲线‘) ax.axis([0, 1, 0, 1]) plt.show() print("the Area Under the Curve is: ", ySum * xStep)
测试输出:
if __name__==‘__main__‘: dataArr,labelArr=loadDataSet(‘horseColicTraining2.txt‘) classifyArray,aggClassEst=adaBoostTrainDS(dataArr,labelArr,10) plotROC(aggClassEst.T,labelArr)
the Area Under the Curve is: 0.8582969635063604
以上是关于非均衡分类问题的主要内容,如果未能解决你的问题,请参考以下文章