Spark Mllib里的向量标签概念、构成(图文详解)

  不多说,直接上干货!

Labeled point: 向量标签

   向量标签用于对Spark Mllib中机器学习算法的不同值做标记。

   例如分类问题中,可以将不同的数据集分成若干份,以整数0、1、2,....进行标记,即我们程序开发者可以根据自己业务需要对数据进行标记。

  

  向量标签和向量是一起的,简单来说,可以理解为一个向量对应的一个特殊值,这个值的具体内容可以由用户指定,比如你开发了一个算法A,这个算法对每个向量处理之后会得出一个特殊的标记值p,你就可以把p作为向量标签。同样的,更为直观的话,你可以把向量标签作为行索引,从而用多个本地向量构成一个矩阵(当然,MLlib中已经实现了多种矩阵)。

    LabeledPoint是建立向量标签的静态类

    features用于显示打印标记点所代表的数据内容。

    label用于显示标记数。

testLabeledPoint.scala

复制代码
package zhouls.bigdata.chapter4


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

object testLabeledPoint {
  def main(args: Array[String]) {
    val vd: Vector =  Vectors.dense(2, 0, 6)                         //建立密集向量
    val pos = LabeledPoint(1, vd)                                    //对密集向量建立标记点
    println(pos.features)                                            //打印标记点内容数据
    println(pos.label)                                               //打印既定标记
    val vs: Vector = Vectors.sparse(4, Array(0,1,2,3), Array(9,5,2,7))      //建立稀疏向量
    val neg = LabeledPoint(2, vs)                                    //对密集向量建立标记点
    println(neg.features)                                            //打印标记点内容数据
    println(neg.label)                                               //打印既定标记
  }
}
复制代码

   注意:

 val pos = LabeledPoint(1, vd)  
 val neg = LabeledPoint(2, vs)
 
  除了这两种建立向量标签。还可以从数据库中获取固定格式的数据集方法。


  数据格式如下:
label   index1:value1   index2:value2

label是此数据集中每一行给定的标签,而后的index是标签所标注的这一行的不同的索引值,而紧跟在各自index后的value是不同索引所形成的数据值






testLabeledPoint2.scala
复制代码
package zhouls.bigdata.chapter4


import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark._
import org.apache.spark.mllib.util.MLUtils

object testLabeledPoint2 {
  def main(args: Array[String]) {
    val conf = new SparkConf().setMaster("local").setAppName("testLabeledPoint2")//建立本地环境变量    
    val sc = new SparkContext(conf)                                 //建立Spark处理

    val mu = MLUtils.loadLibSVMFile(sc, "data/input/chapter4/loadLibSVMFile.txt")                    //读取文件
    mu.foreach(println)                                             //打印内容
    }                               
}
复制代码
  
  以下是数据




  输出结果是

(1.0,(3,[0,1,2],[2.0,3.0,4.0]))
(2.0,(3,[0,1,2],[1.0,2.0,3.0]))
(1.0,(3,[0,1,2],[1.0,3.0,3.0]))
(1.0,(3,[0,1,2],[3.0,1.0,3.0]))


 

  具体,见

Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mllib数理统计

原文地址:https://www.cnblogs.com/zlslch/p/7469349.html