1. Local vector 本地向量
本地向量拥有长整型的integer-based,基于0指标的0-based,双精度double的值,存储在一台单独的本地机器上。MLlib支持两种类型的局部变量:稠密的dense和稀疏的sparse。
1.1 dense vector稠密向量
稠密向量是由双精度的数组支持,比如,(1.0,0.0,3.0),稠密向量显示为[1.0,0.0,3.0]
//导入向量包
import org.apache.spark.mllib.linalg.{Vector, Vectors}
// 创建一个稠密向量(1.0, 0.0, 3.0).
val dv: Vector = Vectors.dense(1.0, 0.0, 3.0)
//打印稠密变量的第3个值
println(dv(2))
1.2 sparse vector稀疏向量
稀疏变量是由两个平行的数组支持:由指标indices与值value组成.
比如,向量(1.0,0.0,3.0),稀疏向量表示为[3,[0,2],[1.0,3.0]]。3为向量的大小,[0,2]为向量的下标,[1.0,3.0]为向量的值。这表示下标为0的向量值为1,下标为2的向量值为3,没有表示出来的是下标为1的向量,默认为0.
另一种创建稀疏向量方法是(3, Seq((0, 1.0), (2, 3.0))),3仍然表示向量的大小,Seq((0, 1.0), (2, 3.0))中(0, 1.0)表示下标为0的向量值为1.0,(2, 3.0)表示下标为2的向量(第三个向量)的值为3.
稀疏向量往往应用于某个值出现较多的时候。
//导入向量包
import org.apache.spark.mllib.linalg.{Vector, Vectors}
//创建一个稀疏向量 (1.0, 0.0, 3.0) 方式一:采用数组方式
val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))
// 创建一个稀疏向量 (1.0, 0.0, 3.0) 方式二:采用序列方式
val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0)))
//打印稀疏变量的第3个值
println(sv1(2))
注:Scala imports scala.collection.immutable.Vector by default, so you have to import org.apache.spark.mllib.linalg.Vector explicitly to use MLlib’s Vector.
scala会默认输入不可变向量的包,所以在建立MLlib的向量之前要先输入rg.apache.spark.mllib.linalg.Vector包
2. Labled Point 标签向量
labled point相当于预测中的目标变量或应变量,在training中是给出样本的目标值,在test中是需要被预测的目标值。
labled point也是一个本地向量,常被适用于监督学习算法中。我们用双精度类型去存储label,所以labeled point可以被用于回归(连续型变量)和分类(类别型变量)中。对于二元分类,label可以是0(负)或是1(正);对于多元分类,label需是从0开始的一串类别指标(0,1,2…)
//导入包:可变向量包&#x