要将任何字段转换为二项式,我们需要在特征向量(标题)中添加一些组件,这些组件等于该字段中可能值的数量。然后,如果数据点具有第i个值,则将第i个中的一个组件设置为1,将该属性的其余部分设置为0
e.g。考虑遵循数据集
array = np.array(['cat', 'dog', 'mouse', 'cat'])
我期待的结果是result = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0]])
提前谢谢。
答案 0 :(得分:1)
建议的答案很好,但您也可以考虑使用pandas:
http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.get_dummies.html
答案 1 :(得分:1)
三线。首先创建一个列表,将cat
,dog
和mouse
映射到一个数字,这是它们在列表中的位置,然后创建一个数组进行操作。最后使用列表推导来进行映射。
m = ['cat', 'dog', 'mouse']
x = np.array([1, 0, 0])
result = np.array([np.roll(x, m.index(value)) for value in array])
输出:
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 0]])
如果您想处理不在m
中的值,则可以按如下方式修改列表推导:
arr = np.array(['cat', 'dog', 'mouse', 'cat', None, 'dog']) # Example array
result = np.array([np.roll(x, m.index(value)) if value in m else np.zeros(len(m)) for value in arr])
输出:
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.]])
答案 2 :(得分:0)
常见的python
def binom(arr):
seen = set()
values = []
for item in arr:
if item in seen:
continue
seen.add(item)
values.append(item)
result = []
for item in arr:
r = [0] * len(values)
r[values.index(item)] = 1
result.append(r)
return result