Spark MLlib数据结构—Vector和Matrix

Spark MLlib数据结构—Vector和Matrix

MLlib支持存储在单台机器上的局部向量和矩阵,以及由一个或多个RDD支持的分布式矩阵。局部向量和局部矩阵是作为公共接口的简单数据模型。Breeze提供了基础的线性代数运算。监督学习中使用的训练示例在MLlib中称为“Labeled point”。

local vector

local vector是一种索引是0开始的整数、内容为double类型,存储在单机上的向量。MLlib支持两种Vector,dense密集型和sparse稀疏型。

  1. 一个dense类型的向量背后其实就是一个数组
  2. sparse向量背后则是两个并行数组——索引数组和值数组。比如向量(1.0, 0.0, 3.0)既可以用密集型向量表示为[1.0, 0.0, 3.0],也可以用稀疏型向量表示为(3, [0,2],[1.0,3.0]),其中3是数组的大小。

Vector 的基类是Vector,有两种实现一种是DenseVector,一种是SparseVector,这里我们推荐使用Vectors里面实现的工厂方法去创建vector

// 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 ,但是如果你想要使用spark 的 vector必须要显式导入org.apache.spark.mllib.linalg.Vector

Labeled point

Labeled point 带有标签的本地向量,可以是密集的或稀疏的。在MLlib中,Labeled point用于监督学习算法。我们使用double类型来存储标签,因此我们可以在回归和分类中使用标记点。对于二元分类,标签应为0(负)或1(正)。对于多类分类,标签应该是从零开始的类索引:0、1、2,

LabeledPoint 本质上是一个case class

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint

// Create a labeled point with a positive label and a dense feature vector.
val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0))

// Create a labeled point with a negative label and a sparse feature vector.
val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)))

在实践中,训练数据稀疏是很常见的。MLlib支持读取以LIBSVM格式存储的训练示例,这是LIBSVM和LIBLINEAR使用的默认格式。它是一种文本格式,其中每一行都使用以下格式表示一个标记的稀疏特征向量:

label index1:value1 index2:value2 ...

其中下表是以1为基础并按升序排列的。加载后,特征索引从零开始转换。

MLUtils.loadLibSVMFile 可以读取LIBSVM格式的文件

import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.rdd.RDD

val examples: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")

Local matrix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值