机器学习:利用机器学习解决实际问题的通用框架
欢迎转载,作者:Ling,注明出处:机器学习:利用机器学习解决实际问题的通用框架
本人从读博阶段开始接触机器学习与自然语言处理,开始工作后接触深度学习,在研究和工作中都大量使用到了这几个技术,本文主要想介绍一下使用机器学习解决实际问题的一些经验和方法步骤,不涉及具体代码,并且之后会开源一个通用框架。该框架应对基本的机器学习竞赛项目,最简单的实现可以直接进入前50%,复杂实现可以进入前20名。Enjoy!
先上一个机器学习通用框架图:
再上代码结构截图:
其中:
core/data_process:
core/feature_engineering:
core/model_building:
core/utils:
data:
ut:
project:
project/kaggle_house_prices:
整个框架也可以说是一个通用的解决机器学习的方法和步骤,下面详细介绍。
机器学习解决实际问题步骤详解:
数据探索:Data Exploration, 通过画图可以更容易探索
- 整体分析数据:类型,大小,属性数目
- 各个属性分析:类型,大小,分布
- 问题类型识别:分类,回归,聚类
- 数据缺失分析:缺失百分比, 缺失数据和其他数据关系
数据处理:Data Process/Clean
- 数据抽样:Sample,对于大项目,由于样本较大,所以可以抽样确保整个程序没有问题
-
数据分割:Splitter,用于交叉验证,主要是要将训练集分成Train和Validate两部分, 注意不要对整个数据进行分割,因为数据处理之后具体内容会有变化,所以我们可以仅进行index分割(即记录Id分割)。同时分割还有一些更复杂的处理技巧,比如考虑样本之间交集情况等。
- 简单分割:Leave One Out, Kfolder
- 复杂分割:根据Train和Test集合的重合度进行分割
- Level分割:第一层划分后再对第一层进行第二次划分,如此继续
-
数据预处理:Preprocess
- 数据合并:训练与测试集合并
-
空值处理:
- 填上特殊标记
- 删除:注意如果要删除一整条记录,最好在数据处理之前完成,一般删除指整列删除
- 利用已有值的均值或者建模推测可能的值进行补充
- 数据组合:组合一些属性得到新属性
- 数据分割:分割一些属性得到更多属性
- 数据筛选:只要某些属性值
- 异常处理:处理异常点,往往可以通过探索阶段生成的图找异常点,或者根据分位点找异常值
- 其他处理:名称变换
-
数据处理:Process
-
数字:Number, 主要解决峰度和偏度以及量纲不同等问题
- scaling 取log
- 去掉outlier
- normalize
-
类别:Category
- One Hot
- LabelEncoder
-
文本:Text,自然语言处理的各项技术上!
- 大小写转换
- 驼峰字拆分
- 单位转换
- 词替换
- ‘-’字拆分
- 数字词拆分
- 数字转换(one->1)
- 特殊字符处理
- Html字符处理
- 词根还原
- 单复还原
- 分词
- 停用词,特殊情况单独处理
- 自动纠错
- 长文本合并" "或者成list
- 其他
-
数字:Number, 主要解决峰度和偏度以及量纲不同等问题
特征工程:Feature Engineering
- 数字:Number, 基本上经过之前数据处理之后的数字特征原样保留即可
- 类别:Category,如果是OneHot,数据过大,可以用PCA,LSA进行压缩
-
文本:Text,最复杂的一部分,可以有很多很多方法,下面从不同角度探讨主要的一些方法。
-
粒度:
- 以char为单位
- 以word为单位
- Ngram:1-5个单位为一个单位
-
单一特征与联合特征:
-
单一特征:
- ID
- 数目
- 长度
- 比率
- 位置
- 分类
- 关键字
- 熵
-
联合特征:比如Search相关的机器学习问题
- 相似度:EditDistance,DiceDistance,JaccardCoef
- 位置:o在t中位置情况
- 交集:交集数目,交集相似度大于阈值数目/0,1组特征
- 匹配:完全一样数目,最长公共子序列长度
- 质量:raw,单复数处理后,词根还原后彼此之间的相似度
- 向量:tf,tfidf,bm25,word2vec, 空间向量(char,word(o,t组合,分开))
- 向量预处理:SVD,TSNE,稀疏矩阵压缩
- 向量处理:Importance,Cosinesim,Similarity,RMSE,vector相加,imp*cos,imp*simi
- 向量模型:google,wikipedia,corpus自己训练
- 特征处理方法:
-
单一特征:
-
粒度:
每条记录的值可以为:单一值,同维[]
[]: 可以通过["mean", "std", "max", "min", "median"] 转化为单一值
[[],[]]: 可以通过 ["mean", "std", "max", "min", "median"]转化为[],再通过一次["mean", "std", "max", "min", "median"] 可转化为单一值
-
特征选择:
- 阈值法
- 相关度分析:多重共线性分析等
- 人工分析
模型训练:model building,主要根据参数进行调参,得到最佳模型,甚至可以组合模型得到更好的模型
-
模型训练:可以利用已有技术自动调参,另外其实大部分分类算法都有对应的回归算法。这篇神文 Do we Need Hundreds of Classifiers to Solve Real World Classification Problems 测试了179种分类模型在UCI所有的121个数据上的性能,发现Random Forests 和 SVM 性能最好。
- 分类
- 回归
- 聚类
机器学习有很多算法,神文研究表明,以下这些算法最佳。
部分主要算法对比:
部分参数可能取值情况:
-
模型组合:
- Ensemble
- Voting
- 结果生成:生成最后的预测结果
- 后期处理:可以增加这么一个步骤,对自动生成的数据进行处理
留言