如何使用scikits学习创建稀疏或NxM矩阵

时间:2017-12-30 10:01:31

标签: python scikit-learn

我有一个看起来像这样的备用数组

N  M
a cat
b cat
c cat
a dog
d dog
e dog

我需要以这种格式表示:

   cat dog
a   1   1
b   1   0
c   1   0
d   0   1
e   0   1

使用scikits - 了解我该怎么做?

我的原始数据如下所示:

[{"N":"a"},{"M":"cat"},{"N":"a"},{"M":"dog"}...]

单元格但是二进制,将用于nmf算法。

如果我运行以下内容:

data = [{"N":"a"},{"M":"cat"},{"N":"a"},{"M":"dog"}]
v = DictVectorizer(sparse=False)

    [[ 0.  0.  1.]
 [ 1.  0.  0.]
 [ 0.  0.  1.]
 [ 0.  1.  0.]]

但它看起来应该是这样的:

1 1

由于

1 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为你只需要使用" M"用于构建编码的列。

v = DictVectorizer(sparse=False) # sparse=False now
data = [{"N":"a"},{"M":"cat"},{"N":"a"},{"M":"dog"}]
filtered_data = (d for d in data if "M" in d.keys()) # filter out "N"
v.fit_transform(filtered_data)
# output
array([[ 1.,  0.],
       [ 0.,  1.]])

pandas' 方式。

import pandas as pd
pd.concat([df.N, df.M.str.get_dummies()], axis=1)

    N  cat dog
0   a   1   0
1   b   1   0
2   c   1   0
3   a   0   1
4   d   0   1
5   e   0   1

df.M.str.get_dummies()将生成:

   cat  dog
0   1   0
1   1   0
2   1   0
3   0   1
4   0   1
5   0   1