我的数据有分类变量(响应和一些特征变量)。
如何在将分类变量转换为二进制功能后将其转换为libsvm
格式?
答案 0 :(得分:0)
如果您的数据是RDD,您可以调用方法:saveAsLibSVMFile(rdd, path)
它是apache.spark.mllib.util.MLUtils
包的一部分。
有关官方文档,请参阅:https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.mllib.util.MLUtils $
这是一个scala示例,假设您已将分类数据转换为二进制功能:(您也可以在python或java中执行相同操作)
val responseData=sc.textFile("response.txt")
val responseValue = responseData.map(line => line.trim().split(" ").map(_.toDouble))
val featuresData=sc.textFile("features.txt")
val featuresValue = featuresData.map(line => {
val featureInt = line.trim().toInt
})
val data = featuresValue.zip(featuresData).map(
line => LabeledPoint(line._1, Vectors.dense(line._2))
)
saveAsLibSVMFile(data, "data.libsvm")
如果你想要PySpark版本,还没有测试过这个,比如:
from pyspark.mllib.linalg import SparseVector
from pyspark.mllib.regression import LabeledPoint
responseData=sc.textFile("response.txt")
responseValue = responseData.map(lambda line: map(lambda x: Decimal(x), line.strip().split(" ")))
# for clarity you can also extract the lambda into a function
featuresData=sc.textFile("features.txt")
featuresValue = featuresData.map(lambda line: Int(line.strip()))
mtx = zip(featuresValue.collect(),featuresData.collect())
data = map(lambda line: LabeledPoint(line[0], Vectors.sparse(line[1]), mtx))
saveAsLibSVMFile(data, "data.libsvm")