gpt4 book ai didi

python - (Python) 使用 sklearn 类中的 DictVectoriser 和字符串

转载 作者:行者123 更新时间:2023-12-01 03:41:16 25 4
gpt4 key购买 nike

对于我期望的简单问题/答案,提前表示歉意。这里是 python 和 sklearn 的新手。我有一个变量(pandas 数据框列),它是 unicode 字符串列表。我想使用 sklearn 中的 DictVectorizer 类将其解压到单热编码矩阵中,其中每一列都是可能的字符串值之一,矩阵中的每个值都是一个二进制值,指示该值是否出现在该列表中。

DictVectorizer文档中的示例如下:

# example from docs from sklearn.feature_extraction import DictVectorizer 
v = DictVectorizer(sparse=False)
D = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}]
X = v.fit_transform(D)
X

这会按 promise 返回矢量化数组,但在我的情况下,我想向它传递一个 unicode 字符串列表,例如:

# my case
D = [[u"foo", u"bar"], [u"foo"]]
X = v.fit_transform(D)

这里我收到一个错误。

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-48-6a41384fcd8f> in <module>()
1 # my case
2 D = [[u"foo", u"bar"], [u"foo"]]
----> 3 X = v.fit_transform(D)

/opt/conda/lib/python2.7/site-packages/sklearn/feature_extraction/dict_vectorizer.pyc in fit_transform(self, X, y)
224 Feature vectors; always 2-d.
225 """
--> 226 return self._transform(X, fitting=True)
227
228 def inverse_transform(self, X, dict_type=dict):

/opt/conda/lib/python2.7/site-packages/sklearn/feature_extraction/dict_vectorizer.pyc in _transform(self, X, fitting)
160 # same time
161 for x in X:
--> 162 for f, v in six.iteritems(x):
163 if isinstance(v, six.string_types):
164 f = "%s%s%s" % (f, self.separator, v)

/opt/conda/lib/python2.7/site-packages/sklearn/externals/six.pyc in iteritems(d, **kw)
437 def iteritems(d, **kw):
438 """Return an iterator over the (key, value) pairs of a dictionary."""
--> 439 return iter(getattr(d, _iteritems)(**kw))
440
441 def iterlists(d, **kw):

AttributeError: 'list' object has no attribute 'iteritems'

最佳答案

正如评论和@Muthu的回答中提到的,DictVectorizer的输入格式是dict。

如果您使用 Counter 来计算元素数量,否则如果您需要将其作为一种热编码,请在 lambda 函数中使用 set

import pandas as pd
from collections import Counter
from sklearn.feature_extraction import DictVectorizer

D = [[u"foo", u"bar"], [u"foo"]]
df = pd.DataFrame({'my_col': D})

x = df['my_col'].apply(lambda x: dict(Counter(x)))
DictVectorizer(sparse=False).fit_transform(x)

#array([[1., 1.],
# [0., 1.]])

关于python - (Python) 使用 sklearn 类中的 DictVectoriser 和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39592114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com