原始數據有很多種,除了數字信號數據(聲紋、圖像),還有大量的符號文本。但是,我們不能直接使用符號化的文本本身進行計算任務,而是需要通過壹些處理手段,預先將文本量化為特征向量。
用符號表示的壹些數據特征已經被相對結構化並存儲在字典的數據結構中。此時,我們使用DictVectorizer來提取和矢量化特征。
[[ 1.0.0.33.]
[ 0.1.0.12.]
[ 0.0.1.18.]]
['城市=迪拜','城市=倫敦','城市=舊金山','溫度']
在特征矢量化的過程中,DictVectorizer對類別特征和數值特征的處理方法存在較大差異。因為分類特征不能直接用數字表示,所以需要結合原有特征的名稱生成新的特征,用0/1的二進制方式量化。數值變換相對方便,壹般只需要保持原特征值。
其他文本數據更原始,它們只是壹系列字符串,幾乎沒有專門的數據結構進行存儲。我們處理這些數據,常用的文本特征表示方法是詞袋法:顧名思義,在不考慮詞出現順序的情況下,將訓練文本中的每個詞視為壹列特征。我們把這些不重復的詞匯集稱為詞庫,這樣每壹個訓練文本都可以在壹個高維的詞庫中投射出壹個特征向量。特征值常見的計算方法有兩種,CountVector和TFIDFVECTOR。對於每個訓練文本,CountVectorizer只考慮訓練樣本中每個單詞的$ Term。TfidfVectorizer不僅考慮壹個詞在當前文本中的$ Term頻率,還關註包含該詞的文本數量的倒數。相比之下,訓練文本中的項目越多,TfidfVectorizer就越有優勢。因為計算$ Term頻率的目的是找出對所有文本的意義貢獻更大的重要單詞。但是,如果壹個詞出現在幾乎每壹篇文本中,說明它是壹個常用詞,但不會幫助模型對文本進行分類;當有大量訓練樣本時,使用TfidfVectorizer來抑制這些常用詞對分類決策的幹擾,往往可以提高模型的性能。
我們通常把這些出現在每篇課文中的常用詞稱為停用詞,如the、A等。這些停用詞通常在文本特征提取中被列入黑名單,並用於提高模型的性能。
使用樸素貝葉斯(不過濾停用詞的計數矢量器)對20個新聞群組進行分類的準確度:0 . 16866 . 868686868665
在不去除停用詞的情況下,CountVectorizer對訓練和測試樣本的特征進行量化,並使用默認的樸素貝葉斯分類器,在測試文本中預測準確率可以達到83.977%。而且平均準確率、召回率和F1指數分別為0.86、0.84和0.82。
使用樸素貝葉斯(無過濾停用詞的TfidfVectorizer)對20個新聞組進行分類的準確度:0.84745331
在不去除停用詞的情況下,使用TfidfVectorizer對訓練和測試樣本的特征進行量化,使用默認的樸素貝葉斯分類器在測試文本中獲得比CountVectorizer更高的預測準確率,即從83.977%提高到84.635%。而且平均準確率、召回率和F1指數分別為0.86、0.84和0.82。
使用樸素貝葉斯(通過過濾停用詞的計數矢量器)對20個新聞群組進行分類的準確度:0.863752122241
使用樸素貝葉斯(通過過濾停用詞的TfidfVectorizer)對20個新聞群組進行分類的準確度:0.88676867889
結果表明,tfidf向量機的特征提取和量化方法更具優勢。平均而言,過濾停用詞的文本特征提取方法的綜合性能比不過濾停用詞的模型高3% ~ 4%。