【发布时间】:2017-09-30 04:29:58
【问题描述】:
我有两个包含一堆句子的文件。其中一个文件包含带有肯定词的句子,而另一个带有否定词的句子。我正在尝试在“正面”和“负面”两个类别上训练分类器,这样当我给它一个新句子时,它会告诉它属于哪个类别。这是我目前所拥有的:
...
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True, sublinear_tf=False)
input_list = ['A positive sentence', 'A negative sentence', ...]
class_list = [0, 1, ...]
df= pd.DataFrame({'text':input_list,'class': class_list})
X = tfidf_vect.fit_transform(df['text'].values)
y = df['class'].values
a_train, a_test, b_train, b_test = train_test_split(X, y, test_size=0.33, random_state=42)
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=10)
classifier.fit(a_train.toarray(), b_train)
prediction = classifier.predict(a_test.toarray())
from sklearn import metrics
print(metrics.f1_score(b_test, prediction, average='macro'))
# classify a new sentence
df= pd.DataFrame({'text': ['A negative sentence', 'A positive sentence'],'class': [1, 0]})
print(classifier.predict(tfidf_vect.transform(df['text'].values)))
当我尝试对新句子进行分类时,我得到一个特征不匹配。我的问题是,这段代码中考虑的功能到底是什么?以及如何定义特征(例如,如果我想做的不仅仅是一袋单词,并且让每个单词的每个向量编码更多内容)?
【问题讨论】:
-
1) 考虑的特征是每个句子中每个 unigram 的 tfidf 分数。 2) 最后一行 (
print(classifier.predict(X))) 的调用是故意的吗?我认为应该是classifier.predict(tfidf_vect.transform(df['text'].values))。 -
@Elisha 感谢您指出这一点
标签: python machine-learning scikit-learn