MLlib是spark的机器学习库,其目的是使得机器学习算法更容易使用和扩展。MLlib包含分类、回归、聚类、协同滤波、降维,以及更低层级的优化原语和更高层级的管道API。MLlib分红两个包:spark.mllib包含创建在RDD之上的原始API,spark.ml提供了创建在DataFrames之上的更高层级的机器学习管道API。推荐使用spark.ml,由于DataFrames使得API更加通用和灵活。 算法
下面连接是本人作的一个关于半监督式学习的ppt
半监督学习ppt 数组
MLlib数据类型
- MLlib支持保存在本地的,或者由RDD所表示的分布式向量和矩阵。代数运算由Breeze和jblas库支持。在监督式学习中,一个训练样本称为:a labeled point
- 本地向量:元素为double类型,向量下标索引从0开始的int整数;支持dense和sparse两种类型。dense 向量由一个double数组保存向量中全部的值;sparse向量由两个并行的数组支持,分别保存索引和值。类继承关系:Vector -> (DenseVector, SparseVector)
- LabeledPoint:包括一个本地向量(能够是dense vector或者sparse vector),和给该向量打上的标签。标签采用double类型保存,因此LabeledPoint可用于分类和回归问题中。对于二值分类问题,标签要么为0,要么为1;对于多类问题,标签为从0开始的整数:0,1,2,...。实际问题中常常遇到训练数据稀疏的状况,MLlib支持从LIBSVM文件加载数据,构造LabeledPoint
- 本地矩阵:元素值为double类型,行列索引为int类型;支持dense和sparse矩阵。dense矩阵采用一个double数组,按照列主序保存数组;sparse矩阵采用CSC(Compressed sparse column)格式,以列主序保存矩阵中非零元素。Matrix -> (DenseMatrix, SparseMatrix)
- 分布式矩阵:采用long类型保存行列索引,元素值依然是double类型,分布式保存在一个或者多个RDD之中。选择正确的保存格式对分布式矩阵很是重要,由于转换分布式矩阵的格式极可能会牵涉到大量的shuffle IO操做,目前支持3种类型的分布式矩阵:RowMatrix, IndexedRowMatrix, CoordinateMatrix。最基本的类型RowMatrix,是一个以行为主的矩阵,每一行能够当作是一个特征向量,以向量的形式存储在本地。IndexedRowMatrix是特殊的RowMatrix,其还保存了每一行的索引,用于定位特定的行和执行join操做。CoordinateMatrix以坐标序列的形式保存数组中的元素。BlockMatrix是为分块矩阵设计的数据结构,矩阵被分割成一个个矩阵块,保存到本地。
MLlib数据统计
- 在RDD[Vector]上,Statistics类提供了基于列的统计函数colStats,colStats返回每一列的最大值,最小值,均值,方差,非零元素个数,以及全部元素数量
- 计算两个序列的相关性是一项很经常使用的操做,使用corr函数能够很容易的计算两个或者多个向量的相关系数,corr函数支持Pearson和Spearman相关系数。
- 在RDD[(K,V)],采用分层抽样函数sampleByKey,需指定每个key抽样的比例
- 假设检验,支持皮尔逊卡方检验
- 随机数生成,支持均匀分布、标准正态分布、泊松分布
- kernel density estimation:容许在不知道被观察样本几率分布的状况下,对其经验几率分布进行可视化。经过评估给定的样本,估计随机变量的分布。在评估随机变量的分布时,假设随机变量的经验几率分布函数,能够表示为以全部采样点为中心的正态分布的均值。