Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 支持向量机预测阅读数据测试_Java_Svm - Fatal编程技术网

Java 支持向量机预测阅读数据测试

Java 支持向量机预测阅读数据测试,java,svm,Java,Svm,我在实现svm\u predict函数时遇到了一个很大的问题。我已经训练了svm,并准备了数据测试。这两个文件都在.txt中file.Datatest来自LBP(本地二进制模式),看起来像: -0.6448744548418511 -0.7862774302452588 1.7746263060948377 我正在将其加载到svm\u predict函数中,编译程序后,在我的控制台上有: 准确度=0.0%(0/800)(分类) 所以看起来它不能读取数据测试 import libsvm.*; i

我在实现
svm\u predict
函数时遇到了一个很大的问题。我已经训练了svm,并准备了数据测试。这两个文件都在
.txt
file.Datatest
来自LBP(本地二进制模式),看起来像:

-0.6448744548418511

-0.7862774302452588

1.7746263060948377


我正在将其加载到
svm\u predict
函数中,编译程序后,在我的控制台上有:

准确度=0.0%(0/800)(分类)

所以看起来它不能读取数据测试

import libsvm.*;
import java.io.*;
import java.util.*;

class svm_predict {
    private static double atof(String s)
    {
        return Double.valueOf(s).doubleValue();
    }

    private static int atoi(String s)
    {
        return Integer.parseInt(s);
    }

    private static void predict(BufferedReader input, DataOutputStream output, svm_model model, int predict_probability) throws IOException
    {
        int correct = 0;
        int total = 0;
        double error = 0;
        double sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;

        int svm_type=svm.svm_get_svm_type(model);
        int nr_class=svm.svm_get_nr_class(model);
        double[] prob_estimates=null;

        if(predict_probability == 1)
        {
            if(svm_type == svm_parameter.EPSILON_SVR ||
               svm_type == svm_parameter.NU_SVR)
            {
                System.out.print("Prob. model for test data: target value = predicted value + z,\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma="+svm.svm_get_svr_probability(model)+"\n");
            }
            else
            {
                int[] labels=new int[nr_class];
                svm.svm_get_labels(model,labels);
                prob_estimates = new double[nr_class];
                output.writeBytes("labels");
                for(int j=0;j<nr_class;j++)
                    output.writeBytes(" "+labels[j]);
                output.writeBytes("\n");
            }
        }
        while(true)
        {
            String line = input.readLine();
            if(line == null) break;

            StringTokenizer st = new StringTokenizer(line," \t\n\r\f:");

            double target = atof(st.nextToken());
            int m = st.countTokens()/2;
            svm_node[] x = new svm_node[m];
            for(int j=0;j<m;j++)
            {
                x[j] = new svm_node();
                x[j].index = atoi(st.nextToken());
                x[j].value = atof(st.nextToken());
            }

            double v;
            if (predict_probability==1 && (svm_type==svm_parameter.C_SVC || svm_type==svm_parameter.NU_SVC))
            {
                v = svm.svm_predict_probability(model,x,prob_estimates);
                output.writeBytes(v+" ");
                for(int j=0;j<nr_class;j++)
                    output.writeBytes(prob_estimates[j]+" ");
                output.writeBytes("\n");
            }
            else
            {
                v = svm.svm_predict(model,x);
                output.writeBytes(v+"\n");
            }

            if(v == target)
                ++correct;
            error += (v-target)*(v-target);
            sumv += v;
            sumy += target;
            sumvv += v*v;
            sumyy += target*target;
            sumvy += v*target;
            ++total;
        }
        if(svm_type == svm_parameter.EPSILON_SVR ||
           svm_type == svm_parameter.NU_SVR)
        {
            System.out.print("Mean squared error = "+error/total+" (regression)\n");
            System.out.print("Squared correlation coefficient = "+
                 ((total*sumvy-sumv*sumy)*(total*sumvy-sumv*sumy))/
                 ((total*sumvv-sumv*sumv)*(total*sumyy-sumy*sumy))+
                 " (regression)\n");
        }
        else
            System.out.print("Accuracy = "+(double)correct/total*100+
                 "% ("+correct+"/"+total+") (classification)\n");
    }

    private static void exit_with_help()
    {
        System.err.print("usage: svm_predict [options] test_file model_file output_file\n"
        +"options:\n"
        +"-b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); one-class SVM not supported yet\n");
        System.exit(1);
    }

