字典特征提取器DictVectorizer
DictVectorizer的作用:
- 利用0 1矩阵将字典数据结构向量化
#定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)
measurements = [{'city':'Beijing','temperature':33.},{'city':'London','temperature':12.},{'city':'San Fransisco','temperature':18.}]
'''
city temperature
Beijing 12
London 33
SanFransisco 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=Beijing', 'city=London', 'city=San Fransisco', 'temperature']
可以看出来,DictVectorizer做的处理就是利用类似于独热编码的方式为每个特征j进行向量化
- 为了使结果更加明显,我们在原有字典中再添加国家特征,country
#定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)
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=Beijing', 'city=London', 'city=San Fransisco', 'country=CN', 'country=UK', 'country=USA', 'temperature']
运行结果一目了然,对于矩阵的第一行,由于有三个城市和三个国家则共需要6个二值(0 1),前[1 0 0]代表北京,后面[1 0 0]表示的则是中国,最后就是剩下的都存在的共同特征温度的值了