机器学习现在变得越来越火热了,到处也都是机器学习的课程,基本上都会将基本的算法啊,模型啊这种。算法对于大多数人来说,不过是调个包而已,譬如import sklearn, import xgboost, import lightgbm, import keras import tensor flow。
我个人认为,建模过程中重要的是思考,而不是算法的使用,当然算法也很重要,各个算法的性能也各种特点。个人比较推崇XGBOOST,LIGHTGBM,对于常见的一些建模问题,这类算法都可以给出一个相对比较高的值。常见的树模型,决策树<随机森林<GBDT< Xgboost,lightgbm,当然前一段时间又出了据说很牛的catboost,对于离散型变量的处理很好,有很多原则来处理离散型变量。
由于在企业做建模做了半年,做的项目还是蛮多的,4-5个吧。先来说说建模实际应用的过拟合问题,这也是十分常见的,基本表现就是在预测训练集和测试集表现较好,而验证集表现太差。一方面是数据问题。而我本人感觉,在数据和算法之间,应该还有一层,应用层,通常简单的建模就是直接把数据推到模型入口,然而感觉在实际中效果并不好。建模工程师的任务应该是狗仔中间层,来将数据和算法都发挥它们的最大优势吧。
通常在应用中,时间维度是发生改变的,举个例子,我们用某一年3,4,5月的数据来训练一个模型,这个模型最后应用肯定是在6月或者7月。对6月或7月的数据进行做预测。那么中间使用的变量肯定是发生变化的,3,4,5月的特征得到的结果,在6月或7月也会得到相同的结果么,其实是未必的,我们在这个过程中都忽略了基本的假设。相同的特征会得到相同的结果,但是现实却不一定的。
还有一个问题,在建模中,我们通常会吧所有的数据直接丢到模型中,认为模型就可以做到很好的区分。这边有一点思考,我们得到的数据是充分的么,答案肯定是否定的,我门得到的数据肯定是部分数据,这些数据只能实现对现实的部分观测,想要完全通过部分观测的值来得到全局的结果是十分困难的。所以我们可以根据经验在数据输入模型前进行分类。比如说,根据人员的当前活动率来预测之后的活动率,我们可以先把当前人员分成几类,分别建模,而不是把所有的数据直接丢进去,认为模型可以根据现有维度来区别这些人,模型还是很傻的,没有经验值可以用。
以上是最近对于机器学习模型应用的一点点思考,欢迎指正。
网友评论