Метка прогнозирования для прогнозирования вероятности /AUC с использованием SVM scikit-learn

Для соревнований DS я использовал SVM для бинарной классификации. Здесь tdata, vdata оба имеют 256 функций. tlabels, vlabels оба имеют размеры 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 ответа

Использование 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

Определение: probability=True in SVC (этот параметр доступен для SVC) см. ссылку.

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 ссылка

predict_proba

Другие вопросы по тегам