在scikit-learn中,我必须在文本文档集合上实现线性SVM分类器。关于特征提取的文档展示了如何只转换可用的数据集、虹膜等。我需要上传我自己的文本文件集合,并转换它,使它是可用的估计。为此,我试着用这个。
fil = datasets.load_files('/home/ayushi/Dropbox/Bundeli/corpus/wob/sklearn', description=None, categories=None, load_content=True, shuffle=True, encoding='utf-8', charset=None, charset_error=None, decode_error='strict', random_state=0)
vec = DictVectorizer()
vec.fit_transform(fil).toarray()
现在我得到这个错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/dict_vectorizer.py", line 143, in fit_transform
return self.transform(X)
File "/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/dict_vectorizer.py", line 231, in transform
values.append(dtype(v))
ValueError: could not convert string to float: gaari
Gaari是一种体裁的名称,文本需要被分类。
另外,当我尝试这个:http://scikit-learn.org/stable/auto_examples/svm/plot_iris.html#example-svm-plot-iris-py
使用load_files()来获取我自己的数据并准确地遵循所有内容,我得到了这个错误。
TypeError : list indices should be integer not tuples
但是,我仍然需要将其转换为2D数据集。有人有什么建议吗?
sklearn.datasets.load_files
只将文件加载到内存中,生成字符串,而DictVectorizer
需要字典作为输入。您需要一个函数来执行实际的特征提取:
data = datasets.load_files('/home/ayushi/Dropbox/Bundeli/corpus/wob/sklearn',
encoding='utf-8')
vec = DictVectorizer()
X = vec.fit_transform(extract_features(f) for f in data.data)
其中extract_features
是一个特定于数据集的函数,它接受一个字符串并生成一个映射特征名称到特征值的字典。