spark mllib 密集向量和稀疏向量

2022-06-01 10:18:12 字數 1647 閱讀 1793

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.

// 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

spark mllib 密集向量和稀疏向量

mllib支援區域性向量和矩陣儲存在單台伺服器,也支援儲存於乙個或者多個rdd的分布式矩陣 區域性向量和區域性矩陣是用作公共介面的最簡單的資料模型。基本的線性代數運算由breeze提供。在監督學習中使用的訓練示例在mllib中稱為 標記點 因此,向量和 矩陣,標記點是 spark mllib基本的資...

spark 密集向量和稀疏向量

1 概念 稀疏向量和密集向量都是向量的表示方法 密集向量和稀疏向量的區別 密集向量的值就是乙個普通的double陣列 而稀疏向量由兩個並列的 陣列indices和values組成 例如 向量 1.0,0.0,1.0,3.0 用密集格式表示為 1.0,0.0,1.0,3.0 用稀疏格式表示為 4,0,...

計算密集型和IO密集型

什麼是計算密集型 計算密集型就是計算 邏輯判斷量非常大而且集中的型別,因為主要占用cpu資源所以又叫cpu密集型,而且當計算任務數等於cpu核心數的時候,是cpu執行效率最高的時候。特點 消耗cpu 什麼是io密集型 io密集型就是磁碟的讀取資料和輸出資料非常大的時候就是屬於io密集型 由於io操作...