2016-08-01 134 views
4

我剛開始學習隨機森林,因此,如果這聽起來很愚蠢,我感到很遺憾它sklearn countvectorizer中的fit_transform和transform有什麼區別?

我最近練bag of words introduction : kaggle,我想清楚了幾件事情:使用vectorizer.fit_transform

( 「*的名單上清理評論*」)

現在,當我們在列車上的評論準備的話陣列的包,我們使用fit_predic t在列車評論列表中,現在我知道fit_predict做了兩件事,>首先它適合數據並知道詞彙,然後它在每個評論上製作向量。

因此,當我們使用vectorizer.transform(「清除乾淨火車評論列表」)這只是變換的評論測試名單爲每個審查向量。

我的問題是.....爲什麼不在測試列表上使用fit_transform !!我的意思是它說,它會導致過度擬合的文件,但等待它確實對我來說很有意義反正使用它,讓我給你我的預期:

,當我們不使用fit_transform我們基本上說來使用火車評論最頻繁的單詞製作測試評論的特徵向量!爲什麼不使用測試中最頻繁的單詞來測試特徵數組?

我的意思是隨機的關心?如果我們給隨機森林列車功能陣列和火車功能情緒工作和訓練本身,然後給它測試功能陣列它不會只是它的情緒預測。

注:我可能沒有要求在正確的道路,但是,你的人嘗試回答我會更新這個問題更清楚..

回答

5

你不這樣做對測試數據的fit_transform因爲,當您適合隨機森林,隨機森林根據您提供的功能值來了解分類規則。如果要應用這些規則對測試集進行分類,那麼您需要確保使用相同的詞彙表以相同的方式計算測試特徵。如果訓練詞彙和測試特徵不同,那麼特徵就沒有意義,因爲它們會反映與文檔所訓練的詞彙不同的詞彙。

現在,如果我們具體講講CountVectorizer,然後再考慮下面的例子,讓你的訓練數據有以下3句:

  1. 狗是黑色的。
  2. 天是藍的。
  3. 狗在跳舞。

現在爲此設置的詞彙將是{Dog,is,black,sky,blue,dancing}。現在,您將訓練的隨機森林將嘗試根據這6個詞彙項的數量來學習規則。所以你的特徵將是長度爲6的矢量。現在如果測試集如下:

  1. 狗是白色的。
  2. 天空是黑色的。

現在,如果您使用fit_transform的測試數據,則您的詞彙表將看起來像{Dog,white,is,Sky,black}。所以在這裏,你的每個文檔將由一個長度爲5的矢量表示,表示每個這些術語的計數。現在,這將會像蘋果與橘子的比較。你學習了以前詞彙計數的規則,這些規則不能應用於這個詞彙表。這就是爲什麼你只有fit的訓練數據。

希望有幫助!