自己总结了一些建模比赛的基本流程: ! M7 X p3 R j+ w0 g8 r, G' q) K# K" P J/ s1 c- c- L
特征工程 ☛ 模型选择 ☛ 调参 ☛ 模型融合( P( r2 |* I# r% {
# Y6 j* B. Q) T; K' i
1.特征工程 1 \% [; G% `& ^# \8 [8 U3 Q' E5 j) n7 ^ } s' P7 C
特征工程是Kaggle比赛的重中之重,尤其是对于房价预测这类使用树模型的比赛。模型大同小异,基本是由GBDT模型演化而来,而且主要用XGBoost、LightGBM等几种开源框架。所以,模型大家都差不多,特征就是关键了。 l! a( `- T. V" b- G3 {6 k
每个比赛都有独特的背景,想要发现甚至是自己创造出重要的特征,往往需要专业的领域知识,比如Zillow这个比赛要预测美国的房价,原始特征有卧室数量、面积,税收等等。想要自己通过原始特征组合,创造出一个“magic feature”就需要了解美国的房地产业。所以,选择一个自己熟悉领域的比赛,会比较有优势。4 o+ j3 k; g# B4 R9 T( J! s
比赛背景千变万化,从数据科学的角度,还有许多通用的方法来做特征工程。这里列举一些这个比赛里用到的方法: # T3 J+ c+ | j0 e0 t0 q& g & {& T/ s5 e. A) o(1)基础预处理:对category类型的数据OneHot编码;数值类型的数据归一化(但是这里用到的大多数模型都是基于决策树的,所以不需要) / A- y0 y. Y8 p0 l t+ q! t: U/ u; g " q( o+ R7 z# e" d8 f# i6 O6 k(2)缺失值处理:实际数据集中有许多数据是缺失的,考虑列出每个特征的缺失比例,比例过大的直接舍弃,否则想办法填充。这个比例没有什么定式,舍弃特征会丢掉有用信息,填充会引入噪声,具体怎么操作要看模型实际的表现。填充的话,基础的是用均值、中位数等填充,更准确的方法是用算法拟合,还可以直接把缺失视为一种特殊的值(这个比赛中的许多模型就是用-1填充)。; ?( n, r7 C+ n+ }! `3 V' T
* ~' ?4 v, R0 x) ^5 l+ q* ?( j v [
对于树模型来说,数据缺失并不影响树的生成,所以xgboost会在生成树的同时,根据training loss自动学会将遇到缺失值时分裂到左子树还是右子树。作者Tianqi Chen的原话: 4 D9 l/ N4 K |, C6 m' i, z8 u$ S! {
Internally, XGBoost will automatically learn what is the best direction to go when a value is missing. Equivalently, this can be viewed as automatically "learn" what is the best imputation value for missing values based on reduction on training loss.( J9 n5 ] F2 I) U) i4 l7 k) x7 K# n
* S- X9 r+ V, A U; X6 A(3)异常值(outlier): 由于各种原因,往往有一些样本的误差特别大,把这些样本加入模型会引入很大的噪声,就像很多打分的比赛会去掉最高分和最低分之后再取平均值。这个比赛中去掉这样大误差的outlier能带来很大的提升。 8 c& a4 D1 E/ r# B4 S1 u5 p4 v+ K- z
(4)相关性分析:特征之间并不是完全独立的,这时候可以计算correlation coefficient来确定特征之间的两两关系。还可以计算每个特征和目标值(这里是logerror)之间的相关性,绝对值越大说明这个特征的作用越大。! u w% l, F, Y* x% F- h
( |8 J* f1 ?; x/ l* I9 R(5)模型权重分析:现在大多数模型在训练完成后都会给出获取特征权重的接口,这时的权重是直接反映了一个特征在这个模型中的作用。这是判断一个特征是否有用的重要方法。例如,原始特征有卧室数量和卫生间数量,我们自己创造了一个特征房间总数(卧室数量+卫生间数量)。这时可以用这种方法判断这个新特征是否有效。 5 {: g" [+ y, G; u/ J 特征工程在实际应用中非常有挑战性,还有许多方法,上述只是一些皮毛。Zillow比赛里我尝试了许多新特征,但最终都没有采用。1 p: x0 F: V, w( h! t- U
而对于语音识别比赛来说,特征工程就非常有限了。在语音识别领域广泛使用的特征是log-mel频谱和mfcc特征,没有必要自己再做特征工程。而现在火热的端到端(end-to-end)语音识别优点就是省去特征提取,直接使用原始波形作为神经网络的输入。1 h4 M! i! L r/ E% s% L0 t2 x" b