Scikit-learn DictVectorizer to Classifier

时间:2015-03-08 00:40:21

标签: python vector machine-learning scikit-learn

我正在尝试加载字典,然后执行分类。但是,我收到错误:

  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 个答案:

答案 0 :(得分:1)

查看DictVectorizer类,特别是fit_transform方法:

  

返回:
  Xa:{array,sparse matrix}

     

特征向量;总是2-d。

所以它返回一个二维数组。

在您的代码中,这一行:

  

page_vecs = vec.fit_transform(feature_dict_list)

会导致page_vecs成为这样的二维数组。 2d numpy数组没有target属性,您可以尝试使用此属性:

  

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

这就是你得到错误的原因。事实上,你甚至不应该.data,你应该直接使用numpy数组。如果要忽略最后一行,请执行:

page_vecs[:-1, :]

您的标签(或目标)与DictVectorizer类无关,该类仅对您的样本进行矢量化,而不是对您的标签进行矢量化。你应该有一个单独的标签向量。