numpy 我想拆分数据(正/负),并将它们放入空的数字数组中,(逻辑回归示例)

4ioopgfo  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(120)

所以我被困在解决这个问题上,我有这个电子邮件ID的数据和它们各自的值为0和1(逻辑回归中使用的相应标记值)。数据如下:

input_x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
input_y = np.array([0,1,0,0,1,1,1,0,0,0,0,1,0,1,0])

现在我想将这些数据分成两个集合,一个集合中包含所有0的值和相应的“INPUT_x”值,而另一个集合中包含所有1的值和对应的“INPUT_x”值。为此,我创建了以下函数:

def split_data(x,y):
    shpx = x.shape[0]
    shpy = y.shape[0]
    neg_data = 0
    pos_data = 0
    for i in range(shpy):
        if y[i] == 0:
            neg_data = neg_data + 1
        else:
            pos_data = pos_data + 1

    print(f"Number of negative (0) values = {neg_data}")
    print(f"Number of positive (1) values = {pos_data}")

    emp_neg_data_x = np.zeros(neg_data)
    emp_neg_data_y = np.zeros(neg_data)
    emp_pos_data_x = np.zeros(pos_data)
    emp_pos_data_y = np.zeros(pos_data)

    for j in range(neg_data):
        for k in range(shpx):
            if y[k] == 0:
                emp_neg_data_x[j] = x[j]
                emp_neg_data_y[j] = 0
            else:
                pass
    for m in range(pos_data):
        for n in range(shpx):
            if y[n] == 0:
                emp_pos_data_x[m] = x[m]
                emp_pos_data_y[m] = 1
            else:
                pass

    return emp_neg_data_x,emp_neg_data_y,emp_pos_data_x,emp_pos_data_y

其中参数x&y是输入数组。在运行此函数时,我得到的结果如下:

Number of negative (0) values = 9
Number of positive (1) values = 6
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 2. 3. 4. 5. 6.]
[1. 1. 1. 1. 1. 1.]

emp_neg_data_y和emp_pos_data_y给出了正确的值,但其他两个数组只是输出排序后的索引值,而不是0和1对应的Email_IDx/Input_x的值。您能帮我解决一下吗?(我猜循环中有问题,但我被卡住了…)

k5hmc34c

k5hmc34c1#

首先制作一本x和y的词典:

input_x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
input_y = np.array([0,1,0,0,1,1,1,0,0,0,0,1,0,1,0])
y_dict = {x: input_y[x-1] for x in input_x}

创建您的列表并打印:

emp_neg_data_x = [x for x, y in y_dict.items() if y == 0]
emp_neg_data_y = [y for x, y in y_dict.items() if y == 0]
emp_pos_data_x = [x for x, y in y_dict.items() if y == 1]
emp_pos_data_y = [y for x, y in y_dict.items() if y == 1]

print(emp_neg_data_x)
print(emp_neg_data_y)
print(emp_pos_data_x)
print(emp_pos_data_y)

产出:

[1, 3, 4, 8, 9, 10, 11, 13, 15]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[2, 5, 6, 7, 12, 14]
[1, 1, 1, 1, 1, 1]

相关问题