数据挖掘竞赛总结——津南数字制造算法赛

  用十天左右的时间参加了阿里天池最近的津南数字制造算法赛的赛场一,名次159,复赛都没进去,但是通过这次比赛,了解到了理论如何应用于实际,也发现了算法理论并不是实际应用唯一的部分。以下是我认为实际应用中重要的几个点:

   1、异常值检测、处理。

   2、特征的连续值和离散值处理。

  3、特征工程——根据领域知识制造特征。

  4、特征选择。

  5、算法选择、参数调优。

 在实际参赛中,往往会感受到“玄学”的力量,一些很有道理的特征或处理用上之后分数就是掉,而一些不小心写错代码造出来的特征却可能直接将分数提升一个档次。当然,“玄学”不是自己不努力的理由,在“玄学”之外,积累知识,做出最好的算法模型才是一个算法工程师该做的。

 

1、异常值检测、处理。

  异常值应该分为两类:噪音(物理意义上出错的异常值)、离群点(与其他值相比很不同寻常,但是其具有真实物理意义的。)

  离群点可能难以理解,举个栗子:

      我们统计一部分人的财产情况,大部分人的财富值在20万左右,其中有一个人财富值为100亿。如果这个人是隔壁屌丝老王,那么这个数据就是错误的噪音数据,但是如果是马老板,那就是离群点了。

  这个栗子告诉我们,数据是否异常应该由实际情况决定,而不是一拍脑袋就胡说八道。

  对于噪音,当然是让它死开了。

 而具备物理意义的离群点,视情况而定,一般是不会直接去除的。

 

2、特征的连续值和离散值处理

  概率论告诉我们数据分为两种:连续型数据和离散型数据。

  对于离散型数据,我们通常会做onehot编码或者labelencoding,将一个离散型特征转化为多个值为0或1的特征,以保证算法模型不学习到一些奇怪的东西,比如int型的差值。

  对于连续型数据,我们可以直接使用,但是为了提高泛化能力,往往也会对其值域进行分区,然后onehot成几个离散型特征。

 

3、特征工程——根据领域知识制造特征

  所谓的堆叠特征,就是这里做的事情了。

  对于已有的原始特征,我们从中选择一些特征进行 加减乘除、聚合、排序等操作组合出一些有意义的组合特征。

 

  4、特征选择

  大数据集的原始特征经过onehot等编码之后就已经非常多了,在进行组合特征之后更多的不要不要的。其中往往存在一些无用特征,甚至噪音特征,将它们找出来就是特征选择要做的事情。

  特征选择主要有三种:过滤型、包裹型、嵌入型。

  a.过滤型:使用皮尔逊系数、R方等相关系数值过滤,保留数值上看起来比较有用的。

  b.包裹型:分为两种,前向选择和后向选择(RFE,反向循环剔除)。

                 前向选择,对于已有特征,一个一个放入模型中去训练并交叉验证得到分数,没有效果的不保留。(这种方法使用的时候应该有一些已经决定保留的特征,用这些基特征作为基础,不断的添加新的特征尝试,查看交叉验证分数)。

                 RFE:将所有的特征先全部保留,放入模型查看分数。然后开始循环,每一次去掉一个特征查看分数,如果分数没有变化甚至上升,就决定去掉这个特征。(一般而言,会设置一个微小的阈值,如果去掉一个特征,分数下降没有超过这个阈值,就可以将这个特征删除掉。)

  c.嵌入型:嵌入型方法是借助机器学习算法来选择特征。

                 比如L1正则项,具有自动筛选弱特征的能力。

                 还有决策树的信息增益,也可以计算出每一种特征的重要程度,供我们选择。

  5、算法选择、参数调优

  算法模型的选择也是很重要的一步,但是实话讲,去看近些年来各种数据挖掘比赛的冠军,好像没有几个不是集成学习的,所以lightgbm和xgboost一定是首选。

  模型的选择十分简单粗暴,简单的将数据扔进去,哪个在默认值的情况下表现好就用谁,当然也可以几个一起用,最后做一个模型融合。

 参数调优就需要一些对算法原理的了解了,比如在对lightgbm调优的时候,GOSS和EFB都不知道还真不好玩。。。

 附上lightGBM的官方参数问的那个吧:https://lightgbm.readthedocs.io/en/latest/Parameters.html

 还有可爱的apachecn翻译的中文文档:http://lightgbm.apachecn.org/#/docs/6

你可能感兴趣的:(ML实战,机器学习)