首页 > 解决方案 > 使用 dask 和 dask-ml 将 scikit 学习转换应用于大于内存的数据集?

问题描述

过去一个月左右我一直在玩弄dask它,它非常有用。我正在使用dask具有约 12 个字段(2 个文本,其余为浮点)的约 3000 万个记录数据集,用于分析/改进各种模型的集合。我想做的是对数值数据应用box cox 变换。

我一直在研究dask-ml并且有对类似预处理步骤的内置支持,例如MinMaxScaleror StandardScaler

boxcox 方法似乎没有在 dask-ml 中实现,所以我很好奇是否可以应用 scikit-learn 转换器?

与此同时,我正在将我写的这个 boxcox 函数映射到各个字段,但我知道scikit-learn转换器优化了 lambda 值——我的函数没有。

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代码的建议都非常感谢。

标签: pythonscikit-learndask

解决方案


推荐阅读