最近在学习Kaggle上关于预测俄罗斯地产价格的比赛。
这个比赛用到的数据集里,零零总总共有300多个特征,其中有不少特征高度相关,即Multicollinearity。面对这个问题,不少Kernel做了特征选择,有基于VIF去除高度相关特征的,有用PCA降维的。
此外,这个比赛的另一个难点在于,这是时间序列预测。
针对这几个方面(multicollinearity,特征选择,数据挖掘算法下的时间序列预测),我脑子里出现了一些疑问,并试着对这些疑问进行了解答。
以下是我关于这些问题和其答案的简要记录(不详细展开了,权当存档,方便以后回忆和进一步学习)。
Q1
XGBoost(或者说tree-based模型)可以处理collinearity,为什么还要做特地在建模前做特征选择/降维?
- 防止过拟合,减少variance
- 改善性能,节省存储和计算开销
- 更好的模型可解释性
Q2
Feature engineering中主要的特征选择方法有哪些?
- Filter:比如通过分析相关系数、variance选取特征
- Wrapper:如Backward feature selection, RFE
- Embedded:在模型训练过程中完成特征选择,包括基于树模型的特征选择法(DT算法每次都优先选择分类能力最强的特征),和基于惩罚项的特征选择法(如在LR算法中加入l1、l2范数)
- Decomposition:PCA、LDA等,通过减少特征数来减少噪音和冗余、减少过度拟合的可能性(这篇解释PCA的文章写得很不错)
Q3
在数据挖掘/机器学习中,怎么处理time series forecasting问题?
- 如果input足够多,像非time series data那样做就行,有自相关(autocorrelation)问题时加lag
Q4
Time series问题怎么处理multicollinearity?
- 和multiple regression处理方法同理,或者用数据挖掘/机器学习特征选择的方法
以上。