用 List<Double> 预测

Posted

技术标签:

【中文标题】用 List<Double> 预测【英文标题】:Predict with a List<Double> 【发布时间】:2017-11-04 22:56:24 【问题描述】:

我有一个来自 libsvm 文件的训练有素的 RandomForestModel 对象,现在想使用该模型调用 predict 方法,并使用 List&lt;Double&gt; 作为特征。如何将List&lt;Double&gt; 转换为 Java 中的必要输入并查看预测的目标类?

据我所知,predict(...) 接受JavaRDD&lt;Vector&gt;,但我不确定如何将List&lt;Double&gt; 转换为那个。

【问题讨论】:

我假设我应该使用的是spark.apache.org/docs/2.2.0/api/java/org/apache/spark/mllib/… 我建议你阅读JavaRDD类的文档。 【参考方案1】:

通过浏览docs,看起来RandomForestModel 也可以在Vector 上调用predict。您可以将List&lt;Double&gt; 转换为DenseVector (docs),方法是将列表转换为double 数组,如this 问题,然后执行new DenseVector(double_array)

【讨论】:

在看到这个之前,我最终做了 Vector dv = Vectors.dense(Doubles.toArray(myListOfDoubles)),其中 Doubles.toArray 来自 Guava【参考方案2】:

根据数据的稀疏性,您可以使用 SparseVector 或 DenseVector 编写从 List 到 Vector 的 map 转换

int length = yourList.size();
double[] inputArray = new double[length];
yourList.toArray(inputArray);
Vector inputVector = new DenseVector(inputArray);

【讨论】:

以上是关于用 List<Double> 预测的主要内容,如果未能解决你的问题,请参考以下文章

如何使用在 Swift 中返回 MultiArray(Double) 的模型进行预测

带你了解3类预训练语音模型预测方法

如何使用libsvm进行回归预测

如何使用libsvm进行回归预测

predict.lm() 循环。警告:来自秩不足拟合的预测可能具有误导性

学完编译原理这门课,用c语言或者c++语言,编一个预测分析的程序,对预测分析也至少测试三个句子(含错误