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,并且大多数都接近它.这可能意味着你的分类器的表现并不比随机好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |