首页 > 技术,让世界更美好。 > 【Spark MLib】Spark MLib用于机器学习的基本类型

【Spark MLib】Spark MLib用于机器学习的基本类型

2018年1月15日

1.Local Vector(本地向量)

 

    本地向量由基于零的整型索引和双精度浮点型组成的数据结构,存储在单台机器上。本地向量分为dense vector(密集向量)和sparse vector(稀疏向量)。

    • dense vector:直接使用浮点数组表示向量。
    • sparse vector:通过整型索引和和其浮点数值表示。

    (1.0, 0.0, 3.0)表示为dense vector为[1.0, 0.0, 3.0] ,表示为sparse vector为(3, [0, 2], [1.0, 3.0]),其中3代表向量的长度,0和2分别指索引位置。

def main(args: Array[String]): Unit = {
    val denseVector=Vectors.dense(1.0,0.0,3.0)
    val denseVector2=Vectors.dense(Array(1.0,0.0,3.0))
    val sparseVector=Vectors.sparse(3,Array(0,2),Array(1.0,3.0))
    val sparseVector2=Vectors.sparse(3,Seq((0,1.0),(2,3.0)))
    println(denseVector)
    println(denseVector2)
    println(sparseVector)
    println(sparseVector2)
    println(denseVector==denseVector2)
    println(sparseVector==sparseVector2)
    println(denseVector.toSparse==sparseVector)
  }


输出:
[1.0,0.0,3.0]
[1.0,0.0,3.0]
(3,[0,2],[1.0,3.0])
(3,[0,2],[1.0,3.0])
true
true
true


2.Labeled Point(标签点)

 

    标签点由一个Local Vector和一个双精度浮点型的Label组成。

val labeledPoint=LabeledPoint(1.0,Vectors.dense(1.0,2.0,3.0))
println(labeledPoint)


输出:
(1.0,[1.0,2.0,3.0])

注意:实际应用中,我们会常常使用libSVM格式的数据文件,这是一种规范好稀疏特征向量的文本格式的文本文件。spark可以直接通过MLUtils.loadLibSVMFile()读取libSVM格式文件

 

 

3.Local Matrix(本地矩阵)

 

    本地矩阵分为密集矩阵(dense matrix)和稀疏矩阵(dense matrix)。含义类似稀疏和密集向量。

// Create a dense matrix ((1.0, 2.0), (3.0, 4.0), (5.0, 6.0)),这里定义好矩阵为3x2后,
// 直接把矩阵的值按列优先的原则,列出所有值。
val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0))

// Create a sparse matrix ((9.0, 0.0), (0.0, 8.0), (0.0, 6.0)),这里定义好矩阵为3x2后,
// 分别传入列索引和行索引,然后列出对应索引的值。如下,9位于第0列0行,6的位于第1列2行。
val sm: Matrix = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 2, 1), Array(9, 6, 8))

println(dm)
println(sm)

输出:
1.0 2.0 
3.0 4.0 
5.0 6.0 
3 x 2 CSCMatrix
(0,0) 9.0
(2,1) 6.0
(1,1) 8.0

 

 

4.Distributed matrix(分布式矩阵)

 

    spark具有三类分布式矩阵存储格式:RowMatrix(行矩阵)、IndexedRowMatrix(行索引矩阵)、CoordinateMatrix(三元组矩阵)和BlockMatrix(块矩阵)。

  • RowMatrix

每一行都是一个Vector,那么RDD[Vector]就被称为行矩阵。一般用来统计平均数、方差、协同方差或者用于SVD和PCA。

  • IndexedRowMatrix

IndexedRowMatrix是在RowMatrix的基础上为每一行添加一个Long类型的索引。

  • CoordinateMatrix

CoordinateMatrix本质上是一个RDD[(Long,Long,Double)],其中三元组依次代表行索引、列索引和值。CoordinateMatrix多用于较为稀疏的矩阵。实际在spark 中(Long,Long,Double)三元组用MatrixEntry对象封装。

  • BlockMatrix

分块矩阵由((Int,Int),Matrix)组成,其中两个Int代表Matrix在整个矩阵中的位置。

本文的评论功能被关闭了.