Я играл с 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
, приветствуются.