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

问题描述 投票:0回答:1

我有一个看起来像这样的备用阵列

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

谢谢

python scikit-learn
1个回答
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.]])

做它熊猫的方式。

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
© www.soinside.com 2019 - 2024. All rights reserved.