加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在ROC下的sklearn svm区域,训练数据小于0.5

发布时间:2020-12-20 13:40:12 所属栏目:Python 来源:网络整理
导读:我正在使用sklearn v 0.13.1 svm来尝试解决二进制分类问题.我使用kfold交叉验证并计算roc曲线下的面积(roc_auc)来测试我的模型的质量.但是,对于某些折叠,roc_auc小于0.5,即使对于训练数据也是如此.那不应该是不可能的吗?难道算法总是不可能在训练的数据上至
我正在使用sklearn v 0.13.1 svm来尝试解决二进制分类问题.我使用kfold交叉验证并计算roc曲线下的面积(roc_auc)来测试我的模型的质量.但是,对于某些折叠,roc_auc小于0.5,即使对于训练数据也是如此.那不应该是不可能的吗?难道算法总是不可能在训练的数据上至少达到0.5吗?

这是我的代码:

classifier = svm.SVC(kernel='poly',degree=3,probability=True,max_iter=100000)
kf = cross_validation.KFold(len(myData),n_folds=3,indices=False)
for train,test in kf:
    Fit = classifier.fit(myData[train],classVector[train])

    probas_ = Fit.predict_proba(myData[test])
    fpr,tpr,thresholds = roc_curve(classVector[test],probas_[:,1])
    roc_auc = auc(fpr,tpr)

    probas_ = Fit.predict_proba(myData[train])
    fpr2,tpr2,thresholds2 = roc_curve(classVector[train],1])
    roc_auc2 = auc(fpr2,tpr2)

    print "Training auc: ",roc_auc2," Testing auc: ",roc_auc

输出如下所示:

Training auc: 0.423920939062  Testing auc: 0.388436883629
    Training auc: 0.525472613736  Testing auc: 0.565581854043
    Training auc: 0.470917930528  Testing auc: 0.259344660194

曲线下面积小于0.5的结果是否有意义?原则上,如果列车和测试值都<0.5,我可以反转每个点的预测,但我担心某事会出错.我认为即使我给它完全随机数据,算法应该在训练数据上达到0.5?

解决方法

事实上,你可以颠倒你的预测,这就是你的AUROCs< 0.5.这样做通常不是问题,它可能只意味着classifier.fit或roc_curve误解了你传递的classVector.最好修改它 - 阅读他们的文档以了解他们期望的数据.特别是,您没有指定哪个标签是正面的.请参阅roc_curve的 pos_label参数并确保正确指定了y_true.

然而,令人担忧的是,你的一些AUROC是>在训练集上0.5,并且大多数都接近它.这可能意味着你的分类器的表现并不比随机好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读