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])
我是 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])