一. 数据选择/清洗/采样
1. 数据选择
- 主要思考哪些数据对预测结果有用
- 是否可以采集到
- 线上实时计算时获取是否便捷
- 如做商品推荐可从:店家、商品、用户三个角度去思考
2. 数据格式化
- 确定数据存储格式,关联hive表和hdfs文件夹
3. 数据清洗
- 该过程会花掉大部分时间,但也会使我们对业务有更为深入的理解,数据的好坏决定一个算法模型的上限
- 主要操作有去除脏数据,如根据常识判断的不可信数据;补齐缺省值,缺省值极多的字段考虑丢掉或将某个特征是否为缺省值作为新的特征加入
4. 正负样本不均衡
- 样本足够多且不平衡:
- 下采样(downsampling),从多的一类抽取部分
- 样本不够多且不平衡:
- 采集更多数据
- 上采样(oversampling):重复或图像识别中的镜像和旋转
- 修改loss function,加大少的一类的权重
- 上(下)采样方法:随机采样和分层抽样
- 随机采样:从全局样本中随机抽取,缺点是可能具有倾向性,如某类数据较少,没采到
- 分层抽样:如对每个年龄段分别进行抽样
二. 特征处理
1. 特征处理分类
特征处理分为:数值型,类别型,时间型,文本型,统计型和组合特征
1)数值型
- 幅度调整,归一化:幅度常控制在[0,1]
- 离散化:连续值分段变成类别型,1个值映射为一个向量,离散化后引入非线性,如年龄为变量,可让老人和小孩同时获得高权重
- 比例?
2)类别型
- one-hot编码/哑变量:如小孩,青年,老人->[1,0,0],[0,1,0],[0,0,1]
-
hash分桶(类别很多,较稀疏):
- 例1:使用聚类将userId根据某些特征分为几类
- 例2:如下图是将一个词典分成三个桶,每个桶可能代表某个领域内的词,两句话如果在同一个同中出现的单词数相同,可能说明他们在某一领域内指代性相同,为每句话构造了一个新向量
-
Histogram映射:把某个特征与target做后验关联度的统计,以统计量表示该特征
- 例子:如特征-男/女,target-爱好,统计P(爱好|性别),得到 男:[1/3,2/3,0],可表示男生1/3喜欢散步,2/3喜欢足球,没有喜欢看电视剧;用爱好比例对性别进行编码,得到的统计特征之间map到特征向量中,可以与原性别特征[1,0]同时存在
3)时间型
- 时间型特征可分为数值型和类别型,时间型数据可以表示不同时间人们心态和行为存在差别,可用于区分人群,商品推荐等
- 数值型:网页停留时间,上次浏览离现在间隔时间
- 类别型:月、周、日、时等
4)文本型
- 词袋(去停用词)、word2vec
- TF-IDF权重:表示一个词对一个样本或样本集的重要程度
- TF(w)=(词w在当前文中出现的次数)/(w在全部文档中出现的次数)
- IDF(w)=ln(总文档数/含w的文档数)
- TF-IDF权重: TF*IDF
5)统计型
- 统计特征与业务的契合度高
- 加减平均:商品价格超平均价格,连续登陆天数超平均,商品出售超平均编码
- 分位线:商品价格分位线体现用户的购买能量
- 次序型、比例型
6)组合型
- 拼接型:如userId&&category拼接可以为某个用户创建个性化特征
- 模型特征组合:如GBDT产出的特征组合路径,路径命中为1,否则为0
- 组合特征和原始特征一起放进LR中训练
2、特征选择
1)做特征选择原因:
- 冗余:部分特征相关型高,耗性能
- 噪声:对预测结果有负影响
2)特征选择与降维区别:
- 特征选择:只去掉原本特征里对结果影响不大的特征
- 降维:对特征计算组合构成新特征
3)特征选择方法:
- 过滤型(filter):只评估单个特征与结果之间的关系,取top n
- 关系评定:用Pearson系数,互信息,相关度距离
- 缺点:没有考虑特征之间的关联,容易把有用特征踢掉
- 函数:sklearn.feature_selection.SelectKBest
- 包裹型(Wrapper):筛选各个特征子集,用模型评估效果。
- 递归特征删除法:全特征跑一边,删除5%-10%的弱特征,查看acu,循环,直到acu大幅下降。
- 函数:sklearn.feature_selection.RFE
- 嵌入型(Embedded):根据模型分析特征重要性,如模型权重等。
- 常用L1正则化,
- L1与L2正则化区别:L1正则化具有截断相应,弱特征权重直接置零,L2正则化为缩放效应,使各个特征权重都不会太大,平滑曲线。L1效果比L2稍差
- 函数:sklearn.feature_selection.SelectFromModel;Linear Model, L1正则化
3. 特征处理流程图
四、模型调优
1. 过拟合/欠拟合
1)评判指标:学习曲线,通过auc差距来判断是否过拟合,auc由准确率和召回率共同决定
2) 过拟合处理:
- 找更多的数据学习
- 添加正则化项系数
- 减少特征个数(少用),降维不能解决过拟合
- 某些特征离散化处理
- 模型融合
3)欠拟合处理:
- 找更多的特征
- 减小正则化系数
2. 线性模型权重分析
线性或线性核的模型的权重具有实际物理含义,其绝对值表示对应特征对结果的重要程度,此时对权重较大的特征可以做一些更细化的工作:
- 开方、平方、一维变多维
- 将该特征与其他相关的特征进行组合,构成组合特征,如房子面积/房间数,房子面积&&地段
- 做一些统计特征
3. bad-case分析
思考:哪些样本分错了,是哪些特征导致model做出错误判决,bad case有没有共性,是否还有没有挖掘出来的特征
4. 模型融合
模型融合有两种思想:1. 集体投票的思想(bagging,随机森林),可缓解过拟合;2. 不断学习自己不会的东西(Adaboost,Grandient Boosting Tree),可能会造成过拟合
- Bagging:可以使波动减小,每次取一个全部数据集的一个子集来训练一个模型,多个model投票表决,不用全集训练可以减少一些特殊点的影响。
- Adaboost:解决分类问题,用简单的线性分类器分类,每次对分错的样本增大权重重新学习,重复迭代和训练,最后可以得到一个非线性的分类结果,分给某类次数越多,说明确定度越高。
- 逐步增强树:与Adaboost思想相同,解决回归问题,每次对求的的曲线取残差,对残差进行回归训练,在叠加到原曲线上,反复进行