如何将具有多类的 LibSVM 文件转换为 RDD [labelPoint]

Posted

技术标签:

【中文标题】如何将具有多类的 LibSVM 文件转换为 RDD [labelPoint]【英文标题】:how to convert LibSVM file with multi classes into an RDD[labelPoint] 【发布时间】:2014-12-05 15:16:32 【问题描述】:

使用 org.apache.spark.mllib.util.MLUtils 包中的以下方法,将 LIBSVM 格式的二进制标记数据加载到 RDD[LabeledPoint] 中,自动确定特征数和默认分区数。

def loadLibSVMFile(sc: SparkContext, path: String): RDD[LabeledPoint]

我的问题是加载具有多类标签的数据? 在多类标记数据上使用此方法时……它正在转换为二进制标记数据…… 有没有办法将 LibSVM 格式的多类数据加载到 RDD[LabeledPoint]...??

同一个包中还有另外一种方法,描述如下

将 LIBSVM 格式的标签数据加载到 RDD[LabeledPoint] 中,默认分区数。

def loadLibSVMFile(sc: SparkContext, path: String, numFeatures: Int): RDD[LabeledPoint]

但是当我尝试使用它时,会出现错误显示“found Int ,requires Boolean”

【问题讨论】:

【参考方案1】:

您使用的是什么版本的 Spark?我刚刚使用了这个文件 http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/glass.scale

Spark 1.1 和以下代码:

val lbldRDD = MLUtils.loadLibSVMFile(sc,svmFile)
lbldRDD.map(_.label).collect().toSet.map(println)

我看到了输出:

5.0 1.0 6.0 2.0 7.0 3.0

这对我来说似乎是正确的

【讨论】:

以上是关于如何将具有多类的 LibSVM 文件转换为 RDD [labelPoint]的主要内容,如果未能解决你的问题,请参考以下文章

多类 SVM。二元决策树。 LIBSVM 的问题

如何使用 python 和 pandas 将 Csv 文件转换为 libsvm?

Spark:如何将具有多列的 RDD 转换为数据框

如何使用 libsvm 库(Matlab)实现 1 对 1 多类分类?

如何使用 libsvm 计算多类预测的概率?

使用 python 将 CSV 文件转换为 LIBSVM 兼容的数据文件