SK Узнайте, как получить вероятности принятия решения для классификатора LinearSVC
Я использую scikit-learn linearSVC классификатор для интеллектуального анализа текста. У меня есть значение y в качестве метки 0/1 и значение X в качестве TfidfVectorizer текстового документа.
Я использую конвейер, как показано ниже
pipeline = Pipeline([
('count_vectorizer', TfidfVectorizer(ngram_range=(1, 2))),
('classifier', LinearSVC())
])
Для прогноза я хотел бы получить показатель достоверности или вероятность того, что точка данных классифицируется как1 в диапазоне (0,1)
В настоящее время я использую функцию принятия решения
pipeline.decision_function(test_X)
Однако он возвращает положительные и отрицательные значения, которые указывают на уверенность. Я не слишком уверен в том, что они имеют в виду.
Однако есть ли способ получить значения в диапазоне 0-1?
Например, вот вывод функции решения для некоторых точек данных
-0.40671879072078421,
-0.40671879072078421,
-0.64549376401063352,
-0.40610652684648957,
-0.40610652684648957,
-0.64549376401063352,
-0.64549376401063352,
-0.5468745098794594,
-0.33976011539714374,
0.36781572474117097,
-0.094943829974515004,
0.37728641897721765,
0.2856211778200019,
0.11775493140003235,
0.19387473663623439,
-0.062620918785563556,
-0.17080866610522819,
0.61791016307670399,
0.33631340372946961,
0.87081276844501176,
1.026991628346146,
0.092097790098391641,
-0.3266704728249083,
0.050368652422013376,
-0.046834129250376291,
2 ответа
Ты не можешь Однако вы можете использовать sklearn.svm.SVC
с kernel='linear'
а также probability=True
Это может работать дольше, но вы можете получить вероятности из этого классификатора, используя predict_proba
метод.
clf=sklearn.svm.SVC(kernel='linear',probability=True)
clf.fit(X,y)
clf.predict_proba(X_test)
Если вы настаиваете на использовании класса LinearSVC, вы можете обернуть его в объект http://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html и установить калиброванный классификатор, который даст вам вероятностный классификатор.
from sklearn.svm import LinearSVC
from sklearn.calibration import CalibratedClassifierCV
from sklearn import datasets
#Load iris dataset
iris = datasets.load_iris()
X = iris.data[:, :2] # Using only two features
y = iris.target #3 classes: 0, 1, 2
linear_svc = LinearSVC() #The base estimator
# This is the calibrated classifier which can give probabilistic classifier
calibrated_svc = CalibratedClassifierCV(linear_svc,
method='sigmoid', #sigmoid will use Platt's scaling. Refer to documentation for other methods.
cv=3)
calibrated_svc.fit(X, y)
# predict
prediction_data = [[2.3, 5],
[4, 7]]
predicted_probs = calibrated_svc.predict_proba(prediction_data) #important to use predict_proba
print predicted_probs
Вот вывод:
[[ 9.98626760e-01 1.27594869e-03 9.72912751e-05]
[ 9.99578199e-01 1.79053170e-05 4.03895759e-04]]
который показывает вероятности для каждого класса для каждой точки данных.