【问题标题】:How can i vectorize list using sklearn DictVectorizer我如何使用 sklearn DictVectorizer 对列表进行矢量化
【发布时间】:2014-08-06 16:16:40
【问题描述】:

我在 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']

我需要对看起来像这样的 dict 进行矢量化:

>>> 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.]])

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

我可以使用 DictVectorizer 或以任何其他方式做到这一点吗?

【问题讨论】:

  • DictVectorizer 对字符串变量进行一次热编码,否则浮动。所以不,你不能用 DictVectorizer 做到这一点。如果这是你的情况,我会自己写一些东西。
  • @TalKremerman 这是完全可行的,看我的回答。

标签: python scikit-learn


【解决方案1】:

将表示更改为

>>> 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.]])

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 2017-05-29
    • 2015-07-10
    • 2015-02-24
    • 1970-01-01
    • 2021-05-06
    • 2022-08-16
    • 2018-12-06
    相关资源
    最近更新 更多