kaggle竞赛项目:房价预测——技术总结
一直听说kaggle这个大神聚集的平台,但是没有亲自静下心来玩一场,在本次项目中,遇到以下几个困难,就着问题了解到了更多的知识,以下是遇到的困难以及解决困难感想和参考链接:
-
在使用机器学习算法的过程中, 没有分析数据而是一股脑地代入模型很容易跑出"虚假"的结果,
对于不平衡类别样本的分类, 涉及到不同的评价指标。
Precision-Recall Curve评价指标深度理解
为什么会有这么多指标呢?
这是因为模式分类和机器学习的需要。判断一个分类器对所用样本的分类能力或者在不同的应用场合时,需要有不同的指标。 当总共有个100 个样本(P+N=100)时,假如只有一个正例(P=1),那么只考虑精确度的话,不需要进行任何模型的训练,直接将所有测试样本判为正例,那么 A 能达到 99%,非常高了,但这并没有反映出模型真正的能力。另外在统计信号分析中,对不同类的判断结果的错误的惩罚是不一样的。举例而言,雷达收到100个来袭 导弹的信号,其中只有 3个是真正的导弹信号,其余 97 个是敌方模拟的导弹信号。假如系统判断 98 个(97 个模拟信号加一个真正的导弹信号)信号都是模拟信号,那Accuracy=98%,很高了,剩下两个是导弹信号,被截掉,这时Recall=2/3=66.67%, Precision=2/2=100%,Precision也很高。但剩下的那颗导弹就会造成灾害。 -
特征工程做得过于简陋,项目完成之后在与大神们的代码中发现:需要对离散特征需要详细的处理,顺序变量之间存在固有的顺序 比如 (低, 中, 高)而不是直接标签编码化;构建新的有意义的特征;连续变量特征的数据变换,使其接近正太分布,当然这也涉及到不同的模型;特征降维等。这些要基于对数据深度理解基础之上,还有涉及到回归算法的理论推导,需要花费大量的时间,但这么做是值得的,个人深刻体会到:将时间花在算法参数的微调上远不如做好特征工程对模型提高更有帮助。
-
对于XGBoost和LightGBM的算理论理解尚浅
-
英语是一把终身受用的利器。在解读问题的过程中,问题越细化,通过英文帖子找到解决方案的可能性更大,如:为什么使用树模型不用先做数据的共线性处理,中文社区的解释不是文不对题就是间接搬运国外的链接,直接使用英文搜索可以更快速解决问题。
-
实践是检验真题的唯一标准。如使用树模型前为什么不需要对数据标准化,许多网页答案不严谨。经过个人对比研究,即便决策树是概率模型,而对于LGBM和GBDT影响还是挺大的,由于“GBDT的树是在上一颗树的基础上通过梯度下降求解最优解”,仍会涉及到距离的度量。又如对于树模型,是否需要对离散特征进行one-hot编码等,经过个人实践,直接one hot encoding会造成过于稀疏的数据,对于除了XGBoost之外的树模型影响较大,要配合降维方法进行,或者而将其进行数字化编码可以减小影响 (LabelEncoder) ,看似不可理喻的结果背后有着深层理论的支持。
通过此案例,本人对于数据的探索性可视化分析、数据清洗、特征工程等环节都有了更加深入的认识。