Метка прогнозирования для прогнозирования вероятности /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].
Надеюсь это поможет.