如何用sklearn的DictVectorizer向量化列表
我在sklearn的文档网站上找到了下面这个例子:
>>> measurements = [
... {'city': 'Dubai', 'temperature': 33.},
... {'city': 'London', 'temperature': 12.},
... {'city': 'San Fransisco', 'temperature': 18.},
... ]
>>> from sklearn.feature_extraction import DictVectorizer
>>> vec = DictVectorizer()
>>> vec.fit_transform(measurements).toarray()
array([[ 1., 0., 0., 33.],
[ 0., 1., 0., 12.],
[ 0., 0., 1., 18.]])
>>> vec.get_feature_names()
['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']
我需要把一个字典转换成向量,字典的样子是:
>>> measurements = [
... {'city': ['Dubai','London'], 'temperature': 33.},
... {'city': ['London','San Fransisco'], 'temperature': 12.},
... {'city': ['San Fransisco'], 'temperature': 18.},
... ]
希望得到的结果是:
array([[ 1., 1., 0., 33.],
[ 0., 1., 1., 12.],
[ 0., 0., 1., 18.]])
我的意思是,字典里的值应该是一个列表(或者元组等等)。
我可以用DictVectorizer或者其他方法做到这一点吗?
1 个回答
18
把表示方式改成
>>> measurements = [
... {'city=Dubai': True, 'city=London': True, 'temperature': 33.},
... {'city=London': True, 'city=San Fransisco': True, 'temperature': 12.},
... {'city': 'San Fransisco', 'temperature': 18.},
... ]
这样结果就和你预期的一样了:
>>> vec.fit_transform(measurements).toarray()
array([[ 1., 1., 0., 33.],
[ 0., 1., 1., 12.],
[ 0., 0., 1., 18.]])