Scikit Узнать SVC decision_function и предсказать

Я пытаюсь понять взаимосвязь между decision_function и прогнозом, которые являются примерами методов SVC ( http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html ). Пока что я собрал эту функцию решения, возвращает парные оценки между классами. У меня создалось впечатление, что прогноз выбирает класс, который максимизирует его парный балл, но я тестировал это и получал разные результаты. Вот код, который я использовал, чтобы попытаться понять взаимосвязь между ними. Сначала я сгенерировал парную матрицу очков, а затем напечатал класс с максимальным парным счетом, который отличался от класса, предсказанного clf.predict.

result = clf.decision_function(vector)[0] counter = 0 num_classes = len(clf.classes_) pairwise_scores = np.zeros((num_classes, num_classes)) for r in xrange(num_classes): for j in xrange(r + 1, num_classes): pairwise_scores[r][j] = result[counter] pairwise_scores[j][r] = -result[counter] counter += 1 index = np.argmax(pairwise_scores) class = index_star / num_classes print class print clf.predict(vector)[0] 

Кто-нибудь знает взаимосвязь между этими предсказывающими и решающими функциями?

4 Solutions collect form web for “Scikit Узнать SVC decision_function и предсказать”

Я не совсем понимаю ваш код, но давайте рассмотрим пример страницы документации, на которую вы ссылаетесь:

 import numpy as np X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]]) y = np.array([1, 1, 2, 2]) from sklearn.svm import SVC clf = SVC() clf.fit(X, y) 

Теперь давайте применим как функцию решения, так и предсказываем образцы:

 clf.decision_function(X) clf.predict(X) 

Мы получаем:

 array([[-1.00052254], [-1.00006594], [ 1.00029424], [ 1.00029424]]) array([1, 1, 2, 2]) 

И это легко интерпретировать: функция desion говорит нам, на какой стороне гиперплоскости генерируется классификатор мы (и насколько далеко мы от него). Основываясь на этой информации, оценщик затем маркирует примеры соответствующей меткой.

Когда вы вызываете decision_function() , вы получаете результат от каждого из парных классификаторов (общее число n * (n-1) / 2). См. Стр. 127 и 128 «Машины поддержки векторов для классификации шаблонов» .

Каждый классификатор ставит вопрос о правильном ответе (на основе знака выхода этого классификатора); predict() возвращает класс с наибольшим количеством голосов.

Для тех, кого это интересует, я отправлю быстрый пример функции predict переведенной с C ++ ( здесь ) на python:

 # I've only implemented the linear and rbf kernels def kernel(params, sv, X): if params.kernel == 'linear': return [np.dot(vi, X) for vi in sv] elif params.kernel == 'rbf': return [math.exp(-params.gamma * np.dot(vi - X, vi - X)) for vi in sv] # This replicates clf.decision_function(X) def decision_function(params, sv, nv, a, b, X): # calculate the kernels k = kernel(params, sv, X) # define the start and end index for support vectors for each class start = [sum(nv[:i]) for i in range(len(nv))] end = [start[i] + nv[i] for i in range(len(nv))] # calculate: sum(a_p * k(x_p, x)) between every 2 classes c = [ sum(a[ i ][p] * k[p] for p in range(start[j], end[j])) + sum(a[j-1][p] * k[p] for p in range(start[i], end[i])) for i in range(len(nv)) for j in range(i+1,len(nv))] # add the intercept return [sum(x) for x in zip(c, b)] # This replicates clf.predict(X) def predict(params, sv, nv, a, b, cs, X): ''' params = model parameters sv = support vectors nv = # of support vectors per class a = dual coefficients b = intercepts cs = list of class names X = feature to predict ''' decision = decision_function(params, sv, nv, a, b, X) votes = [(i if decision[p] > 0 else j) for p,(i,j) in enumerate((i,j) for i in range(len(cs)) for j in range(i+1,len(cs)))] return cs[max(set(votes), key=votes.count)] 

Существует много входных аргументов для predict и decision_function , но обратите внимание, что все они используются внутри модели при вызове predict(X) . Фактически, все аргументы доступны вам внутри модели после установки:

 # Create model clf = svm.SVC(gamma=0.001, C=100.) # Fit model using features, X, and labels, Y. clf.fit(X, y) # Get parameters from model params = clf.get_params() sv = clf.support_vectors nv = clf.n_support_ a = clf.dual_coef_ b = clf._intercept_ cs = clf.classes_ # Use the functions to predict print(predict(params, sv, nv, a, b, cs, X)) # Compare with the builtin predict print(clf.predict(X)) 

Вероятно, они имеют немного сложное математическое отношение. Но если вы используете LinearSVC decision_function в классификаторе LinearSVC , связь между этими двумя будет более понятной! Потому что тогда decision_function даст вам оценки для каждого ярлыка класса (не так же, как SVC), и прогнозирование даст класс с лучшим результатом.

  • libsvm на PyBrain на OSX для SVM
  • как настроить параметры пользовательской функции ядра с помощью конвейера в scikit-learn
  • Python: преобразовать матрицу в положительную полуопределенную
  • Масштабирование цели приводит к тому, что Scikit-learn регрессия SVM разбивается
  • Выбор из другой функции стоимости и функции активации нейронной сети
  • Прогнозирование с использованием ядра chi для многослойных изображений с использованием sklearn
  • Поезд scikit svm один за другим (онлайн или стохастическое обучение)
  • Scikits Learn: как получить вес функций
  •  
    Interesting Posts for Van-Lav

    Python – программа не отображается, как предполагалось

    Почему MutableString устарела в Python?

    Python Literal r '\' Не принимается

    То же значение для id (float)

    Каково использование numpy.random.seed () Разве это имеет значение?

    Как повысить индексный индекс, когда индексы среза выходят за пределы диапазона?

    Как я могу прикрепить функцию pyplot к экземпляру фигуры?

    Python и PyQt: запустить функцию из другого класса

    Python: как проверить, существуют ли ключи и получить значение из словаря по убыванию приоритета

    Локальная интерполяция более низкого порядка неявных кривых в Python

    Как создавать pdf-документы по страницам в фоновых задачах в App Engine

    В Сикули, как найти и щелкнуть минимум 3 одинаковых изображения?

    Список фильтров с использованием булевых индексных массивов

    Можете ли вы изменить атрибуты объекта Canvas Canvas после создания?

    Получение вложений из gmail через python или php

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