标注点(Labeled Point)

标注点(Labeled Point),第1张

标注点(Labeled Point)

标注点LabeledPoint是一种带有标签(Label/Response)的本地向量,它可以是稠密或者是稀疏的。


在MLlib中,标注点在监督学习算法中被使用。


由于标签是用双精度浮点型来存储的,故标注点类型在回归(Regression)分类(Classification)问题上均可使用。


例如,对于二分类问题,则正样本的标签为1负样本的标签为0,而对于多类别的分类问题来说,标签则应是一个以0开始的索引序列:0, 1, 2 ...

标注点的实现类是org.apache.spark.mllib.regression.LabeledPoint,请注意它与前面介绍的本地向量不同,并不位于linalg包下,标注点的创建如下所示:

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
//创建一个标签为1.0(分类中可视为正样本)的稠密向量标注点
scala> val pos = LabeledPoint(1.0, Vectors.dense(2.0, 0.0, 8.0))
pos: org.apache.spark.mllib.regression.LabeledPoint = (1.0,[2.0,0.0,8.0])
//创建一个标签为0.0(分类中可视为负样本)的稀疏向量标注点
scala> val neg = LabeledPoint(0.0, Vectors.sparse(, Array(, ), Array(2.0, 8.0)))
neg: org.apache.spark.mllib.regression.LabeledPoint = (0.0,(,[,],[2.0,8.0]))

在实际的机器学习问题中,稀疏向量数据是非常常见的,MLlib提供了读取LIBSVM格式数据的支持,该格式被广泛用于LIBSVMLIBLINEAR等机器学习库。


在该格式下,每一个带标注的样本点由以下格式表示:

label index1:value1 index2:value2 index3:value3 ...

其中label是该样本点的标签值,一系列index:value对则代表了该样本向量中所有非零元素的索引和元素值。


这里需要特别注意的是,index是以1开始并递增的。



MLlib在org.apache.spark.mllib.util.MLUtils工具类中提供了读取LIBSVM格式的方法loadLibSVMFile,其使用非常方便。


 scala> import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.mllib.util.MLUtils // 用loadLibSVMFile方法读入LIBSVM格式数据
// sample_libsvm_data.txt为spark自带的一个示例,在以下地址可以找到:
// $SPARK_HOME$/data/mllib/sample_libsvm_data.txt
scala> val examples = MLUtils.loadLibSVMFile(sc, "/data/mllib/sample_libsvm_data.txt")
//返回的是组织成RDD的一系列LabeledPoint
examples: org.apache.spark.rdd.RDD[org.apache.spark.mllib.regression.LabeledPoint] = MapPartitionsRDD[] at map at MLUtils.scala:

这里,sc是Spark-shell自动建立的SparkContext


我们可以查看下加载进来的标注点的值:

 scala> examples.collect().head
res7: org.apache.spark.mllib.regression.LabeledPoint = (0.0,(,[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[51.0,159.0,253.0,159.0,...

这里,examples.collect()把rdd转换为了向量,并取第一个元素的值。


每个标注点共有692个维,其中第127列对应的值是51.0,第128列对应的值是159.0,依此类推。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/588761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存