spark-mllib 密集向量和稀疏向量

MLlib支持局部向量和矩阵存储在单台服务器,也支持存储于一个或者多个rdd的分布式矩阵 。
局部向量和局部矩阵是用作公共接口的最简单的数据模型。 基本的线性代数运算由Breeze提供。
在监督学习中使用的训练示例在MLlib中称为“标记点”。

因此,向量和 矩阵,标记点是 spark-mllib基本的数据模型,也是学习sparl-mllib的基础。

局部向量

一个局部向量具有存储在单个机器上的integer整数类型的基于0的索引和double类型的多个值。MLlib支持两种类
类型的局部向量:密集(dense)向量和稀疏(sparse)向量。
一个密集向量基于一个double数组来表示其实体值,但是一个稀疏的向量基于两个并列的数组:索引数组和值数组。

例如,一个向量(1.0,0.0,3.0)可以用密集格式表示为[1.0,0.0,3.0] ;
稀疏格式表示为(3,[0,2],[1.0,3.0]),其中3是 向量的大小,向量的索引下标为0,1,2,索引为0的向量元素值为1.0,索引为0的向量元素值为3.0,而索引为1的向量元素值是默认值0.0。

由此可以看出,稀疏的向量初始化的值不包括默认值和不存在的值,可以节省一部分空间,数据集可以变小;而密集向量是把向量中每一个元素的值都初始化了,即是某个索引下标的值不存在,也用默认值代替,这样的好处是清晰明了,但是数据集会比较大。

局部向量的基本实现类是org.apache.spark.mllib.linalg.Vector,spark提供了2中实现:DenseVector and SparseVector。spark官方推荐使用org.apache.spark.mllib.linalg.Vectors类的工厂方法来创建局部向量。
参考 Vector.scala和Vectors.scala的docs文档了解详细的API介绍。

下面我使用spark 的mllib api 就定义一个密集向量:

import org.apache.spark.mllib.linalg.{Vector, Vectors}

// Create a dense vector (1.0, 0.0, 3.0).
//创建密集向量
val dv: Vector = Vectors.dense(1.0, 0.0, 3.0)

// Create a sparse vector (1.0, 0.0, 3.0) by specifying its indices and values corresponding to nonzero entries.
//根据索引数组和值数据组创建稀疏向量
val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))
// Create a sparse vector (1.0, 0.0, 3.0) by specifying its nonzero entries.
//直接根据实体创建稀疏向量
val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0)))

注意: scala默认引用的scala.collection.immutable.Vector,所以要显示的引用org.apache.spark.mllib.linalg.Vector,确保使用是MLlib的 Vector

原文地址:https://www.cnblogs.com/liuys635/p/12209935.html

时间: 2024-12-16 01:43:32

spark-mllib 密集向量和稀疏向量的相关文章

Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”. l“机器学习是对能通过经验自动改进的计算机算法的研究”. l“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准.” 一种经常引用的英文定义是:A computer program is said

Spark机器学习中ml和mllib中矩阵、向量

1:Spark ML与Spark MLLIB区别? Spark MLlib是面向RDD数据抽象的编程工具类库,现在已经逐渐不再被Spark团队支持,逐渐转向Spark ML库,Spark ML是面向DataFrame编程的. 2:Spark ML与Spark MLLIB中矩阵.向量定义区别? 这两个类库中的矩阵与向量对比可以发现几乎都是一样的,就是为了以后维护Spark ML方便. 3:Spark ML中稀疏向量与稠密向量区别? 稠密向量存储:底层存储使用完成的Double Array存储. 稀

Spark MLlib 之 Vector向量深入浅出

Spark MLlib里面提供了几种基本的数据类型,虽然大部分在调包的时候用不到,但是在自己写算法的时候,还是很需要了解的.MLlib支持单机版本的local vectors向量和martix矩阵,也支持集群版本的matrix矩阵.他们背后使用的都是ScalaNLP中的Breeze. 更多内容参考我的大数据学习之路 Local Vector local vector是一种索引是0开始的整数.内容为double类型,存储在单机上的向量.MLlib支持两种矩阵,dense密集型和sparse稀疏型.

Spark MLlib数据类型

MLlib支持几种数据类型:本地向量(local vectors),和存储在本地或者基于RDD的分布式矩阵(matrices).底层的线性代数转换操作是基于Breeze和jblas实现的.在MLlib中有监督学习算法使用的训练样本数据类型被称为"带标签的点(labeled point)". 一.本地向量(Local Vector) 一个本地向量是由从0开始的整型下标和double型数值组成的,存储在单机节点上.MLlib支持两种类型的本地向量:密集(dense)的和稀疏(sparse)

spark MLlib之零 构建通用的解析矩阵程序

在使用spark MLlib时,有时候需要使用到一些基础的矩阵(向量),例如:全零矩阵,全一矩阵:以及矩阵之间的运算操作.这里整理了一些常用的矩阵操作方法: 矩阵: package utils import java.util.Random /** * 密集矩阵,用于封装模型参数 */ class DenseMatrix(rowNum: Int, columnNum: Int) extends Serializable{ var matrix = Array.ofDim[Double](rowN

Spark MLlib Logistic Regression逻辑回归算法

1.1 逻辑回归算法 1.1.1 基础理论 logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,即先把特征线性求和,然后使用函数g(z)将最为假设函数来预测.g(z)可以将连续值映射到0和1上. 它与线性回归的不同点在于:为了将线性回归输出的很大范围的数,例如从负无穷到正无穷,压缩到0和1之间,这样的输出值表达为"可能性"才能说服广大民众.当然了,把大值压缩到这个范围还有个很好的好处,就是可以消除特别冒尖的变量的影响. Logistic函数(或称为Sigm

spark 类标签的稀疏 特征向量

本地向量和矩阵 本地向量(Local Vector)存储在单台机器上,索引采用0开始的整型表示,值采用Double类型的值表示.Spark MLlib中支持两种类型的矩阵,分别是密度向量(Dense Vector)和稀疏向量(Spasre Vector),密度向量会存储所有的值包括零值,而稀疏向量存储的是索引位置及值,不存储零值,在数据量比较大时,稀疏向量才能体现它的优势和价值.下面给出其应用示例: import org.apache.spark.mllib.linalg.{Vector, Ve

14.spark mllib之快速入门

简介 ??MLlib是Spark提供提供机器学习的库,专为在集群上并行运行的情况而设计.MLlib包含很多机器学习算法,可在Spark支持的所有编程语言中使用. ??MLlib设计理念是将数据以RDD的形式表示,然后在分布式数据集上调用各种算法.其实,MLlib就是RDD上一系列可供调用的函数的集合. 数据类型 ??MLlib包含一些特有的数据类型,位于org.apache.spark.mllib包(Java/Scala)或pyspark.mllib(Python)中.主要的几个类有: Vect

Spark MLlib Vector

首先不能忘记: import org.apache.spark.mllib.linalg.{Vectors,Vector} 供测试数据: val Ar = ( for(i <- 1 to 10 ) yield (i+1)*(i+4).toDouble ).toArray 一:稠密向量的声明方法有两种: <一>:   def  dense(values: Array[Double]): Vector                       Creates a dense vector