多类分类,在scala和spark中更好地显示原始预测

utugiqy6  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(303)

使用iris数据集(logisticregressionwithlbfgs(),多类分类)。我把数据拉入rdd,转换成Dataframe,整理一下。在iris plant class/label字段上创建了labelindex。创建了其他字段的特征向量。获取dataframe的这两个字段,并将其转换为labelpoint 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)
...

这是什么意思?不知道如何读取/解释第一行的数据,是不是说,它预测的是“2.0”,而实际的标签是“2.0”?我理解得对吗?

qcbq4gxm

qcbq4gxm1#

是的,当您将Map应用到输入数据集并对每个元素进行预测时,您拥有的是rdd[(double,double)]形式的(标签,预测)。但是,您使用的是mlib lr实现。您可以直接使用dataframe实现。看看这个例子。fit函数优化模型并返回logisticragressionmodel。将transform方法应用于输入Dataframe,将添加一个带有预测的新列。

相关问题