FeatureTools:理论与实例
Featuretools是执行自动特征工程的框架。它可以将事务和关系数据集转换为机器学习的特征矩阵。特征对于机器学习问题是至关重要的,而目前的特征处理方法通常离不开人工的干涉,利用人类的直觉进行特征工程虽然可以按照我们的经验自由地筛选特征、组合特征,但凭直觉、经验的工程一定是有局限的,而且极其耗费时间。
下图展示了典型的数据分析过程:包括分析人员提出特定的问题、数据工程师提取出可解释的变量,再由机器学习工程师对数据进行建模,如此迭代。 为了避免人工处理时的局限性和耗费,我们需要有一种能够自动完成特征工程的工具。
Deep Feature Synthesis
Deep Feature Synthesis(DFS)是一种处理关系型和事务性数据的自动化特征工程方法。本质上,这个算法遵循数据与基本字段的关系,通过一系列的数学函数运算,创造出最终的特征。由于顺序的堆叠计算,每个新的特征都具有一定的深度d,该算法由此得名。
我们从一个具体的实例来了解这个算法提出的动机和原型问题。假设有一个关于电子商务的网站,我们希望能够得到能够描述用户行为的特征,例如某用户上次购买行为发生在多久之前,该用户的购物频率等等。
上图表示了电商网站的一种数据库关系方案,其中有4个实体,从A到B的一个箭头代表A引用B(外键)。我们输入给DFS算法的数据是相互联系的实体集和与之相关的表,每个实体集中实例的特征不外乎数值型、类别型、时间戳和文本。
为了方便描述,我们把给定数据集中的实体集记为,每个实体表有个特征,其中的某项为第k个实体集中第i个实例的第j个特征。
在给定实体、对应的数据表和实体之间的关系下,接下来需要从两个不同的级别定义一些数学函数:实体级别和关系级别。
Entity Features(efeat)
通过特定的函数,将实体E中所有实例的第J个特征进行转换,可以得到实体特征。例如将类别型特征转换成特定的数字表示,将日期转换成数字等等。我们用一个简单的式子为这个过程做一个统一的表示:
。
其中,efeat代表了我们进行的计算函数,例如我们使用累计概率分布作为我们的计算函数,那么得到的新特征就是原特征值j的累计概率(或者分位点)。
Direct Features (dfeat) 与 Relational Features (rfeat)
假设我们有包含实体集的数据集,我们需要用DFS算法为其中一个实体构造rfeat,dfeat和efeat。另外我们假设我们知道所有和$E^k$有前向关系和后向关系的实体,分别记为和。因为efeat是对存在的特征进行之间转换,只涉及单个实体,所以放在最后完成。
而为了得到中的rfeat,我们要用到中的特征,所以,我们要先为创造好所有的特征。以类似的方式为加上dfeat前,我们也要首先完成对的特征派生工作。这个过程可以用算法1表示:
算法1实际上是一个递归算法,是指已经访问过的实体,用于避免循环添加特征。
现在我们通过一个实例来描述我们是如何为一个实体添加特征的。
针对Custermer这个实体,从上图中我们可以知道是如何为它添加一个新的特征“所有订单的平均价格”的。从“Product”实体开始,"Product"实体和“ProductOrder”实体是前向关系,所以我们可以为“ProductOrder”添加一个dfeat,即商品的价格。而"Oders"和“ProductOder”是后向关系,所以可以为"Oders"添加rfeat,一个订单中的商品总价格。而“Customers”和"Oders"是后向关系,所以又可以为"Customers"添加一个rfeat,即“所有订单的平均价格”,到这里可以看出该特征的深度为d=3。
特征数量增长
现在还有一个值得关注的问题,如何估量特征数量的增长,我们假设所有的实体有$O(j)$个特征,个前向关系和个后向关系。现在来进行特征数量z的计算,表示我们进行i次迭代后时特征的数量。
首先我们为个后向关系实体计算rfeat,如果我们有个refeat函数,那么我们可以为这m个实体都合成个特征,那么此时总共就新增了个特征。 下一步,为前向关系添加个特征,那么我们总共可以为我们的目标实体添加个新特征。 在此基础上,假设我们有O(e)个efeat函数,可以新增个efeat特征。
结合rfeat,dfeat与efeat,
最终关于z的封闭式为
机器学习预测通道
为了使用DFS创造的特征,作者实现了一个机器学习的算法通道。第一步是构造一个预测问题,选取一个特征集中的一个特征作为预测的目标值,之后集成那些方便使用的特征进行预测,如果某个特征依赖于目标值(在作为目标值的特征生成之后才能被生成的特征),那么这个特征不能作为模型使用的训练特征。
数据预处理
将Null值数据移除,再将类别型变量用One-hot编码转换,再经过变量的归一化就完成了数据预处理工作。
特征选择和降维
DFS为每个实体生成了大量的特征,为了完成特征选择和降维,在机器学习通道中采用了两个方法:截断奇异值分界转换后选取个SVD中的成分;然后计算每个SVD特征关于目标值的值,排序后从中选取最高的个特征。
模型
用K-means算法将数据集进行聚类,类数为,作为数据的标签,然后采用随机森林算法,每棵树的深度为,选取的特征比例为。 因为在分类的问题中,有些目标值代表性不足,所以可以为这些代表性不足的类重新赋予权重。
现在总结一下我们现有的超参数,SVD成分,决策树的深度,特征比例以及类权重。
超参数优化
作者采用高斯连接过程(Gaussian Copula Process,GCP)来进行超参数的调优,GCP用来模拟参数选择和整个机器学习路径的性能关系f。然后我们对参数进行新的采样再根据这个参数选择进行预测,衡量路径的性能。最后我们采取选择策略来决定所要选择的参数。
模拟:典型的高斯过程可以用来模拟数据集中有限个数据点的f关系。在中具有多元高斯分布,在本文中,作者在连接过程的基础上提出一种新的参数优化方法,它通过的变换来进行映射,将转换为。,然后再按照高斯过程建模。
参考资料
- https://zhuanlan.zhihu.com/p/26015351
- http://www.cnblogs.com/hdu-zsk/p/5954658.html
- https://blog.csdn.net/u010367506/article/details/23453849
- https://blog.csdn.net/bbbeoy/article/details/72910467
- http://blog.sina.com.cn/s/blog_837f83580102v7bm.html
- https://blog.csdn.net/Alicehzj/article/details/78713914
- 机器学习-周志华
- https://www.jianshu.com/p/ab697790090f
- https://www.cnblogs.com/weihuchao/p/6874683.html
- https://blog.csdn.net/mmc2015/article/details/42459753
- https://blog.csdn.net/xiaozhouchou/article/details/51866685
- https://blog.csdn.net/tCDPYh6sA3/article/details/61191617
- https://blog.csdn.net/shenziheng1/article/details/53547401
- https://blog.csdn.net/shenziheng1/article/details/53637907
- https://blog.csdn.net/m0_37407756/article/details/68059453
- https://blog.csdn.net/maxiemei/article/details/23846871
- http://www.mamicode.com/info-detail-1568956.html
- https://blog.csdn.net/baidu_38060633/article/details/70338345
- https://blog.csdn.net/cht5600/article/details/52355566
- https://zhuanlan.zhihu.com/p/27792859
- Efficient_and_Robust_Automated_Machine_Learning