——最终准确率 76.99%
——排名 83/2734
——代码: https://github.com/francis7999/gd_line_pop_predict
最后的成绩有欣慰也有不足,第一次参赛的我本该满足于前5%的排名,但想到参赛期间有一大半的天数都为其他的事情焦头烂额,没有做任何改进,总是不由感慨本可以取得更好的成绩。
力学出身的我,此前从未想到研究生会去做语音识别方向。
人生是多么不可思议,我的本科专业和研究生方向找不出一丝一毫联系。前途茫茫,而我披星戴月,风雨兼程。
要做语音识别,必然深钻机器学习,而我浅薄的学习之下也只掌握了一些皮毛,但学到了理论,那就要熟练运用,脱离实际的理论无异于空中楼阁。
于是参加了阿里的广东公共交通大数据竞赛——公交线路客流预测。作为机器学习与数据挖掘领域的新手,第一次参加大数据竞赛,我抱着学习的想法,目的就是运用一些学到的机器学习知识解决一点实际问题,顺便巩固基础。
工具:Python 2.7 + scikit-learn
步骤:
1. 数据预处理。统计了训练集中每天每个时段的客流量,排除了一些客流过少,显然统计错误的样本。处理了天气数据,把(时段、天气、最低温、最高温、风力)作为特征,客流量作为预测变量。
2. 上模型。根据两条线路、工作日和节假日,分别建立四个模型。在分别用了线性回归、SVR、决策树等等模型之后,发现只有决策树靠谱一点。在浏览往年大神博客时,发现大神们常用GBDT和RF,遂用之。
3. 改进(基本上一直处在这一步)。
(1)在做10-cv时发现决策树会过拟合训练集,在测试集上性能不好,所以限制了决策树叶子节点最少样本数从而强制取平均,得到更好的平均性能。
(2)初步比较时发现GBDT比RF性能好一点,耗时也少一些,所以之后一直在针对GBDT做优化,改参数。
(3)GBDT存在过拟合问题,解决方法如下:降低learning rate,限制叶子节点最少样本数
(4)总之到最后一直在调决策树和GBDT的参数,调到快要吐……以后吐啊吐啊的应该就习惯了
(5)国庆节和最后需要预测的元旦三天假期模式差别很大,所以把国庆七天从训练集中剔除,果然得到改进
(6)到最后调参数带来的改进已经不明显时,我尝试着把1.1-1.3每天每个时段的预测值减20之后交上去,居然得到了0.5%的改进……
总结:
- 数据预处理方法太过于粗糙,以后需要好好学习这一块的知识
- 继续认真研究机器学习,下次做类似比赛时争取用DL
最后,力学四年在我生命留下的烙印深沉刻骨,永远不会退去。
http://blog.csdn.net/fyjthcy/article/details/50129939
http://blog.csdn.net/u014135091/article/details/53396336