将方法应用于浮点数数组流时出现问题?

J.Do:

我有以下Predictor类,它实现一个predict()方法:

class Predictor {

    public static int predict(double[] atts) {
        if (atts.length != 3) {
            return -1;
        }
        int i, j;

        ;

        for (i = 0; i < 2; i++) {
            double sum = 0.;
            for (j = 0; j < 3; j++) {
                sum += Math.log(2. * Math.PI * sigmas[i][j]);
            }
            double nij = -0.5 * sum;
            sum = 0.;
            for (j = 0; j < 3; j++) {
                sum += Math.pow(atts[j] - thetas[i][j], 2.) / sigmas[i][j];
            }
            nij -= 0.5 * sum;
            likelihoods[i] = Math.log(priors[i]) + nij;
        }

        double highestLikeli = Double.NEGATIVE_INFINITY;
        int classIndex = -1;
        for (i = 0; i < 2; i++) {
            if (likelihoods[i] > highestLikeli) {
                highestLikeli = likelihoods[i];
                classIndex = i;
            }
        }
        return classIndex;
    }

    public static void main(String[] args) {
        if (args.length == 3) {
            double[] atts = new double[args.length];
            for (int i = 0, l = args.length; i < l; i++) {
                atts[i] = Double.parseDouble(args[i]);
            }
            System.out.println(Predictor.predict(atts));
        }
    }
}

预测方法预测数字标签(即int number 01)。我在android应用程序内部使用它,以便为浮点数数组指定predict此类浮点数的数字标签。从外观上看,这如下所示:

arrayOfFloats -> predict_method -> Label(0/1)

请注意,arrayOfFloats是数据流(连续地,我将拥有多个该数组)。

这是代码:

public void run() { //stuff that updates ui
    finalValues = String.format("%s, %s, %s, %s, %s, %s\n", rollValue, pitchValue, yawValue, gxValue, gyValue, gzValue);
    //finalValues = String.format("%s, %s, %s\n",  rollValue, pitchValue, yawValue);

    Log.e("WalkingActivity", finalValues);

    WalkingLog.setText(finalValues);

    // Classifier
    values[0] = rollValue;
    values[1] = pitchValue;
    values[2] = yawValue;
    //values[3] = gxValue;
    //values[4] = gyValue;
    //values[5] = gzValue;

    int y_pred = Brain.predict(values);

    ClassifierLog.setText(Integer.toString(y_pred));

    System.out.println("pred: " + Integer.toString(y_pred));

    int counter = 0;

    //Simple threshold
    if (rollValue < -40 && rollValue > -80
      && pitchValue < 0 && yawValue > 0
      && gxValue < 1000 && gxValue > -2000
      && gyValue < 500 && gyValue > -1000
      && gzValue < 1000 && gzValue > -2000) {
        ClassifierLog.setText("N");                                                 
        System.out.println("COUNTER: " + counter);

    } else {
        counter++;                                         
        ClassifierLog.setText("W");                                               
        System.out.println("COUNTER: " + counter);
    }
}

上面的代码的问题在于,我总是得到相同的数字标签1(我预测为相同的数字),而不是获得不同的输出01据我了解,我需要将所有float值附加到单个数组中。尽管我尝试将此类数组传递给预测方法,但它无法正常工作。但是,它不起作用,这是使用类中predict方法的正确方法Predictor吗?,

罗伯特:

获得解决方案的最佳方法是构造并呈现一个很小的java类,该类运行并且仅包含您希望解决的问题的基本要点(包括输入)。尽管您将花费少量的精力来完成此任务,但它显然可以传达您要实现的目标。请参阅下面的示例。

我最好的猜测是,您只是想传递三个值的数组并返回单个结果。如果真是这样,那么您的第一个代码示例表明您已经正确地进行了此操作。

因此,始终返回1的问题在于Predictor代码本身的逻辑;即sigma / theta逻辑(您尚未传达其值)。但是,知道您正确输入/输出值后,就意味着您只需要调试sigma / theta逻辑即可。例如,在highestLikeli循环中的if语句之后,添加一个sysout:


    System.out.format(“%d%f%f \ n”,classIndex,highestLikeli,likelihoods [i]);

作为参考,这是一个小的Java文件,显示了传入的数组值和传出的预测变量值(这似乎是您的问题所在)。



    public class Test {

        public static void main(String[] args) {
            String params[][] = { { "3.3", "4.4", "5.5" }, { "5.5", "3.3", "4.4" }, { "4.4", "5.5", "3.3" } };
            for (int i = 0; i < params[0].length; i++) {
                System.out.format("%d: %s, %s, %s => ", i, params[i][0], params[i][1], params[i][2]);
                Predictor.main(params[i]);
            }
        }

        static class Predictor {

            // Simplistic example taking 3 values and returning the index of the largest.
            public static int predict(double[] atts) {
                double highestLikeli = Double.NEGATIVE_INFINITY;
                int classIndex = -1;
                for (int i = 0; i < atts.length; i++) {
                    if (atts[i] > highestLikeli) {
                        highestLikeli = atts[i];
                        classIndex = i;
                    }
                }
                return classIndex;
            }

            public static void main(String[] args) {
                if (args.length == 3) {
                    double[] atts = new double[args.length];
                    for (int i = 0; i&ltargs.length; i++) {
                        atts[i] = Double.parseDouble(args[i]);
                    }
                    System.out.println(Predictor.predict(atts));
                }
            }
        }
    }

结果


    0:3.3,4.4,5.5 => 2 
    1:5.5,3.3,4.4 => 0 
    2:4.4,5.5,3.3 => 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

格式化浮点数数组

在浮点数数组中找到最小值

“表达式不可分配”-在Xcode中将浮点数分配为另外两个浮点数之和时出现问题?

将浮点数数组从MATLAB发送到Arduino

numpy arange:如何使“精确”的浮点数数组?

SceneKit在将纹理应用于自定义几何体时出现问题

Python从ElasticSearch获取浮点数作为浮点数数组

在Pyspark中将UDF余弦相似度应用于分组的ML向量时出现问题

如何创建用于存储和返回浮点数数组的结构?

如何将浮点数数组转换为唯一整数数组?

使用numpy将二进制蒙版应用于RGB图像时出现问题

将函数应用于R中的列表时出现问题

dplyr出现问题(将which.min应用于数据帧列表)

Numpy将整数数组另存为浮点数组

如何将字符串列表转换为浮点数数组?

返回浮点数数组时出现错误

将筛选器应用于列表后,TextWatcher和ListView元素的位置出现问题

在将装饰器设计模式应用于JavaScript代码时出现问题

如何编写使用函数f和浮点数x并使用Swift将f应用于xk次的函数?

Bash将字符串解析为浮点数数组

从整数数组中提取浮点数

python将原始二进制数据转换为浮点数数组

将公式应用于整个列:表格中的arrayformula出现问题

如何对浮点数数组求和

当 ":invalid" 样式应用于表单控件时,表格列宽出现问题

将浮点数数组转换为 Wav 文件 Swift

pyspark UDF:将最小值、最大值应用于数据框中的浮点数列表时出错

将浮点数数组转换为复数

将函数应用于列的所有元素(字符串列表)以转换为浮点数