使用scikit-learn SVM将概率预测标记为概率分数预测/ AUC

时间:2017-07-04 11:12:02

标签: python scikit-learn classification svm auc

对于DS竞赛,我使用SVM进行二进制分类。这里tdata,vdata都有256个功能。标签,标签都有维度n_samples x 1,它们的唯一值是0/1。

现在,根据竞赛规则,我们需要提交概率分数(0到1之间)来代替标签,AUC将用于决定排名。

我是SVM和Sklearn的新手。任何有关如何转换此代码以生成概率分数和AUC的指示都将有很大帮助。

代码:

classifier=svm.SVC(gamma=g,C=c,kernel='rbf',class_weight='balanced') 
classifier.fit(tdata, tlabels)
expected = vlabels
predicted = classifier.predict(vdata)

print("Classification report for classifier %s:\n%s\n"
      % (classifier, metrics.classification_report(expected, predicted)))
cm = metrics.confusion_matrix(expected, predicted)
accuracy = (cm[0,0]+cm[1,1])*100.0/sum(sum(cm))
print("accuracy = "+str(accuracy))

输出:

Classification report for classifier SVC(C=1.0, cache_size=200, class_weight='balanced', coef0=0.0,
  decision_function_shape=None, degree=3, gamma=0.00020000000000000001,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False):
             precision    recall  f1-score   support

        0.0       0.93      0.88      0.90      1881
        1.0       0.92      0.95      0.94      2686

avg / total       0.92      0.92      0.92      4567


accuracy = 92.3144296037

2 个答案:

答案 0 :(得分:1)

使用predict_proba SVC函数来获取概率而不是类 在初始化时,应在predict_proba参数SVC上使用probability=True函数。

classifier=svm.SVC(gamma=g,C=c,kernel='rbf',class_weight='balanced', probability=True) # parameter probability=True should be given
classifier.fit(tdata, tlabels)
expected = vlabels
predicted = classifier.predict(vdata)
pred_proba = classifier.predict_proba(vdata) # predict_proba function call

fpr, tpr, thresholds = metrics.roc_curve(labels, proba_one)
metrics.auc(fpr, tpr)

参考:
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.auc.html
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

答案 1 :(得分:1)

第1步

定义:probability=True in SVC(此参数可用于SVC)请参阅link

classifier=svm.SVC(gamma=g,C=c,kernel='rbf',class_weight='balanced', probability=True)

第2步

然后您需要使用predict_proba方法。

示例:

classifier.fit(X,y)
classifier.predict_proba(X)

结果是你想要的范围[0,1]中的概率。

希望这有帮助。

SVC link

predict_proba