2016-02-12 21 views
0

我在二進制文本分類任務中使用scikit-learn,並且我想確定「每個」類的最佳功能,因此,基於它們的分類器可以識別正確的類別。如何識別已用於對每個類進行分類的最佳功能

任何方向我該怎麼做?現在我正在使用CountVectorizer,我可以看到兩個類最常見的功能,但它並不顯示哪個功能屬於哪個類。也可能最常見的功能並不總是最好的,因爲它可能是常見的這兩個類別意味着將樣品確定爲a類或b類不是很好。

下面是我在做什麼:

vec=CountVectorizer(tokenizer=tokens2,max_features=2000) 
x=vec.fit_transform(X_train).toarray() 

print x 
print len(x[0]) # this should print the no. of feature which is 2000 in my case 
print len(x) # this should print the no. of samples which is 980 

我明白max_features限制詞匯的前K功能只有兩個班,我想爲「每個」類。 我也看過alvas回答於here,但似乎他的代碼只適用於分類器'MultinomialNB'..我已經成功地使用它與此分類器,但是,當將分類器更改爲DecisionTreeClassifier它會上升以下錯誤:

AttributeError: 'DecisionTreeClassifier' object has no attribute 'coef_' 

和改變分類,以SVC「線性」,當它打印,我無法理解不同的結果。

0 (0, 22699) 2.2089966234e-05 
    (0, 17115) 0.00011044983117 
    (0, 17106) 2.2089966234e-05 
    (0, 17096) 2.2089966234e-05 
    (0, 17094) 2.2089966234e-05 
    (0, 17079) 2.2089966234e-05 
    (0, 17077) 2.2089966234e-05 
    (0, 17064) 2.2089966234e-05 
    (0, 17047) 2.2089966234e-05 
    (0, 10872) 0.00011044983117 
    (0, 10871) 8.83598649358e-05 
. 
. 
1 (0, 22699) 2.2089966234e-05 
    (0, 17115) 0.00011044983117 
    (0, 17106) 2.2089966234e-05 
    (0, 17096) 2.2089966234e-05 
    (0, 17094) 2.2089966234e-05 
    (0, 17079) 2.2089966234e-05 
    (0, 17077) 2.2089966234e-05 
    (0, 17064) 2.2089966234e-05 
    (0, 17047) 2.2089966234e-05 
    (0, 10872) 0.00011044983117 
    (0, 10871) 8.83598649358e-05 
    (0, 10870) 0.000198809696106 
    (0, 10516) 0.00011044983117 
  • 只是想還提到,總沒有。的功能,我有16908,它可以得到更多取決於矢量的參數,當然..這會是一個問題?何時應該考慮應用隨機投影?
+0

你能告訴我們你的步驟嗎? –

+0

我編輯了我的問題並添加了它們。 – Ophilia

回答

0

如果選擇DecisionTree或隨機森林,你可以爲了看看有什麼是最有助於預測功能訪問feature_importances_屬性。

但這是一個全球性的貢獻,而不是一個班級。

相關問題