2016-02-24 19 views
0

我想以下this教程分類使用SGDClassifier短語Scikit 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]] 

其中每排一個字母和列是我的班。 它不應該只是一行嗎?

+0

''Hello''被也許解釋爲一個陣列/列表等[1 H 」, 'E', 'L', 'L', 'O']。如果使用predict_proba(['Hello'])會發生什麼? –

+0

解決了它!謝謝 ! – Malaio

+0

好,很高興我能幫到你。我會把它寫成答案,以便這個問題有一個可接受的答案。 –

回答

1

在你的情況'Hello'被解釋爲一個字符數組,如['H','e','l','l','o']。 (記住predict_proba期望一個陣列或稀疏矩陣作爲輸入)。這可以通過將串中的列表來解決:

predict_proba(['Hello']) 
相關問題