分类方法(Classification)用于预测数据对象的离散类别(Categorical Label);预测方法(Prediction)用于预测数据对象的连续取值。
分类流程:新样本→特征选取→分类→评价
训练流程:训练集→特征选取→训练→分类器
最初,机器学习的分类应用大多都是在这些方法及基于内存基础上所构造的算法。目前,数据挖掘方法都要求具有基于外存以处理大规模数据集合能力,同时具有可扩展能力。
MLlib是Spark的机器学习(Machine Learning)库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模。机器学习需要多次迭代,如果使用Hadoop计算框架,则每次计算都要进行磁盘读写任务,会导致非常大的I/O和CPU消耗,而Spark是基于内存的计算具有天生的优势。而且其RDD可与Spark SQL、Spark Streaming、GraphX等其他子框架与库无缝地共享数据和操作,如MLlib可以直接使用SparkSQL提供的数据,或可以直接和GraphX图计算进行join操作。
MLlib在 spark 生态系统中的位置
Spark MLlib 架构
从架构图可以看出MLlib主要包含三个部分:
底层基础:包括Spark的运行库、矩阵库和向量库;
算法库:包含广义线性模型、推荐系统、聚类、决策树和评估的算法;
实用程序:包括测试数据的生成、外部数据的读入等功能。
下图是MLlib算法库的核心内容。
MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。
具体来说,其主要包括以下几方面的内容:
1. 算法工具:常用的学习算法,如分类、回归、聚类和协同过滤;
2. 特征化工具:特征提取、转化、降维,和选择工具;
3. 管道(Pipeline):用于构建、评估和调整机器学习管道的工具;
4. 持久性:保存和加载算法,模型和管道;
5. 实用工具:线性代数,统计,数据处理等工具。
Spark将机器学习算法分成了两个模块:
训练模块:通过训练样本输出模型参数;
预测模块:利用模型参数初始化,预测测试样本,输出预测值。
MLLib中经典算法解析 分类 分类是一种重要的机器学习和数据挖掘技术。分类的目的是根据数据集的特点构造一个分类函数或分类模型(也常常称作分类器),该模型能把未知类别的样本映射到给定类别中的一种技术。
分类的具体规则可描述如下:
给定一组训练数据的集合T(Training set),T的每一条记录包含若干条属性(Features)组成一个特征向量,用矢量 x=(x1,x2,..,xn) 表示。 xi 可以有不同的值域,当一属性的值域为连续域时,该属性为连续属性(Numerical Attribute),否则为离散属性(Discrete Attribute)。用 C=c1,c2,..ck 表示类别属性,即数据集有k个不同的类别。那么,T就隐含了一个从矢量X到类别属性C的映射函数: f(X)↦C 。分类的目的就是分析输入数据,通过在训练集中的数据表现出来的特性,为每一个类找到一种准确的描述或者模型,采用该种方法(模型)将隐含函数表示出来。
构造分类模型的过程一般分为训练和测试两个阶段。在构造模型之前,将数据集随机地分为训练数据集和测试数据集。先使用训练数据集来构造分类模型,然后使用测试数据集来评估模型的分类准确率。如果认为模型的准确率可以接受,就可以用该模型对其它数据元组进分类。一般来说,测试阶段的代价远低于训练阶段。
每个算法具体的内容由于内容过多,因此不在此详细介绍。
分类算法使用场景