多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
向量标签是一个本地向量,就是在密集向量,或者稀疏向量的基础上,添加一个标签。 <br/> <mark>标签向量用于监督学习中</mark>,使用 double 存储一个标签,所以标签数据可以用于回归,或者分类。对于二分类,一个标签应该要么是 0 要么是 1。对于多分类,标签应该是从零开始的索引:`0,1,2,3,4`。 <br/> **1. 通过Scala数据类型创建向量标签** ```scala import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.linalg.Vectors object LabelVector { def main(args: Array[String]): Unit = { // 创建一个密集向量,向量标签为1.0 // case class LabeledPoint(val label : scala.Double, val features : org.apache.spark.mllib.linalg.Vector) val pos: LabeledPoint = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0)) println(pos) // (1.0,[1.0,0.0,3.0]) // 创建一个稀疏向量,向量标签为0.0 val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))) println(neg) // (0.0,(3,[0,2],[1.0,3.0])) println(neg.label) // 0.0 println(neg.features) // (3,[0,2],[1.0,3.0]) } } ``` <br/> **2. 通过libsvm格式数据创建向量标签** 在实际生产中训练数据是稀疏数据很常见。Mllib 支持以 libsvm 格式存储的稀疏矩阵,这是一个 `.txt` 格式文件,其中<mark>每一行代表一个打标签的稀疏特征向量</mark>,格式如下: ```txt label index1:value1 index2:value2 ... ``` 其中,索引是从 1 开始的,递增的顺序。加载之后,特征索引就转化为了从0 开始的。 <br/> (1)数据`sample_libsvm_data.txt` ```scala 0 128:51 129:159 130:253 131:159 ... 1 159:124 160:253 161:255 162:63 ... ... ``` (2)读取`.txt`文件创建向量标签 ```scala import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.util.MLUtils import org.apache.spark.rdd.RDD object LabelVectorLibSvm { def main(args: Array[String]): Unit = { val conf: SparkConf = new SparkConf().setMaster("local[*]") .setAppName(this.getClass.getName) val sc = SparkContext.getOrCreate(conf) // def loadLibSVMFile(sc : org.apache.spark.SparkContext, path : scala.Predef.String // , numFeatures : scala.Int, minPartitions : scala.Int) val examples: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "F:/mlib/sample_libsvm_data.txt") examples.foreach(println) // (0.0,(692,[127,128,129,130,...], [51.0,159.0,253.0,159.0,...])) // (1.0,(692,[158,159,160,161,...], [124.0,253.0,255.0,63.0,...])) } } ```