具有分类变量的Spark决策树

时间:2016-05-16 06:11:46

标签: apache-spark bigdata

我的数据有分类变量(响应和一些特征变量)。

如何在将分类变量转换为二进制功能后将其转换为libsvm格式?

1 个答案:

答案 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")
相关问题