我有一个包含文档及其说明的文本文件。我使用scikit-learn中的SGD Classifier来获取两个独立的文档类。我已经使用以下代码训练了我的模型:scikit-learn SGD文档分类器:仅使用重要功能
fo = open('training_data.txt','rb')
all_classes = np.array([0,1])
for i,line in enumerate(generate_in_chunks(fo,1000)):
x = [member.split('^')[2] for member in line if member!="\n"]
y = [member.split('^')[1] for member in line if member!="\n"]
vectorizer = HashingVectorizer(decode_error='ignore', n_features=2 ** 18,non_negative=True)
x_train = vectorizer.transform(x)
y_train = np.asarray(y,dtype=int)
clf = SGDClassifier(loss='log',penalty='l2',shuffle=True)
clf.partial_fit(x_train, y_train,classes=all_classes)
现在我在测试数据集上使用此clf对象。在这里,我想使用教程变换提到: http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier
代码:
fo = open('test_data.txt','rb')
prob_comp = open('pred_prob_actual.txt','wb')
for i,line in enumerate(generate_in_chunks(fo,21000)):
x = [member.split('^')[2] for member in line if member!="\n"]
y = [member.split('^')[1] for member in line if member!="\n"]
vectorizer = HashingVectorizer(decode_error='ignore', n_features=2 ** 18,non_negative=True)
x_test = vectorizer.transform(x)
y_test = np.asarray(y,dtype=int)
clf.predict(clf.transform(x_test))
错误:
回溯(最近通话最后一个):
文件 “test.py” ,第106行,在 clf.predict(clf.transform(x_test)) 文件“/opt/anaconda2.2/lib/python2.7/site-packages/sklearn/linear_model/base.py”,第223行,in预测 scores = self.decision_function(X) 文件“/opt/anaconda2.2/lib/python2.7/site-packages/sklearn/linear_model/base.py”,行204,在decision_function %(X.shape [ 1],n_features))
ValueError:X每个样本有78个特征;因此,基本上虽然它已经确定了重要的功能,但在预测测试数据时无法使用它们。
任何有关如何在测试数据上使用变换方法的建议将受到广泛赞赏。 我只想使用重要功能并寻找可以帮助实现这一目的的方法,只是为了使其更加清晰。 谢谢。
对于重要的特点,我建议你看一看[TfIdfVectorizer]( http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html#sklearn.feature_extraction.text.TfidfVectorizer)。有了它,您可以指定一个'min_df',它可以帮助您提取文档中更重要的功能。 –