標注點(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(3, Array(0, 2), Array(2.0, 8.0)))
neg: org.apache.spark.mllib.regression.LabeledPoint = (0.0,(3,[0,2],[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,其使用非常方便。

 1 scala> import org.apache.spark.mllib.util.MLUtils
 2 import org.apache.spark.mllib.util.MLUtils
 3  
 4 // 用loadLibSVMFile方法讀入LIBSVM格式數據
 5 // sample_libsvm_data.txt為spark自帶的一個示例,在以下地址可以找到:
 6 // $SPARK_HOME$/data/mllib/sample_libsvm_data.txt
 7 scala> val examples = MLUtils.loadLibSVMFile(sc, "/data/mllib/sample_libsvm_data.txt")
 8 //返回的是組織成RDD的一系列LabeledPoint
 9 examples: org.apache.spark.rdd.RDD[org.apache.spark.mllib.regression.LabeledPoint] = MapPartitionsRDD[6] at map at MLUtils.scala:108
10  

 

這里,sc是Spark-shell自動建立的SparkContext。我們可以查看下加載進來的標注點的值:

1 scala> examples.collect().head
2 res7: org.apache.spark.mllib.regression.LabeledPoint = (0.0,(692,[127,128,129,130,131,154,155,156,157,158,159,181,182,183,184,185,186,187,188,189,207,208,209,210,211,212,213,214,215,216,217,235,236,237,238,239,240,241,242,243,244,245,262,263,264,265,266,267,268,269,270,271,272,273,289,290,291,292,293,294,295,296,297,300,301,302,316,317,318,319,320,321,328,329,330,343,344,345,346,347,348,349,356,357,358,371,372,373,374,384,385,386,399,400,401,412,413,414,426,427,428,429,440,441,442,454,455,456,457,466,467,468,469,470,482,483,484,493,494,495,496,497,510,511,512,520,521,522,523,538,539,540,547,548,549,550,566,567,568,569,570,571,572,573,574,575,576,577,578,594,595,596,597,598,599,600,601,602,603,604,622,623,624,625,626,627,628,629,630,651,652,653,654,655,656,657],[51.0,159.0,253.0,159.0,50...

 

這里,examples.collect()把rdd轉換為了向量,並取第一個元素的值。每個標注點共有692個維,其中第127列對應的值是51.0,第128列對應的值是159.0,依此類推。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM