多类分类,使用 Spark 在 Scala 中更好地显示原始预测

Multiclass classification, show raw predictions better in Scala with Spark

使用 Iris 数据集(LogisticRegressionWithLBFGS(),多类分类)。 我将我的数据提取到一个 rdd 中,转换为一个 Dataframe,并对其进行了一些整理。在 Iris plant class/label 字段上创建了标签索引。创建了其他字段的特征向量。 获取数据帧的这两个字段并转换为标签点 rdd 实例,我可以在其中将数据输入 LogisticRegressionWithLBFGS()。

这是一些预测代码:

val model = new LogisticRegressionWithLBFGS()
  .setNumClasses(10)
  .setIntercept(true)
  .setValidateData(true)
  .run(training)

分数和标签:

val scoreAndLabels_ofTrain = training.map {
  point =>
    val score = model.predict(point.features)
    (score, point.label)
}

我想看预测

scoreAndLabels_ofTrain.take(200).foreach(println)

唯一的问题是,我几乎从一本书中得到了这个例子。 我很希望看到一个数据集,它显示了特征列、预测数字是多少、它给出的概率分数等等 如果我想查看它们代表的字符串数据,我想我需要对 labelindex 进行转换。

如何获得更美观、尽可能接近原始数据集的表格数据,并对其进行预测? 我想我在某个地方漏掉了一个把戏。

上面的输出如下:

(2.0,2.0)
(2.0,2.0)
(2.0,2.0)
(2.0,2.0)
(2.0,2.0)
...

这到底是什么意思?不确定如何 read/interpret 数据 对于第一行,它是说,它预测“2.0”,而实际标签是“2.0”? 我理解的对吗?

是的,当您将地图应用于输入数据集并使每个元素的预测。但是,您正在使用 mlib LR 实现。您可以直接使用 Dataframe 实现。看看 example. The fit function optimizes the model and return a LogisticRagressionModel。将转换方法应用于您的输入 Dataframe,将添加一个包含预测的新列。