У меня есть большой фрейм данных dask с зависимой переменной Y, которая будет использоваться для двоичной вероятностной классификации. Я хотел бы уменьшить выборку этого (в идеале, стратифицированного, предположительно, на основе априорного значения Y?). можно ли этого легко достичь? Мы будем очень благодарны за любые фрагменты кода. Спасибо!
Таким образом, я взялся за простую субдискретизацию (все записи целевых событий, где общий отклик == 1, и такое же количество записей, не связанных с событиями) с фреймом данных dask. это были python 3.7.6, pandas 1.0.3, dask 2.15.0 в кластере AWS EMR с Hadoop 2.8.5-amzn-5.
Как отмечает @MRocklin, вы можете сделать то же самое в пандах. Нет ничего уникального в том, что это делается в dask по сравнению с pandas, но он действительно эффективно работает в нашем кластере dask.
# build a stratified sample of all the responders and an equal size sample of non-responders
print("Pulling an EDA sample")
ResponderCount = pd_nrm_both_post_encode.query("GrossResponse == 1").shape[0].compute()
TotalCount = pd_nrm_both_post_encode.shape[0].compute()
nr_fraction = ResponderCount / TotalCount
print("Responders count: " + str(ResponderCount))
print("pulling responders")
nrm_responders = pd_nrm_both_post_encode.query("GrossResponse == 1")
print("pulling non-responders")
nrm_nonResponders = pd_nrm_both_post_encode.query("GrossResponse == 0").sample(frac=nr_fraction, random_state=1)
print("appending responders and non-responders")
dd_nrm_eda_train_sample = nrm_responders.append(nrm_nonResponders)
PS вы можете контролировать частоту понижающей дискретизации с помощью параметра frac = метода .sample (). в этом случае гидроразрыв был установлен по количеству респондентов из популяции. вы можете изменить это так, как считаете нужным. Если бы вы хотели сделать это с помощью стратифицированной даунсэмплинга, я еще не занимался этим, но, возможно, понимание списка было бы одним из достойных подходов. Не уверен, что лучше всего масштабировать.
Как бы вы сделали это в пандах?