    public static void main(String argv[]) throws IOException
    {
        int i, predict_probability=0;

        // parse options
        for(i=0;i<argv.length;i++)
        {
            if(argv[i].charAt(0) != '-') break;
            ++i;
            switch(argv[i-1].charAt(1))
            {
                case 'b':
                    predict_probability = atoi(argv[i]);
                    break;
                default:
                    System.err.print("Unknown option: " + argv[i-1] + "\n");
                    exit_with_help();
            }
        }
        if(i>=argv.length-2)
            exit_with_help();
        try 
        {
            BufferedReader input = new BufferedReader(new FileReader(argv[i]));
            DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(argv[i+2])));
            svm_model model = svm.svm_load_model(argv[i+1]);
            if(predict_probability == 1)
            {
                if(svm.svm_check_probability_model(model)==0)
                {
                    System.err.print("Model does not support probabiliy estimates\n");
                    System.exit(1);
                }
            }
            else
            {
                if(svm.svm_check_probability_model(model)!=0)
                {
                    System.out.print("Model supports probability estimates, but disabled in prediction.\n");
                }
            }
            predict(input,output,model,predict_probability);
            input.close();
            output.close();
        } 
        catch(FileNotFoundException e) 
        {
            exit_with_help();
        }
        catch(ArrayIndexOutOfBoundsException e) 
        {
            exit_with_help();
        }
    }
}
导入libsvm.*;
导入java.io.*;
导入java.util.*;
类svm_预测{
专用静态双atof(字符串s)
{
返回Double.valueOf(s).doubleValue();
}
私有静态int atoi(字符串s)
{
返回整数.parseInt;
}
私有静态无效预测(BufferedReader输入、DataOutputStream输出、svm_模型、int预测_概率)抛出IOException
{
int correct=0;
int-total=0;
双误差=0;
双sumv=0,sumy=0,sumvv=0,sumyy=0,sumvy=0;
int-svm_-type=svm.svm_-get_-svm_-type(模型);
int nr_class=svm.svm_get_nr_class(模型);
双[]概率估计值=空;
如果(预测概率==1)
{
如果(svm_类型==svm_参数.EPSILON_SVR||
svm_类型==svm_参数.NU_SVR)
{
System.out.print(“测试数据的概率模型:目标值=预测值+z,\nz:Laplace分布e^(-z |/sigma)/(2sigma),sigma=“+svm.svm_get_svr_概率(模型)+””\n”);
}
其他的
{
int[]标签=新的int[nr_类];
支持向量机获取标签(模型,标签);
概率估计=新的双[nr_类];
输出。写入字节(“标签”);

对于(intj=0;j很难知道,因为这是一个大过程

确保您遵循他们的分类指南


数据应该按比例缩放,现在它似乎超过了1,这很难知道,因为这是一个大过程

确保您遵循他们的分类指南


数据应该被缩放,现在它似乎超过了1

这与这些家伙提供的免费libsvm库有关吗?徐志伟、张志忠和林志仁?Ya,这是libsvm的免费实现,仍然有一些问题,因为我无法获得任何预测结果欢迎使用堆栈溢出(通常称为)!与我看到的许多帖子相比,这是一篇非常好的第一篇帖子。我确实在问题的主体中设置了函数名的格式,因为它们是代码。此外,在您将“…”作为分隔符的地方,我将标记改为“------------”,正如您所看到的,这将在帖子中显示为一行。我所做的最后一件事是设置文件名和扩展名的格式s、 有一件事我搞不清楚,那就是你是否有负数,或者要点。快乐的编码!这与这些家伙提供的免费libsvm库有关吗?徐志伟、张志忠和林志仁?是的,这是libsvm的免费实现,仍然有一些错误,因为我无法获得任何预测结果elcome到堆栈溢出(通常称为SO)!与我看到的许多帖子相比,这是一篇非常好的第一篇帖子。我确实在问题的主体中设置了函数名的格式,因为它们是代码。此外,在您将“…”作为分隔符的地方,我将标记改为“------------”,正如您所看到的,这将在帖子中显示为一行。我所做的最后一件事是设置文件名和扩展名的格式s、 有一件事我搞不清楚,那就是你是否有负数,或者要点。编码快乐!