SciKit-learn 的 'predict' 函数以错误的格式给出输出

SciKit-learn's 'predict' function giving output in wrong format

我是 scikit 的新手,所以在玩它。

问题背景: 我正在尝试参加 hackerRank 上的 'Byte the correct apple' 比赛。 其中给我们两个文件,一个包含 apple the company 的文本,另一个包含 apple the fruit。现在我们必须从中学习,然后对新文本进行预测。

虽然代码可以运行,但我的问题是: - 由于 'line'(在下面的代码中)是单个输入,我应该得到单个数字输出,要么是零,要么是一。但是我得到一个数组作为输出。 - 我什至接近使用下面的代码学习任何东西了吗?

import numpy as np

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer


from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import SGDClassifier
from sklearn import svm
from sklearn.svm import LinearSVC

from sklearn.pipeline import Pipeline

appleComputers = [];
appleFruits = [];
labels = [];

with open('apple-computers.txt','r') as f:
    for line in f:
        appleComputers.append(line)
        labels.append(1);

with open('apple-fruit.txt','r') as f:
    for line in f:
        appleFruits.append(line)
        labels.append(0);

text = appleComputers + appleFruits;
labels = np.asarray(labels)

#text_clf = Pipeline([('vect', CountVectorizer()),('tfidf', TfidfTransformer()),('clf', MultinomialNB()),])
text_clf = Pipeline([('vect', CountVectorizer()),('tfidf', TfidfTransformer()),('clf', LinearSVC(loss='hinge', penalty='l2')),])

text_clf = text_clf.fit(text, labels)


line = 'I am talking about apple the fruit we eat.'
line = 'I am talking about the product apple computer by Steve Jobs'
predicted = text_clf.predict(line);
print predicted

predict函数returns一个数组对象,如documentation中所述。此数组对象对应于 labels 数组中的索引。要获得 line 的预测,您需要尝试类似的操作:

print labels[predicted]

我自己找到了答案。

对于

predicted = text_clf.predict(line);

'line' 应该是一个列表,而不是像 'fit' 函数那样的字符串。

即替换

line = 'I am talking about the product apple computer by Steve Jobs'

来自

line = [];    
line.append('I am talking about apple the fruit we eat.');

或@jme 建议我们可以使用

text_clf.predict([line])