我正在尝试使用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
期望输入的是一个数组或稀疏矩阵。)这个问题可以通过将字符串放入列表中来解决:
predict_proba(['Hello'])