在这里,记录一下学习github上大牛整理好的关于使用的素材,以作备忘。这是原文链接Featuretools Implementation with Dask
- 背景:原作者举例,即以该贷款违约预测的DFS任务,若使用an AWS EC2 machine 单机进行,则需要25个小时才能完成。所以必须采用能够充分发挥机器性能和降低时间的方法来计算新的特征矩阵。
- Featuretools本身支持并行处理(如在单个笔记本上),但是FT需要将实体集发送到每一个进程上,这意味着单机内存会马上消耗殆尽。因此,FT自身的并行处理并不好用,最好是使用Dask这个工具。
- Dask可以帮助我们充分发挥多核机器的性能,能实现在8核16G的个人电脑机器上,用3个小时便完成DFS。
- 可以优化的地方
FT可以优化的地方及处理步骤 | |
---|---|
1 | 将object类型的数据转化为分类变量,可以大幅度降低内存消耗 |
2 | 将整个数据集划分为104份,每一个分区的数据均可成为一个实体集或者是一个特征矩阵 |
3 | 创建一个函数:输入一个分区的数据,输出一个实体集 |
4 | 创建函数:输入一个实体集,输出一个特征矩阵 |
5 | 使用Dask并行处理3和4,创建104个特征矩阵并保存在硬盘上 |
6 | (可选):读取这104个单独的特征矩阵,然后合并为一个特征矩阵 |
- 整理思路就是:通过将一个大问题分割为许多个单个的小问题,从而充分利用系统的计算资源和存储资源。每一个这样的小问题都可以被单个处理器来处理,从而可以获得并行处理的效果。这种方式比租用更大计算性能和存储能力的机器更加高效、可行、低成本。
下面是的笔记点: - 若某一字段中唯一值的数量显著小于dataframe的总行数,则将变量类型从object转化为"category"后可显著降低内存消耗;此外,将float,int转化为 np.float32和np.int32也有效果。
- 取值只有(0和1)的字段,转化为bool的数据类型。
七个数据文件划分为104个相互独立的数据集的 104是在多次尝试后得出的。其值选择遵循以下四个原则:
- 任务(tasks)数应该大于worker数量
- tasks应该足够小,小到每一个任务都不会耗完内存
- tasks越多,可以有效降低tasks完成时间的相互差异
- tasks应该是workers数的整数倍