Python подготавливает набор обучающих данных с равномерно распределенной переменной ответа

#python #training-data

#python #обучение-данные

Вопрос:

Я работаю над небольшим проектом машинного обучения.

Набор данных, который я использую, имеет 56 входных параметров и одну категориальную переменную ответа (0/1). Моя проблема в том, что переменные ответа распределены неравномерно. Теперь мой вопрос: я хочу подготовить набор обучающих данных, чтобы ответы были равномерно распределены. Как это можно сделать?

Вот как выглядят данные 1

-> обучающий набор данных должен иметь одинаковое количество 1 и 0 из ответа.

Спасибо за вашу помощь, как вы можете себе представить, я действительно новичок…

Комментарии:

1. Покажите нам свой код!

Ответ №1:

я такой же человек, как и тот, кто задал этот вопрос. извините за это. сначала я загружаю данные из файла csv.(не в коде, показанном здесь) это сохраняется как данные, затем я создаю новый столбец с именем «response_class» на основе значения в столбце «response», если оно ниже .045, response_class = 1, другое 0. во-вторых, я произвольно выбираю 10000 строк из данных. (из-за ограничений вычислений), и здесь я хочу убедиться, что я получаю одинаковое количество 1 и 0 из response_class . в конце я разделяю данные, чтобы подготовить их для корреляционной матрицы, а также тестирую и обучаю данные

Вот мой код:

 data = data[data.response != 0]

pd.DataFrame(data)
data['response_class'] = np.where(data['response'] <= 0.045, 1, 0)
#1=below .045  / 0=above 0.045

#reduce amount of data by picking random samples
data= data.sample(n=10000)

#split data
data.drop(['response'], axis=1, inplace=True)
y = data['response_class']
X = data.drop('response_class', axis=1)
X_names = X.columns

data.head()
 

Комментарии:

1. Можете ли вы описать код? Это добавило бы значение вашему ответу.

2. Я имею в виду отредактировать ответ и добавить к нему некоторые пояснения 🙂

Ответ №2:

найдено решение:

     #seperate based on the response variable in response_class
df_zero = pd.DataFrame(data[data.response_class== 0])
df_one = pd.DataFrame(data[data.response_class == 1])

# upsampling minority class
df_zero_min = resample(df_zero,
                      replace = True,
                      n_samples = len(df_one),
                      random_state = 123)

df_upsampled = pd.concat([df_one,df_zero_min])

df_upsampled.response_class.value_counts()