MLlib-Basics (I)

来源:互联网 发布:javascript用vs6.0编写 编辑:程序博客网 时间:2024/06/06 02:57

  MLlib-Basics

1 Local vector 本地向量

       一个本地向量可以是integer型和double型的值,存储在单机上。MLlib支持两种类型的本地向量即dense和sparse型。两者之从表达形式上不同,例如:

一个向量(1.0,0.0,3.0) in dense format [1.0,0.0,3.0] ,in sparse format (3,[0,2][1.0,3.0]),其中3是这个向量的大小。

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

// Create a dense vector (1.0, 0.0, 3.0).
scala> val dv:Vector=Vectors.dense(1.0,0.0,3.0)
dv: org.apache.spark.mllib.linalg.Vector = [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.
scala> val sv1:Vector=Vectors.sparse(3,Array(0,2),Array(1.0,3.0))
sv1: org.apache.spark.mllib.linalg.Vector = (3,[(0,1.0),(2,3.0)])
// Create a sparse vector (1.0, 0.0, 3.0) by specifying its nonzero entries.
scala> val sv2:Vector=Vectors.sparse(3,Seq((0,1.0),(2,3.0)))
sv2: org.apache.spark.mllib.linalg.Vector = (3,[(0,1.0),(2,3.0)])

 注释:

 scala会自动importsscala.collection.immutable.Vector,所以你必须显示的importorg.apache.spark.mllib.linalg.Vector

2 Labeled point 标记点

      一个标记点就是一个带有标签或者反应的本地向量,可以是dense也可以是sparse,在MLlib,标记点经常在监督性学习算法中使用,我们用double来存一个标记,所以

我们可以在回归和分类中用标记的点。例如,在二分法中,标记应该是0(负)或者1(正);在多类的分类中,标记应该从0开始,0,1,2,.....    

scala> import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.linalg.Vectors

scala> import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.regression.LabeledPoint

// Create a labeled point with a positive label and a dense feature vector.
scala> val pos=LabeledPoint(1.0,Vectors.dense(1.0,0.0,3.0))
pos: org.apache.spark.mllib.regression.LabeledPoint = LabeledPoint(1.0, [1.0,0.0,3.0])
// Create a labeled point with a negative label and a sparse feature vector.
scala> val neg=LabeledPoint(0.0,Vectors.sparse(3,Array(0,2),Array(1.0,3.0)))
neg: org.apache.spark.mllib.regression.LabeledPoint = LabeledPoint(0.0, (3,[(0,1.0),(2,3.0)]))

   
Sparse data 稀疏数据

     现实中我们经常用到稀疏的训练数据。MLlib支持读取以LIBSVM格式的训练例子。这些数据缺省情况下是LIBSVM ,LIBLINEAR格式。如果是text格式,则每一行代表一个

标记的稀疏特征向量,以一下格式:

label index1:value1 index2:value2 ...例子:
import org.apache.spark.mllib.regression.LabeledPointimport org.apache.spark.mllib.util.MLUtilsimport org.apache.spark.rdd.RDDval training: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "mllib/data/sample_svm_data.txt") //出错,好像是文件split两个



                                     

0 0
原创粉丝点击