2015-03-08 3 views
0

Я пытаюсь загрузить словарь, а затем выполнить классификацию. Однако, я получаю ошибку:Scikit-learn DictVectorizer to Classifier

File "train_classifier.py", line 49, in <module> 
    clf.fit(page_vecs.data[:-1],page_vecs.target[:-1]) 
    File "/usr/local/lib/python3.4/site-packages/scipy/sparse/base.py", line 505, in __getattr__ 
    raise AttributeError(attr + " not found") 
AttributeError: target not found 

Как я могу загрузить цели? Вот мой код:

vec = DictVectorizer() 
page_vecs = vec.fit_transform(feature_dict_list) 
clf = svm.SVC(gamma=0.001, C=100) 
clf.fit(page_vecs.data[:-1],page_vecs.target[:-1]) 
print(clf.predict(page_vecs[-1])) 

ответ

1

Посмотрите на DictVectorizer класса, в частности, его метод fit_transform:

Returns:
Xa : {array, sparse matrix}

Feature vectors; always 2-d.

Так она возвращает массив 2d.

В своем коде, эта строка:

page_vecs = vec.fit_transform(feature_dict_list)

Вызовет page_vecs быть такой 2d массив. 2d Numpy массивы не имеют target атрибут, который вы пытаетесь использовать здесь:

clf.fit(page_vecs.data[:-1],page_vecs.target[:-1])

Вот почему вы получите ошибку. Фактически, вы не должны даже делать .data, вам следует работать с массивом numpy напрямую. Если вы хотите игнорировать последнюю строку, сделайте следующее:

page_vecs[:-1, :] 

Ваших метки (или цель) не имеет ничего общего с DictVectorizer классом, который только векторизацией ваших образцов, а не ваши ярлыков. У вас должен быть отдельный вектор для ярлыков.

+0

Ох, я вижу. Я предполагаю, что путаница исходила из образцов данных в учебнике sklearn. У всех этих образцов были «цели», но теперь я вижу, что это не часть какого-либо другого объекта sklearn. –

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