Scikit SGDClassifier使用字母作为功能而不是单词

时间:2016-02-24 13:26:17

标签: python machine-learning nlp scikit-learn

我正在尝试使用this教程

之后的SGDClassifier对短语进行分类

我的管道看起来像这样:

p_clf = Pipeline([('vect', CountVectorizer(analyzer='word', ngram_range=(1, 2),
                                  token_pattern=r'\b\w+\b', min_df=1)),
                  ('tfidf', TfidfTransformer()),
                  ('clf', SGDClassifier(loss='log', penalty='l2',
                                        alpha=1e-3, n_iter=5, random_state=42)), ])

即使我得到了正确的分类,我也不明白为什么它将字母视为特征而不是整个字。在此示例中,当我调用predict_proba('Hello')时,我得到:

[[ 0.15889614  0.23752053  0.4353584   0.16822494]
 [ 0.15889614  0.23752053  0.4353584   0.16822494]
 [ 0.15889614  0.23752053  0.4353584   0.16822494]
 [ 0.15889614  0.23752053  0.4353584   0.16822494]
 [ 0.11579265  0.19786962  0.36811551  0.31822223]]

每行是一个字母,列是我的类。 不应该只是一排吗?

1 个答案:

答案 0 :(得分:1)

在您的情况下,'Hello'被解释为像['H','e','l','l','o']这样的字符数组。 (请记住,predict_proba需要一个数组或一个稀疏矩阵作为输入。)这可以通过将字符串放在一个列表中来解决:

predict_proba(['Hello'])