sklearn:从多项选择功能中创建稀疏特征向量

时间:2017-04-13 18:17:31

标签: scikit-learn

我的数据看起来像这样:

20003.0, 20003.1, 20004.0, 20004.1, 34
1, 2, 3, 4, 5

其中带有。*的列是多项选择,它们所采用的值是分类。

理想情况下,我可以将[{'20003': ['1', '2'], '20004': ['3', '4'], '34': 5}]传递给DictVectorizer,但目前尚不支持。

如何加载这些数据以创建稀疏特征向量?

1 个答案:

答案 0 :(得分:0)

如果您可以总结相同列组的值:

In [63]: df
Out[63]:
   20003.0  20003.1  20004.0  20004.1  34
0        1        2        3        4   5

In [64]: d = df.groupby(df.columns.str.split('.').str[0], axis=1).sum().to_dict('r')

In [65]: d
Out[65]: [{'20003': 3, '20004': 7, '34': 5}]

In [66]: from sklearn.feature_extraction import DictVectorizer

In [67]: v = DictVectorizer()

In [68]: X = v.fit_transform(d)

In [69]: X.toarray()
Out[69]: array([[ 3.,  7.,  5.]])

In [70]: v.inverse_transform(X)
Out[70]: [{'20003': 3.0, '20004': 7.0, '34': 5.0}]

说明:

In [71]: df.groupby(df.columns.str.split('.').str[0], axis=1).sum()
Out[71]:
   20003  20004  34
0      3      7   5

In [72]: df.groupby(df.columns.str.split('.').str[0], axis=1).sum().to_dict('r')
Out[72]: [{'20003': 3, '20004': 7, '34': 5}]