学习spark机器学习库MLlib

阅读更多

MLlib是spark的机器学习库,其目的是使得机器学习算法更容易使用和扩展。MLlib包含分类、回归、聚类、协同滤波、降维,以及更低层级的优化原语和更高层级的管道API。MLlib分成两个包:spark.mllib包含建立在RDD之上的原始API,spark.ml提供了建立在DataFrames之上的更高层级的机器学习管道API。推荐使用spark.ml,因为DataFrames使得API更加通用和灵活。

下面链接是本人做的一个关于半监督式学习的ppt

半监督学习ppt

MLlib数据类型

  1. MLlib支持保存在本地的,或者由RDD所表示的分布式向量和矩阵。代数运算由Breeze和jblas库支持。在监督式学习中,一个训练样本称为:a labeled point
  2. 本地向量:元素为double类型,向量下标索引从0开始的int整数;支持dense和sparse两种类型。dense 向量由一个double数组保存向量中所有的值;sparse向量由两个并行的数组支持,分别保存索引和值。类继承关系:Vector -> (DenseVector, SparseVector)
  3. LabeledPoint:包括一个本地向量(可以是dense vector或者sparse vector),和给该向量打上的标签。标签采用double类型保存,所以LabeledPoint可用于分类和回归问题中。对于二值分类问题,标签要么为0,要么为1;对于多类问题,标签为从0开始的整数:0,1,2,...。实际问题中经常遇到训练数据稀疏的情况,MLlib支持从LIBSVM文件加载数据,构造LabeledPoint
  4. 本地矩阵:元素值为double类型,行列索引为int类型;支持dense和sparse矩阵。dense矩阵采用一个double数组,按照列主序保存数组;sparse矩阵采用CSC(Compressed sparse column)格式,以列主序保存矩阵中非零元素。Matrix -> (DenseMatrix, SparseMatrix)
  5. 分布式矩阵:采用long类型保存行列索引,元素值依然是double类型,分布式保存在一个或者多个RDD之中。选择正确的保存格式对分布式矩阵非常重要,因为转换分布式矩阵的格式很可能会牵涉到大量的shuffle IO操作,目前支持3种类型的分布式矩阵:RowMatrix, IndexedRowMatrix, CoordinateMatrix。最基本的类型RowMatrix,是一个以行为主的矩阵,每一行可以看成是一个特征向量,以向量的形式存储在本地。IndexedRowMatrix是特殊的RowMatrix,其还保存了每一行的索引,用于定位特定的行和执行join操作。CoordinateMatrix以坐标序列的形式保存数组中的元素。BlockMatrix是为分块矩阵设计的数据结构,矩阵被分割成一个个矩阵块,保存到本地。

MLlib数据统计

  1. 在RDD[Vector]上,Statistics类提供了基于列的统计函数colStats,colStats返回每一列的最大值,最小值,均值,方差,非零元素个数,以及所有元素数量
  2. 计算两个序列的相关性是一项很常用的操作,使用corr函数可以很容易的计算两个或者多个向量的相关系数,corr函数支持Pearson和Spearman相关系数。
  3. 在RDD[(K,V)],采用分层抽样函数sampleByKey,需指定每一个key抽样的比例
  4. 假设检验,支持皮尔逊卡方检验
  5. 随机数生成,支持均匀分布、标准正态分布、泊松分布
  6. kernel density estimation:允许在不知道被观察样本概率分布的情况下,对其经验概率分布进行可视化。通过评估给定的样本,估计随机变量的分布。在评估随机变量的分布时,假设随机变量的经验概率分布函数,可以表示为以所有采样点为中心的正态分布的均值。

转载于:https://my.oschina.net/jhone/blog/330596

你可能感兴趣的:(学习spark机器学习库MLlib)