一、特征工程
1.对category类型的数据OneHot编码;数值类型的数据归一化(但是这里用到的大多数模型都是基于决策树的,所以不需要)
2.缺失值处理:实际数据集中有许多数据是缺失的,考虑列出每个特征的缺失比例,比例过大的直接舍弃,否则想办法填充。这个比例没有什么定式,舍弃特征会丢掉有用信息,填充会引入噪声,具体怎么操作要看模型实际的表现。填充的话,基础的是用均值、中位数等填充,更准确的方法是用算法拟合,还可以直接把缺失视为一种特殊的值(这个比赛中的许多模型就是用-1填充)。
对于树模型来说,数据缺失并不影响树的生成,所以xgboost会在生成树的同时,根据training loss自动学会将遇到缺失值时分裂到左子树还是右子树。
3.相关性分析:特征之间并不是完全独立的,这时候可以计算correlation coefficient来确定特征之间的两两关系。还可以计算每个特征和目标值(这里是logerror)之间的相关性,绝对值越大说明这个特征的作用越大。
4.模型权重分析:现在大多数模型在训练完成后都会给出获取特征权重的接口,这时的权重是直接反映了一个特征在这个模型中的作用。这是判断一个特征是否有用的重要方法。例如,原始特征有卧室数量和卫生间数量,我们自己创造了一个特征房间总数(卧室数量+卫生间数量)。这时可以用这种方法判断这个新特征是否有效。
5.多项式特征,交互特征等
二、模型选择
Kaggle比赛很重要的一点是,不可能只使用一个单一模型。在许多比赛的第一名公布的方案里,往往有十几个甚至几十个不同的模型。模型融合(ensemble)实在是太重要了,模型融合的方法下文再讲,但是在选择模型的时候就要考虑到如何让这些模型在融合后效果更好。不管用什么方法融合,想要模型融合之后效果好,模型之间要有多样性。换句话说,模型之间越不相似,模型融合的效果越好。
对于Zillow这样给定特征,数据不是图像音频的比赛,主要选用树模型。这类Kaggle比赛,首选肯定是XGBoost和LightGBM。这两个模型都是由梯度提升树(GBDT)演化而来的。简而言之,就是通过梯度提升(Gradient Boost)算法训练许多决策树及其对应的权重,然后投票得到最终的结果。详细的数学证明可以看林轩田老师的台大机器学习技法课程
xgboost模型在生成决策树时是level-wise的,即每一层上的所有节点都会一起分裂,通过max_depth来控制树的高度从而控制模型的拟合程度。lightgbm模型则是leaf-wise的,每一次分裂会从所有叶子节点中找增益最大的节点来分裂,所以主要通过num-leaves来控制模型的拟合程度。
只用这两个模型显然不够,可以调整不同的参数来获得许多个侧重点不同的xgboost(lgb)模型:不同的深度(叶子数)、不同的损失函数等等。另外,在这个比赛里还用到了CatBoost、sklearn里的一些模型:随机森林、ExtraTree等。