码迷,mamicode.com
首页 > 其他好文 > 详细

非均衡分类问题

时间:2018-11-07 23:07:38      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:tle   data   sub   red   分类   param   ssi   add   yar   

非均衡分类问题:

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

 

非均衡分类问题

标签:tle   data   sub   red   分类   param   ssi   add   yar   

原文地址:https://www.cnblogs.com/zhhy236400/p/9926162.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!