gpt4 book ai didi

python - 如何根据条件删除 y_train 数组中值的百分比

转载 作者:太空宇宙 更新时间:2023-11-03 20:59:16 25 4
gpt4 key购买 nike

我是 Python 新手,我有一个关于删除数组 y_train 中 50% 的值的问题,但只删除 value = 0 的值

所以我使用train_test_split来创建x_test x_train y_test和y_train。在 y_train 中,有 5287 乘以值 0 和 422 乘以值 1。我想删除 y_train 中值为 0 的 50%。这样 y_train 只有 5287/2 = 2644 乘以值 0 和 422 乘以值 1。

我想这样做是因为我有一个小数据框。我的随机森林模型仅预测 0 而不是 1。所以我希望 y_train 中的 0 值较小。问题是 y_train 是一个数组而不是数据帧。

定义 X 和 Y,以“Schade_tussen_6_18_mnd”为目标

Y = np.array(df['Schade_tussen_6_18_mnd'])
X = df.drop('Schade_tussen_6_18_mnd', axis=1)

用于分割我的数据:

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, stratify=Y)

我尝试过这个Y_train.drop(Y_train.query(' = 0').sample(frac=0.5).index)但我收到错误:numpy.ndarray'对象没有属性'drop

我希望输出为 y_train(2644 ,422) 而不是 y_train(5287 ,422)

最佳答案

实际上,不要自己执行此操作,而是使用像 imbalanced-learn 这样的包。

但是,这里是使用 numpy 执行此操作的示例:

import numpy as np

def make_fake_y(n_zeros, n_ones):
y = np.array([0]*n_zeros + [1]*n_ones)
np.random.shuffle(y)
return y

def find_half_the_zeros(y):
idx_0 = np.where(y==0)[0]
np.random.shuffle(idx_0)
idx_delete = idx_0[:idx_0.shape[0]//2]
return idx_delete

示例:

>> y = make_fake_y(10,5)
>> y
array([0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0])
>> idx = find_half_the_zeros(y)
>> idx
array([14, 3, 6, 11, 12])
>> np.delete(y,idx)
array([0, 0, 1, 1, 1, 0, 0, 0, 1, 1])

关于python - 如何根据条件删除 y_train 数组中值的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com