前言:大概是去年十一月开始接触数据挖掘的,所以入坑也将近一年时间了,一直想找个机会写一写心得体会,以此给同样想学习数据挖掘的朋友一点指引。
一、安装必要工具
好的,在进入正题之前,我们先来看看机器学习/数据挖掘常用的工具包,numpy,pandas,matplotlib,sklearn,xgboost,lightGBM必要时还需辅助keras,tensorflow。
常用python的朋友知道,anaconda是一个关于python的集成工具包,十分方便。但是并没有封装了机器学习竞赛的两个大杀器xgb,和lgb,我们可以通过如下命令进行安装:
pip install xgboost
pip install lightgbm
如果需要安装keras:
pip install keras
有了anaconda,我们想要安装tensorflow-gpu版本,只需要一行代码:
conda install tensorflow-gpu
执行了这行代码之后,我们就可以同时安装与tensorflow-gpu版本对应的cuda以及cudnn。再也不用被网上一些睿智帖子误导了。
对于初学者来说,写代码推荐使用jupyter notebook,一款基于网页的可以逐行实现代码的编辑器。使用方法也很简单,只需要cd到对应的目录下,然后:
- 数据探索
好了,终于可以开始进入正题了。
说到数据探索,不得不提到EDA,当然了,此EDA非彼EDA,它的全称叫探索性数据分析(Exploratory Data Analysis)。说白了就是画图。通过画图将数据可视化,挖掘一些类似周期性、异常值、离散型数据等这些不画图就看不到的特性。
然后通过画图获得的信息进行针对性的数据处理。至于如何画图,你需要学习一下matplotlib亦或是seaborn。
- 数据清洗
在着手做之前,我们都明白,拿到的数据大多都是,充满着噪音、异常值的脏数据。这些数据很有可能会影响最后模型的结果。所以我们必须进行数据清洗。
可以从以下几个角度着手:
- 对于类别变量,可以统计比较少的取值
- 对于数字变量,可以统计特征分布的异常值
- 统计字段的缺失比例,删掉占比接近1的数据
- 特征预处理
特征的预处理,其实主要是对一些数据进行编码以及对一些缺失值进行处理。
编码:
a、对于类别特征:
- 独热编码(onehot encoding)
- 嵌入编码(embedding encoding)
- Hash编码(hash encoding)
- 自然数编码(label encoding)
Ps:还有一些不常用的我这里就不举例了
b、对于数值特征:
- 取整(rounding)
- 分箱 (binning)
缺失值处理:
- 用属性所有取值的均值代替(mean)
- 用属性所有取值的中位数代替(median)
- 用属性所有取值的众数代替(mode)
- 训练模型预测
- 直接舍弃
- 特征工程
在开始写第五小节之前,分享一句我非常喜欢的话:信息论告诉我们,掌握更多的信息,才能最大程度的降低不缺定性。
这也是为什么一些竞赛大神愿意花大量的时间从业务的角度挖掘数据潜在特性的原因。
特征工程与EDA密切相连,可以说是通过EDA反馈得到的信息的具体实现。数据分析本身就是”假设-分析-验证”的过程,这个验证的过程一般指的是构建特征并进行本地CV验证。
PS:这里的CV不是指计算机视觉(Computer Version),而是交叉验证(Cross-validation)。
关于特征工程可以从以下几个角度考虑:
- 数据中每个字段的含义、分布、缺失情况
- 数据中每个字段和label的关系
- 数据字段两两之间或者三者之间的关系(有时候简单的加减乘除都可能构造出有具体含义的新特征)
4.还有一个我非常喜欢用的一个方法:就是通过将feature_importance可视化之后选择性地去构造新的特征
XGB和LGB都有相对应的feature_importance函数,这些大家可以自行搜索。
- 模型构建
写到这里突然不想写了,不是因为累了,而是因为在机器学习算法这一块实在有太多东西了,如果要展开讲的话不知道要写到猴年马月。。。。。。。好吧就是因为累了。
建模
大家要熟悉一些常用的机器学习算法,比如XGB啊,LGB啊,catboost啊,RF啊等等等,其中,号称数据挖掘竞赛的大杀器XGB和LGB尤其要熟练,它们的每一个参数,算法的优势,内部函数,乃至于算法的实现都要熟悉,因为如果你以后面试的话,这些人很有可能会问你关于这些算法的问题。特别是这些参数尤其是要熟悉,比如哪些参数是防止过拟合啊,又有哪些是为了加快训练啊这些,所以有人说搞机器学习的大部分是调参侠不是没有道理。
交叉验证
在比赛中交叉验证往往和一个东西紧密相连,它叫stacking,好了,为了防止你们懵逼,这里就不展开讲了,奉上一个stacking链接:https://zhuanlan.zhihu.com/p/26890738
我们只要知道,交叉验证的目的是为了得到可靠、稳定的模型。
模型融合
书接上文,说到这个stacking,就不得不提到昨晚梅西拿了世界足球先生,超越C罗成为世界上唯一一位6次获奖的足球运。。。。好了,不皮了,说到stacking就不得不提到模型融合,接下来就讲讲一些常用的模型融合手段。
a、Stacking
见上文链接
b、Blending
如果你弄懂了Stacking,那么自然就秒懂Blending,Stacking使用了交叉验证来获得新的特征,Blending通过人为的划分训练多个模型预测出结果来获得新的特征。两者都使用到了全数据,但是Blending这种划分数据的形式决定了它可能会导致第二层的数据量比较少,从而可能导致过拟合。不过从实际操作结果来看,两者效果差不多。
参数调优
对于一些模型的参数,人为的测试时间成本太高,我们可以通过网格搜索和贝叶斯进行参数的选择。