1. 程式人生 > >14.【進階】特徵提升之特徵抽取----DictVectorizer

14.【進階】特徵提升之特徵抽取----DictVectorizer

說明:DictVectorizer的處理物件是符號化(非數字化)的但是具有一定結構的特徵資料,如字典等,將符號轉成數字0/1表示。

#-*- coding:utf-8 -*-

#學習目標:使用DictVectorizer對使用字典儲存的資料進行特徵抽取和向量化

#定義一組字典列表,用來表示多個數據樣本(每個字典代表一個數據樣本)
measurements = [{'city':'Beijing','temperature':33.},{'city':'London','temperature':12.},{'city':'San Fransisco','temperature':18.}]
#從sklearn.feature_extraction匯入DictVectorizer
from sklearn.feature_extraction import DictVectorizer vec = DictVectorizer() #輸出轉化後的特徵矩陣 print vec.fit_transform(measurements).toarray() #輸出各個維度的特徵含義 print vec.get_feature_names()

輸出結果為:

[[  1.   0.   0.  33.]
 [  0.   1.   0.  12.]
 [  0.   0.   1.  18.]]
['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']

我們不難發現,DictVectorizer對非數字化的處理方式是,藉助原特徵的名稱,組合成新的特徵,並採用0/1的方式進行量化,而數值型的特徵轉化比較方便,一般情況維持原值即可。

接下來進一步驗證這個結論,決定在每個原來的字典結構中,再增加一個符號化特徵,”country”

#-*- coding:utf-8 -*-

#定義一組字典列表,用來表示多個數據樣本(每個字典代表一個數據樣本)
measurements = [{'city':'Beijing','country':'CN','temperature':33.},{'city':'London','country':'UK','temperature'
:12.},{'city':'San Fransisco','country':'USA','temperature':18.}] #從sklearn.feature_extraction匯入DictVectorizer from sklearn.feature_extraction import DictVectorizer vec = DictVectorizer() #輸出轉化後的特徵矩陣 print vec.fit_transform(measurements).toarray() #輸出各個維度的特徵含義 print vec.get_feature_names()

輸出結果:

[[  1.   0.   0.   1.   0.   0.  33.]
 [  0.   1.   0.   0.   1.   0.  12.]
 [  0.   0.   1.   0.   0.   1.  18.]]
['city=Dubai', 'city=London', 'city=San Fransisco', 'country=CN', 'country=UK', 'country=USA', 'temperature']