【问题标题】:Deeplearning on Spark pipeline: How to predict using a neural network model in a pipeline?Spark 管道上的深度学习:如何在管道中使用神经网络模型进行预测?
【发布时间】:2016-06-21 23:57:33
【问题描述】:

我正在尝试将情绪分析程序添加到 Spark 管道。这样做时,我有扩展org.apache.spark.ml.PredictionModel 的课程。当扩展这个PredictionModel 类时,我必须重写预测给定特征标签的predict() 方法。但是,当我执行此代码时,我总是得到 0 或 1。例如,如果有 10 条电影评论,其中 5 条是负面评论,另外 5 条是负面评论,它将所有评论归类为负面。我附上了下面的代码。

import org.apache.spark.ml.PredictionModel;
import org.apache.spark.ml.param.ParamMap;
import org.apache.spark.mllib.linalg.DenseVector;
import org.apache.spark.mllib.linalg.Vector;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.api.buffer.DataBuffer;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import java.io.*;

//Model produced by a ProbabilisticClassifier
public class MovieReviewClassifierModel extends PredictionModel<Object, MovieReviewClassifierModel> implements  Serializable{


    private static final long serialVersionUID = 1L;
    private MultiLayerNetwork net;

    MovieReviewClassifierModel (MultiLayerNetwork net) throws Exception {
        this.net=net;
 }

    @Override
    public MovieReviewClassifierModel copy(ParamMap args0) {
        return null;
    }

    @Override
    public String uid() {
        return "MovieReviewClassifierModel";
    }


    public double raw2prediction(Vector rawPrediction) {//Given a vector of raw predictions, select the predicted label
        return rawPrediction.toArray()[0];
    }

    @Override
    public double predict(Object o) {

        int prediction=0;
        DenseVector v=(DenseVector)o;
        double[] a=v.toArray();
        INDArray arr=Nd4j.create(a);
        INDArray array= net.output(arr,false);
        DataBuffer ob = array.data();
        double[] d=ob.asDouble();
        double zeroProbability=d[0];
        double oneProbability=d[1];
        if (zeroProbability > oneProbability) {
            prediction=0;
        }
        else{
            prediction=1;

        }


        return prediction;
    }


}

你能告诉我错误预测的原因吗?

【问题讨论】:

    标签: java apache-spark neural-network deep-learning deeplearning4j


    【解决方案1】:

    public double predict(Object o) 中有以下if 声明:

    if (zeroProbability > oneProbability) {
        prediction=0;
    }
    else{
        prediction=1;
    
    }
    

    导致返回 0 或 1。更改此方法以获得其他一些预测值。

    【讨论】:

    • 问题在于,如果我们有一个数据集,其中包含 10 条电影评论,其中 5 条是正面的,5 条是负面的,如果我们用 1 表示正面,0 表示负面,那么模型应该预测1 和 0。但它只预测所有正面评论和负面评论的 0。
    • 那么你应该引入例如 0.5 来预测 0 和 1。相应地更改 if 语句。
    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 2020-05-15
    • 2018-10-05
    • 1970-01-01
    • 2014-06-25
    • 2022-06-14
    • 1970-01-01
    • 2020-01-09
    相关资源
    最近更新 更多