Spark MLib 数据类型
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
Spark MLib 数据类型的更多相关文章
- Spark MLib:梯度下降算法实现
声明:本文参考< 大数据:Spark mlib(三) GradientDescent梯度下降算法之Spark实现> 1. 什么是梯度下降? 梯度下降法(英语:Gradient descen ...
- Spark mlib的本地向量
Spark mlib的本地向量有两种: DenseVctor :稠密向量 其创建方式 Vector.dense(数据) SparseVector :稀疏向量 其创建方式有两种: 方法一:Vector. ...
- Spark MLib完整基础入门教程
Spark MLib 在Spark下进行机器学习,必然无法离开其提供的MLlib框架,所以接下来我们将以本框架为基础进行实际的讲解.首先我们需要了解其中最基本的结构类型,即转换器.估计器.评估器和流水 ...
- Spark MLib 基本统计汇总 2
4. 假设检验 基础回顾: 假设检验,用于判断一个结果是否在统计上是显著的.这个结果是否有机会发生. 显著性检验 原假设与备择假设 常把一个要检验的假设记作 H0,称为原假设(或零假设) (null ...
- Spark MLib 基本统计汇总 1
1. 概括统计 summary statistics MLlib支持RDD[Vector]列式的概括统计,它通过调用 Statistics 的 colStats方法实现. colStats返回一个 ...
- Spark PySpark数据类型的转换原理—Writable Converter
Spark目前支持三种开发语言:Scala.Java.Python,目前我们大量使用Python来开发Spark App(Spark 1.2开始支持使用Python开发Spark Streaming ...
- Spark MLlib数据类型
MLlib支持几种数据类型:本地向量(local vectors),和存储在一个简单机器中的矩阵(matrices),以及由一个或多个RDDs组成的分布式矩阵. 1,本地向量(Local Ve ...
- spark 机器学习基础 数据类型
spark的机器学习库,包含常见的学习算法和工具如分类.回归.聚类.协同过滤.降维等使用算法时都需要指定相应的数据集,下面为大家介绍常用的spark ml 数据类型.1.本地向量(Local Vect ...
- Spark的mlib中的稠密向量和稀疏向量
spark mlib中2种局部向量:denseVector(稠密向量)和sparseVector(稀疏向量) denseVector向量的生成方法:Vector.dense() sparseVecto ...
随机推荐
- Dubbo架构设计详解
from:http://shiyanjun.cn/archives/325.html Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解 ...
- usb驱动开发17之设备生命线
拜会完了山头的几位大哥,还记得我们从哪里来要到哪里去吗?时刻不能忘记自身的使命啊.我们是从usb_submit_urb()最后的那个遗留问题usb_hcd_submit_urb()函数一路走来,现在就 ...
- Winfrom动态创建控件
FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel();for (int i = 0; i < 9; i++){ Button b ...
- make的控制函数(error,warning)
make的控制函数 make提供了两个控制make运行方式的函数.通常它们用在Makefile中,当make执行过程中检测到某些错误是为用户提供消息,并且可以控制make过程是否继续. 8.11.1 ...
- 自己的兼容IE系列的console.log
console.log.apply 在某些浏览器下无法通过if进行验证,只能通过try catch进行验证: window.zlogs = function(){ try{ window.consol ...
- mybatis 3.x 缓存Cache的使用
mybatis 3.x 已经支持cache功能了,使用很简单,在mappper的xml文件里添加以下节点: <mapper namespace="com.cnblogs.yjmyzz. ...
- Ionic实战四:ionic 即时通讯_ionic仿雅虎邮箱
此产品是一款Ionic版微博.微信.朋友圈效果(微博.微信.聊天列表.聊天窗口.个人界面.编辑个人信息等)购买后二次开发方便快捷.    
- ASP.NET Web API Help Pages using Swagger
Understanding the various methods of an API can be a challenge for a developer when building a consu ...
- JSP 和 ASP.NET 谁能主宰未来【转】
随着计算机行业的发展,以后到底谁才是 web 网站开发的主宰者呢? 1. 说说JSP.(本人工作中用的最多的就是JSP) JSP. JavaServer Pages 是Java技术的一部分,可以说是J ...
- 【前端也要学点算法】 归并排序的JavaScript实现
前文我们了解了快速排序算法的实现,本文我们来了解下另一种流行的排序算法-归并排序算法. 我们先来回顾下快排.快排的核心是找出一个基准元素,把数组中比该元素小的放到左边数组,比该元素大的放到右边数组,如 ...