本文针对spark支持的machine learning 算法进行汇总,并针对各类算法、ml pipeline的使用提供一个简单的入门介绍。
machine learning 算法汇总
spark支持的machine learning 算法汇总如下
机器学习的流程
机器学习流程
拿到一个机器学习问题时,通常处理的机器学习的流程一般如下:
ML Pipelines
ML Pipelines: 提供了基于DataFrame上统一的高等级API,可以帮助使用者创建和调试机器学习工作流
MLlib标准化了用于机器学习算法的api,使其更容易将多个算法组合到单个管道(Pipeline)或工作流中:
- DataFrame:ML API使用Spark SQL中的DataFrame作为ML数据集,可以容纳多种数据类型。例如,一个DataFrame可以有不同的列来存储文本、特征向量、真实标签和预测结果。
Transformer:是一个可以将某个DataFrame转换成另一个DataFrame的算法,比如一个ML模型就是一个将DataFrame转换为原DataFrame+一个预测列的新的DataFrame的转换器;
Estimator:是一个可以fit一个DataFrame得到一个转换器的算法,比如一个学习算法是一个使用DataFrame并训练得到一个模型的预测器;
Pipeline:一个Pipeline链使用多个转换器和预测器来指定一个机器学习工作流;
Parameter:所有的转换器和预测器通过一个通用API来指定其参数;
流程图示意如下:
算法
分类算法
分类通常是指将事物分为不同的类别,属于监督学习中的一种形式。通过大量的样本数据构成一个训练集,每个样本有多个属性,属性可以是连续型,也可以是离散型。其中有一个属性都称为事物的类别属性,用来表示事物所属的类别。
简而言之,分类就是通过一组代表物体、事件等的相关属性来判断其类别。
分类有如下三种:
- 单标签二分类算法:是最常见的算法问题,主要是指label 标签的取值只有两种,并且算法中只有一个需要预测的label标签; 直白来讲就是每个实例的可能类别只有两种(A or B);此时的分类 算法其实是在构建一个分类线将数据划分为两个类别
-
单标签多分类算法:指待预测的label标签只有一个,但是 label标签的取值可能有多种情况;直白来讲就是每个实例的可能
类别有K种(t1,t2,…tk,k≥3) -
多标签多分类算法:指待预测的label标签有多个,每个标签的取值也有多个。多标签多分类这类问题的解决方案可以分为两大类:
- 转换策略(Problem Transformation Methods);
- Binary Relevance(first-order)
- Classifier Chains(high-order)
- Calibrated Label Ranking(second-order)
- 算法适应(Algorithm Adaptation)。
- ML-kNN
- ML-DT
- 转换策略(Problem Transformation Methods);
回归算法
回归算法是机器学习中最常见也是使用最广的一个算法,回归算法主要有线性回归和逻辑回归2种。
聚类算法
聚类算法属于无监督学习,从没有标签数据的数据中提炼出规则或特征。比如识别异常数据,对用户进行分类。
聚类算法的思想就是物以类聚的思想,相同性质的点在空间中表现得较为紧密和接近,主要用于数据探索和异常检测
频繁模式挖掘
序列模式:找出序列数据库中数据之间的先后顺序。比如:用户访问某个网站各个网页的顺序。
关联规则:找出事务数据库中数据之间的并发关系。比如:啤酒和尿布
关联规则挖掘不关注事务之间的先后顺序,序列模式挖掘需要考虑序列间的先后顺序
推荐算法
协同过滤
协同过滤简单来说就是利用某个兴趣相投、拥有共同经验的群体的喜好来为个体用户推荐其感兴趣的资讯或物品。
换句话说就是,借鉴和你相关的人群的观点来进行推荐。
协同过滤的目标:在于填充“用户-项【资讯或物品】” 关联矩阵中的缺失项。
spark.ml使用交替最小二乘算法来学习这些潜在因子。
降维算法
数据降维
- 降维就是一种对高维度特征数据预处理方法,是应用非常广泛的数据预处理方法。
- 降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。
- 在实际的生产和应用中,降维在一定的信息损失范围内,可以节省大量的时间和成本。
特征工程
- 特征提取: 从“原始”数据中提取特征
- 特征变换: 缩放、转换或修改特征
- 特征选择: 从更大的功能集中选择一个子集
- 局部敏感哈希(LSH): 这类算法将特征变换的各个方面与其他算法相结合。