Стратифицированная выборка по mimi c Распределение населения - PullRequest
2 голосов
/ 04 марта 2020

Я новичок в R, недавно я использовал стратифицированную выборку для разделения на поезда и тесты, чтобы убедиться, что целевая метка находится в равной пропорции для обоих. Теперь я хочу использовать понижающую выборку данных обучения, чтобы распределение населения / распределение поездов было одинаковым к новому распределению понижающей выборки.

Причина, по которой я хочу уменьшить выборку, заключается в том, что у меня 11 миллионов строк с 56 столбцами, и потребуется несколько дней, чтобы выполнить настройку параметров с помощью сетки / случайного / байесовского поиска

Я использую XGboost, и это проблема двоичной классификации

Буду очень признателен, если кто-нибудь сможет мне помочь в этом.

Ниже мой код

    train_rows = sample.split(df$ModelLabel, SplitRatio=0.7) ## Stratiefied sampling 
    train = df[ train_rows,]
    test  = df[!train_rows,]`enter code here`

1 Ответ

0 голосов
/ 05 марта 2020

Самый простой способ достичь этого - вычислить соотношение между двумя классами. Скажем, из 11 миллионов 3 миллиона 0 и 8 миллионов 1. Итак, ваше соотношение 0: 1 составляет 3: 8. Теперь предположим, что вы хотите уменьшить выборку до 1 миллиона строк, вы можете случайным образом выбрать 1 миллион строк, сохраняя то же соотношение, то есть 3: 8. Математически, это приблизительно 2,7 лакха (приблизительно) класса 0 и 7,3 лакха класса 1 образца (приблизительно). Вы можете рассчитать точное число самостоятельно. Теперь вы можете использовать функцию Dataframe.sample () для получения данных с пониженной выборкой. Я пишу код python для того же.

df_class_0 = df[df.target == 0]
df_class_1 = df[df.target == 1]
df_class_0_under = df_class_0.sample(2.7 lakh)
df_class_1_under = df_class_1.sample(7.3 lakh)
df_test_under = pd.concat([df_class_0_under, df_class_1_under], axis=0)
...