我正在尝试加载字典,然后执行分类。但是,我得到了错误:
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]))
最佳答案
查看DictVectorizer类,特别是其fit_transform方法:
返回值:
Xa:{数组,稀疏矩阵}
特征向量;总是2-d。
因此它返回一个二维数组。
在您的代码中,此行:
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
类无关,该类仅对样本进行矢量化处理,而不对标签进行矢量化处理。标签应具有单独的向量。关于python - Scikit学习DictVectorizer到分类器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28921807/