学习 Spark MLlib(二):线性代数

Breeze

Breeze 作为数值处理的底层线性代数库,Spark 包装了 Breeze 库实现了机器学习算法。

Breeze GitHub 地址:https://github.com/scalanlp/breeze

依赖

编辑 pom.xml 文件,添加依赖:

<dependency>  
    <groupId>org.scalanlp</groupId>
    <artifactId>breeze_2.11</artifactId>
    <version>0.13.2</version>
</dependency>  
<dependency>  
    <groupId>org.scalanlp</groupId>
    <artifactId>breeze-natives_2.11</artifactId>
    <version>0.13.2</version>
</dependency>  
<dependency>  
    <groupId>org.scalanlp</groupId>
    <artifactId>breeze-viz_2.11</artifactId>
    <version>0.13.2</version>
</dependency>  

Vector

Breeze 向量有两种表示方法:

  • 密集向量(Dense Vector),对应类 breeze.linalg.DenseVector
  • 稀疏向量(Sparse Vector),对应类 breeze.linalg.SparseVector

稀疏向量对比密集向量,其值大部分为零。

密集向量🌰:

DenseVector(1.0, 2.0, 3.0, 4.0, 5.0)  

稀疏向量🌰:

val sv: SparseVector[Int] = SparseVector(5)()  
sv(0) = 1.0  
sv(2) = 3.0  
sv(4) = 5.0  

机器学习中的特征使用 N 维向量表示。

Matrix

Breeze 矩阵也有两种表示方法:

  • 密集矩阵(Dense Matrix),对应类 breeze.linalg.DenseMatrix
  • 稀疏矩阵(Sparse Matrix),以 CSC(Compressed Sparse Columns)格式存储,对应类 breeze.linalg.CSCMatrix

稀疏矩阵对比密集向量,其值大部分为零。

密集矩阵🌰:

DenseMatrix((1.0, 2.0), (3.0, 4.0))  

稀疏矩阵🌰:

val builder = new CSCMatrix.Builder[Double](rows = 2, cols = 2)  
builder.add(0, 0, 1.0)  
builder.add(1, 1, 4.0)  
val sm = builder.result  

Spark

Vector

密集向量:

val dv = Vectors.dense(Array(1.0, 2.0, 3.0, 4.0))  

稀疏向量:

val sv = Vectors.sparse(4, Array(0, 1.0), Array(2, 3.0))  

Matrix

密集矩阵:

val dm = Matrices.dense(2, 2, Array(1.0, 2.0, 3.0, 4.0))  

稀疏矩阵:

val sm = Matrices.sparse(2, 2, Array(0, 0, 1.0), Array(1, 1, 4.0))  

DistributedMatrix

RowMatrix
IndexedRowMatrix
CoordinateMatrix
BlockMatrix