Применить преобразования scikit Learn к наборам данных большего объема, чем dask и dask-ml? - PullRequest
0 голосов
/ 30 апреля 2018

Я играл с dask в течение последнего месяца или около того, и это было очень полезно. Я использую dask с ~ 30-миллионным набором данных записей с ~ 12 полями (2 текста, остальные являются плавающими) для анализа / улучшения множества различных моделей. Что я хотел бы сделать, так это применить преобразование блока Кокса к числовым данным.

Я искал dask-ml и есть встроенная поддержка для подобных шагов предварительной обработки, таких как MinMaxScaler или StandardScaler

Не похоже, что метод boxcox реализован в dask-ml, поэтому мне любопытно, можно ли применить преобразователь scikit-learn?

Тем временем я сопоставляю эту функцию boxcox, которую я написал в соответствующие поля, но я знаю, что преобразователь scikit-learn оптимизирует лямбда-значение, а моя функция - нет.

def boxcox(x,lam=1e-8):
    if lam == 0:
        y = da.log(x)
    else:
        y = ( da.power(x, lam) - 1.) / lam
    return y

data_boxcox = {}
for col in numeric_cols:
    data_boxcox["{col}_bc".format(col=col)] = dg[col].map(
        lambda x: boxcox(x, lam=-1e-8),meta=(('boxcox', 'i8')))
...
df = df.assign(field1_bc  = data_boxcox["field1_bc"])
df = df.assign(field2_bc = data_boxcox["field2_bc"])
...
df = Client.persist(df)

Любые предложения о том, как лучше реализовать преобразование Box Cox или улучшить код dask, приветствуются.

...