如何使用sklearn DictVectorizer对列表进行矢量化

fi1*_*1er 7 python scikit-learn

我在sklearn docs网站上找到了下一个例子:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

我需要矢量化dict,看起来像:

>>> measurements = [
...     {'city': ['Dubai','London'], 'temperature': 33.},
...     {'city': ['London','San Fransisco'], 'temperature': 12.},
...     {'city': ['San Fransisco'], 'temperature': 18.},
... ]
Run Code Online (Sandbox Code Playgroud)

得到下一个结果:

array([[  1.,   1.,   0.,  33.],
       [  0.,   1.,   1.,  12.],
       [  0.,   0.,   1.,  18.]])
Run Code Online (Sandbox Code Playgroud)

我的意思是dict的值应该是一个列表(或元组等).

我可以使用DictVectorizer或以任何其他方式执行此操作吗?

Fre*_*Foo 17

将表示更改为

>>> measurements = [
...     {'city=Dubai': True, 'city=London': True, 'temperature': 33.},
...     {'city=London': True, 'city=San Fransisco': True, 'temperature': 12.},
...     {'city': 'San Fransisco', 'temperature': 18.},
... ]
Run Code Online (Sandbox Code Playgroud)

然后结果与您期望的完全一样:

>>> vec.fit_transform(measurements).toarray()
array([[  1.,   1.,   0.,  33.],
       [  0.,   1.,   1.,  12.],
       [  0.,   0.,   1.,  18.]])
Run Code Online (Sandbox Code Playgroud)