您的位置:首页 > 职场人生

机器学习特征工程

2018-03-03 10:37 330 查看
2018/3/15更新
结合KAGGLE竞赛经验、算法面试情况和jasonfreak的总结,个人总结出以下机器学习特征处理的方法;分享给大家,希望对大家有帮助

特征使用方案:1、要实现我们目标,需要什么数据----结合特定业务,具体情况具体分析
              2、数据可用性评估:1、获取难度
2、覆盖率
  3、准确率

特征获取方案:1、如何获取特征(接口调用or自己清洗or/github资源下载等)
      2、如何存储?(/data/csv/txt/array/Dataframe//其他常用分布式)

特征处理:1、特征清洗:1.1:通过describe数据描述、matplotlib、snsborn数据可视化操作,清洗异常样本
                       1.2:数据不平衡处理:过采样、欠采样、Boostrap、Smote、Msote、代价敏感转化等技术,进行处理;其中过采样和欠采样是在数据层面上,通过采样技术,来降低数据倾斜率;而Smote方法是通过利用最近邻生成样本;但是在生成的过程中,由于最近邻的不稳定行;可能会引进噪声样本进入数据集,因此改进的方法MSmote被提出,通过对产生的样本进一步做异常处理,降低这种可能性,但是无法保证确定性;代价敏感转化技术是通过对样本进行加权,然后做一定处理,使得原始的算法可以由代价不敏感转为代价敏感,其实就是实现全局的代价最优,因此可以在训练如此,将样本较少的类设置一个较大权重,如果大家对这方面研究有兴趣,可以私信或者留言,我可以推荐大家一些优秀的论文,因为我的课题方向就是这个!
          
  2、单个特征:2.1:归一化:去除量纲影响
                       2.2:离散化:通过hash编码实现,进行特征转换,注意:直接数字编码会导致算法在一堆没有意                                                 义的大小顺序中学习!!!!(Spark高级数据分析-P65),建议还是用one-hot 哈希编码;如果仅仅是两个类,用0-1编码是不会有太大问题的,但是one-hot编码存在一个问题就是,如果类别过程,生成的稀疏编码维度将会过大,甚至造成维度灾;因此,有资料推荐使用many-to-many 进行hash分类,从而降低维度;但是many-to-many过程,需要进行分析,如果聚类一组特征,从而实现较好的效果,具体还要再找找资料,欢迎补充,谢谢!
                       2.3:缺失值处理:如果缺失部分大,可以考虑放弃该条特征,否则利用平均值、中位数、众数等进行缺失值
    补充
                       2.4:数据转换:为了使得数据之间反应出清晰的相关性(解决偏度影响),可以对数据进行log、指数等转换

          3、特征降维:3.1:PCA:无监督映射过程,通过数学映射;找出特征方差大的组合,相应的特征向量能够概括总                                                               特征90%以上信息(具备数学推导,大家有兴趣可以看一下)
                                3.2:LDA:监督映射过程,使得同类点距离越近,类间距离越远
                                3.3:随机森林算法:通过袋外样本(Out-Of-Bag),对每棵决策树进行误差判断,之后再利用随机树变换某一                                                                 维特征,观察其误差的变化,如果误差变化大,即认为特征重要
                                3.4:filter:通过数学上方差、信息熵等操作,观察每个维度特征情况,进行降维;
                                3.5:特征衍生:对数据进行一定的加工,生成重要特征,进行信息补充
欢迎转载,注明出处,谢谢!
参考:https://www.cnblogs.com/jasonfreak/p/5448385.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息