14.【進階】特徵提升之特徵抽取----DictVectorizer
阿新 • • 發佈:2019-01-04
說明: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']