对于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
答案 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]中的概率。
希望这有帮助。