2016-02-03 2 views
1

Когда я получаю коэффициенты для моего мультиклассического SVM, я не могу найти способ получить класс, для которого предназначены веса. Они отсортированы в определенном порядке. Есть ли способ получить, какой класс идет с каким индексом в двумерном массиве коэффициентов?Атрибут коэффициента Sklearn SVM - как получить имя класса?

+0

Насколько я знаю, коэффициенты ('coef_') - это просто веса, которые образуют разделительную гиперплоскость. Один вес в каждой функции, я не вижу, где здесь играют классы. Вы, возможно, ищете векторы поддержки? – kazemakase

+0

@kazemakase hmmm, похоже, когда я смотрю документацию для параметра coef, которая действительно возвращает 2D-массив для весов функций для каждого класса. – rb612

+0

Вы правы. Существуют разные веса для каждой комбинации классов в многоклассовом случае. Вы не упомянули, что делали мульти-класс, хотя :) – kazemakase

ответ

1

Вы можете получить порядок занятий с атрибутом classes_. Я думаю, что они обычно в порядке возрастания, поскольку numpy.unique будет сортировать их, но насколько я знаю, это не документировано.

Если вы выполняете классификацию нескольких классов, scikit-learn использует схему one-vs-one. Это означает, что для каждой комбинации классов вы получаете один отдельный классификатор (или один набор весов). Если C - количество классов, то существует C * (C-1)/2 комбинаций. К сожалению, похоже, что нет никакой информации о том, как упорядочиваются эти comibantions. Однако, от глядя на source code, кажется, что они упорядочены следующим образом:

0-1, 0-2, 0-3, ... 0-c, 
    1-2, 1-3, ... 1-c, 
      2-3, ... 2-c, 
       . 
       . 
       . 

Рассмотрим следующий пример:

import numpy as np 
from sklearn.svm import SVC 

x = np.random.randn(40, 7) # 7 features, 40 samples 
y = ['D', 'B', 'A', 'C'] * 10 # four classes 
svc = SVC(kernel='linear').fit(x, y) 

print(svc.classes_) # ['A', 'B', 'C', 'D'] 
print(svc.coef_.shape) # (6, 7) 

Форма svc.coef_ показывает, что есть 6 комплектов весов. Они соответствуют следующим парам меток класса: AB, AC, AD, BC, BD, CD

Примечание:Этот ответ основан на наблюдении и проверке исходного кода, а не на фактической документации. Возьмите его с солью соли.

Смежные вопросы