Spark MLib 数据类型
2016-05-28 17:51
246 查看
1. MLlib
Apache Spark's scalable machine learning library, with APIs in Java, Scala and Python.2. 数据类型
本地向量,标注点,本地矩阵,分布式矩阵3. 本地向量 Local Vector
稠密向量 dense 一个double数组,例如 (1.0, 0.0, 0.0, 0.0, 3.0)稀疏向量 sparse 两个并行的数组(indices和values),例如 (5, [0, 4], [1.0, 3.0]),其中5表示向量元素的个数,[0,4] 是indices,[1.0,3.0]是values
基类是Vector, org.apache.spark.mllib.linalg.vector引入
import org.apache.spark.mllib.linalg.{Vector, Vectors} val dv: Vector = Vectors.dense(1.0, 0.0, 3.0) // 创建一个dense vector (1.0, 0.0, 3.0). val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)) // 创建一个sparse vector (1.0, 0.0, 3.0). val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0))) // 等同于sv2
4. 标注点(Labeled Point)
用于有监督学习的训练样本称为标注点。一个标注点就是一个本地向量(或稠密或稀疏),这个向量和一个标签或者响应相关联。
我们用一个
double存储标签,这样我们就可以在回归和分类中使用标注点。
对于二分类,一个标签可能是0或者是1;对于多分类,一个标签可能代表从0开始的类别索引。
样本类是LabeledPoint, org.apache.spark.mllib.regression.LabeledPoint 引入。
import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.LabeledPoint val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0)) // a positive label and a dense feature vector. val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))) // a negative label and a sparse feature vector.
5. 本地矩阵(Local Matrix)
稠密矩阵 按列顺序存储,用一个数组,加上(列,行) 表示数组大小。稀疏矩阵 非零条目值保存为压缩稀疏列 CSC(
Compressed Sparse Column)格式,这种格式也是以列顺序存储
例: 9.0 0.0
( 0.0 8.0)
0.0 6.0
稠密矩阵可以表示为,[3, 2, (9.0 , 0.0, 0.0, 0.0, 8.0, 6.0) ] 其中3为
稀疏矩阵 ??不懂
基类是Matrix, 可以导入 org.apache.spark.mllib.linalg.Matrices
import org.apache.spark.mllib.linalg.{Matrix,Matrices} val dm: Matrix=Matrices.dense(3,2,Array(9.0,0.0,0.0,0.0,8.0,6.0) // dense Matrix val sm: Matrix=Matrices.sparse(3,2,Array(0,1,3),Array(0,2,1),Array(9,8,6)) //sparse Matrix
6. 分布式矩阵 Distributed Matrix
一个分布式矩阵拥有long类型的行和列索引,以及
double类型的值,分布式的存储在一个或多个
RDD中。
已经实现了3种分布式矩阵:
1) RowMatrix
是一个面向行的分布式矩阵,它没有有意义的行索引。行保存为一个RDD,每一行都是一个本地向量。
可以通过 org.apache.spark.mllib.linalg.distributed.RowMatrix 引入。
通过
RDD[Vector]实例创建
2) IndexedRowMatrix
和RowMatrix类似,它拥有行索引,行索引可以用于识别行和进行join操作
org.apache.spark.mllib.linalg.distributed.{IndexedRow, IndexedRowMatrix, RowMatrix}
可以通过
RDD[IndexedRow]实例创建
IndexedRowMatrix可以通过去掉它的行索引,转换成
RowMatrix
3) CoordinateMatrix
一个分布式矩阵,它使用COO格式存储 (COO是啥)
条目保存为一个
RDD。每一个条目是一个
(i: Long, j: Long, value: Double)格式的元组,
i行索引,
j列索引,
value条目值。
应该仅仅在矩阵维度很大并且矩阵非常稀疏的情况下使用
org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry}
通过
RDD[MatrixEntry]实例创建
4) BlockMatrix
每个块保存为一个RDD与CoordinateMatrix类似,是一个((Int, Int), Matrix)类型的元组,其中
(Int, Int)代表块的索引,
Matrix代表子矩阵。
BlockMatrix支持诸如
add和
multiply等方法。
BlockMatrix还有一个帮助方法
validate,用来判断一个
BlockMatrix是否正确的创建。
调用
toBlockMatrix从一个
IndexedRowMatrix或者
CoordinateMatrix创建一个
BlockMatrix。 默认大小为 1024 * 1024
org.apache.spark.mllib.linalg.distributed.BlockMatrix
相关文章推荐
- Android 6.0 ListFiles 返回null
- jquery cookie记住用户名和密码(使用方法)
- nsci.txt 是什么?
- 【例题】【费马小定理(降幂)、递推】NKOJ 3687 整数拆分
- 咏春拳
- 函数返回局部变量的问题
- angularjs对json数据的操作--收货地址列表
- LaTeX数学公式中的空格
- 第十三周学习进度条
- 学习进度条12
- deque容器
- 航空路线问题[网络流24题之11]
- mysql_5.6.24_winx64免安装配置
- 浅谈L0,L1,L2范数及其应用
- iOS中UITextField使用详解
- 装配线调度
- 无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
- c++上级实验6--数组合并
- iOS-OC中的lazyLoad(懒加载)
- Android开发中,有哪些让你觉得相见恨晚的方法、类或接口?