SKLearn, как получить вероятностные решения для классификатора LinearSVC

Я использую scicit-learn для линейного шифратора для текстового поиска. У меня есть значение 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, 

  • Невозможно понять построение границы решения в SVM и LR
  • import check_arrays от sklearn
  • Сколько времени занимает сборщик SVM?
  • Реализация Python OpenCV SVM
  • Получение предупреждения об устаревании в Sklearn над массивом 1d, несмотря на отсутствие массива 1D
  • Вычисление функции решения SVM вручную
  • Opencv: Поезд SVM с быстрыми ключевыми точками и BRIEF функциями
  • Scikit Узнать SVC decision_function и предсказать
  • 2 Solutions collect form web for “SKLearn, как получить вероятностные решения для классификатора LinearSVC”

    Вы не можете. Однако вы можете использовать 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, вы можете обернуть его в объект sklearn.calibration.CalibratedClassifierCV и установить калиброванный классификатор, который даст вам вероятностный классификатор.

     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]] 

    который показывает вероятности для каждого класса для каждой точки данных.

    Python - лучший язык программирования в мире.