实习体验
我的第一份真正意义上的实习是在一家游戏公司做数据挖掘。到公司的第一天,才发现会写各种sql查询语句多么重要。因为一切数据挖掘的起点,都是从数据库中提取需要的特征,自然熟悉表和sql语言则是必备的技能之一。
第一份项目是预测用户是否最终成为大户(即累计付费金额达到某一阈值),老大让我用决策树。当时还没有真正做过决策树,就看着spark的API文档做。因为spark的机器学习库mllib已经把大部分的工作都做好了,所以构建模型的这个过程非常轻松。但随之而来的几个问题:
- 模型的误差率一般,precision和recall都很低。
- 模型不知道怎么调整参数(对决策树来说有maxBins, maxDepth, minInfoGain, impurity等参数)
- 样本的特征感觉不好,而且很少
- 样本的不平衡问题 imbalaced sample
针对最后一个问题,可以考虑oversampling或undersampling,还有考虑cost-sensitive的解决方案(就是对小类的样本错分为大类施加更大的惩罚)。我的技术水平和spark的框架目前不适合做后者,只能考虑undersampling和一种oversampling的方法(SMOTE)。
吴恩达在NIPS2016的演讲
机器学习策略:如何有效地处理数据集
训练集:training set 训练模型
开发集:dev set 在开发过程中用于调参、验证等步骤的数据集
测试集:test set 指测试时所使用的数据集