【问题标题】:Scikit SGDClassifier using letters as features instead of wordsScikit SGDClassifier 使用字母作为特征而不是单词
【发布时间】:2016-06-06 19:44:59
【问题描述】:

我正在尝试按照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]]

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

【问题讨论】:

  • 'Hello' 可能被解释为像 ['H','e','l','l','o'] 这样的数组/列表。如果你使用predict_proba(['Hello'])会发生什么?
  • 解决了!谢谢!
  • 很好,很高兴我能帮上忙。我只是把它写成一个答案,这样这个问题就有一个被接受的答案。

标签: python machine-learning nlp scikit-learn


【解决方案1】:

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

predict_proba(['Hello'])

【讨论】:

    猜你喜欢
    • 2014-09-13
    • 2021-05-23
    • 2021-12-23
    • 2016-05-17
    • 2015-01-31
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多