2015-05-12 3 views
1

Документация по адресу SVMs подразумевает, что существует атрибут «классы_», который, как мы надеемся, показывает, как модель представляет классы внутри.Идентификация классов модели sklearn

Я хотел бы получить эту информацию, чтобы интерпретировать выходные данные таких функций, как «pred_proba», которая генерирует вероятности классов для нескольких выборок. Будем надеяться, зная, что (значения выбираются совершенно случайно, просто для иллюстрации)

model.classes_ 
>> [1, 2, 4] 

средства, которые можно предположить, что

model.predict_proba([[1.2312, 0.23512, 6.], [3.7655, 8.2353, 0.86323]]) 
>> [[0.032, 0.143, 0.825], [0.325, 0.143, 0.532]] 

средства, что вероятности перевести на том же порядке, как классы, т.е. для первого набора функций:

probability of class 1: 0.032 
probability of class 2: 0.143 
probability of class 4: 0.825 

Но вызов класса «class_» на SVM приводит к ошибке. Есть ли хороший способ получить эту информацию? Я не могу себе представить, что он больше не доступен после обучения модели.

редактировать: Как я построить моя модель более или менее, как это:

from sklearn.svm import SVC 
from sklearn.grid_search import GridSearchCV 
from sklearn.pipeline import Pipeline, FeatureUnion 


pipeline = Pipeline([ 
    ('features', FeatureUnion(transformer_list[ ... ])), 
    ('svm', SVC(probability=True)) 
]) 
parameters = { ... } 
grid_search = GridSearchCV(
    pipeline, 
    parameters 
) 

grid_search.fit(get_data(), get_labels()) 
clf = [elem for elem in grid_search.estimator.steps if elem[0] == 'svm'][0][1] 

print(clf) 
>> SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, 
    kernel='rbf', max_iter=-1, probability=True, random_state=None, 
    shrinking=True, tol=0.001, verbose=False) 
print(clf.classes_) 
>> Traceback (most recent call last): 
    File "path/to/script.py", line 284, in <module> 
    File "path/to/script.py", line 181, in re_train 
    print(clf.classes_) 
AttributeError: 'SVC' object has no attribute 'classes_' 

ответ

2

grid_search.estimator, что вы смотрите на него непригодный трубопровод. Атрибут classes_ существует только после установки, поскольку классификатор должен был видеть y.

Что вы хотите, чтобы оценщик был обучен с использованием лучших настроек параметров, который равен grid_search.best_estimator_.

Ниже будет работать:

CLF = grid_search.best_estimator_.named_steps [ 'SVM'] печать (clf.classes_)

[и classes_ делает именно то, что вы думаете, он делает].

+0

Спасибо, он работает сейчас =) – Arne

1

Существует поле классов в sklearn, это, вероятно, означает, что вы называли неправильную модель, смотрите пример ниже, мы можно видеть, что есть классы, если смотреть на classes_ поле:

>>> import numpy as np 
>>> from sklearn.svm import SVC 
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]]) 
>>> y = np.array([1, 1, 2, 2]) 
>>> clf = SVC(probability=True) 
>>> clf.fit(X, y) 
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, 
    kernel='rbf', max_iter=-1, probability=True, random_state=None, 
    shrinking=True, tol=0.001, verbose=False) 
>>> print clf.classes_ 
[1 2] 
>>> print clf.predict([[-0.8, -1]]) 
[1] 
>>> print clf.predict_proba([[-0.8, -1]]) 
[[ 0.92419129 0.07580871]] 
+0

Я вижу. Может быть, моя проблема в том, что моя модель «скрыта» в GridSearchCV. Я обновил начальную запись с дополнительной информацией и более конкретным сообщением об ошибке. – Arne

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