0

我正在使用scikit-learn進行問題分類。我有這樣的代碼:TfidfVectorizer和SelectPercentile返回什麼?

print(features[0], '\n') 

vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, 
          stop_words='english') 

features = vectorizer.fit_transform(features) 

print(features[0], '\n') 
selector = SelectPercentile(f_classif, percentile=100) 
selector.fit(features, labels) 
features = selector.transform(features).toarray() 

print(features[0]) 
print(len(features[0]), '\n') 

產生以下結果:

how serfdom develop leav russia ? 

(0, 5270) 0.499265751002 
(0, 3555) 0.473352969263 
(0, 1856) 0.449852125968 
(0, 5433) 0.569476725713 

[ 0. 0. 0. ..., 0. 0. 0.] 
6743 

的第一個問題是什麼由tfidfVectorizer返回的矩陣是什麼意思? sklearn文檔說:

學習詞彙和idf,返回term-document matrix。 這相當於適合轉換,但更有效地實現。

維基百科:

顯示哪些文件包含哪些方面又多少次出現。

矩陣的維基百科示例很簡單,但返回的值似乎完全不同。

下一步SelectPercentile函數應該返回的功能,這是最重要的,這取決於特定的百分比列表:

減少X到所選擇的功能。

爲什麼我得到6743層的功能? :D

P.S .:該程序似乎以89%的準確度工作。

編輯:我是新來的Python和機器學習,所以請解釋它像IM五位。

+0

交叉貼:http://stats.stackexchange.com/q/245928

如果您參考下面的鏈接,裏面詳細介紹了整個TF-IDF這樣會更有幫助/ 2921,http://stackoverflow.com/q/40595936/781723。請[不要在多個網站上發佈相同的問題](http://meta.stackexchange.com/q/64068)。每個社區都應該誠實地回答問題,不要浪費任何人的時間。 –

回答

1

我們的電腦適用於數字(他們理解的唯一語言)。 因此,爲了處理/分析我們的文本,我們需要一種將文本轉換爲數字的方法。 TfIdf(詞頻 - 逆文件頻率)就是這種方法之一。

「術語頻率」(Tf)根據單詞在文檔中的頻率來說明單詞在文檔中的重要性。但是這可能是因爲很少有語義上非常重要的詞語具有低頻率。爲了解決這個問題,我們使用「反向文檔頻率」(Idf)。

https://janav.wordpress.com/2013/10/27/tf-idf-and-cosine-similarity/