python中从名词到二名词

2024-04-26 17:45:10 发布

您现在位置:Python中文网/ 问答频道 /正文

要将任何字段转换为二项式,我们需要在特征向量(标题)中添加一些与该字段中可能值的数量相等的组件。然后,如果一个数据点具有第i个值,则将这些组件中的第i个设置为1,将该属性的其余部分设置为0

例如,考虑以下数据集

array = np.array(['cat', 'dog', 'mouse', 'cat'])

我期望的结果是result = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0]])

提前谢谢你。在


Tags: 数据标题数量属性np组件resultarray
3条回答

建议的答案是好的,但您也可以考虑使用熊猫:

http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.get_dummies.html

在普通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

三个班轮。首先创建一个列表,该列表将catdog和{}映射到一个数字,即它们在列表中的位置,然后创建一个数组进行操作。最后使用列表理解来做映射。在

m = ['cat', 'dog', 'mouse']
x = np.array([1, 0, 0])
result = np.array([np.roll(x, m.index(value)) for value in array])

输出:

^{pr2}$

如果要处理不在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.]])

相关问题 更多 >