SVM класификатор

252
23 июня 2017, 07:29

В обшем вот код класификатора но он постоянно выкидивает одни и теже данные.Даже кода я изменяю входные вектора

[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163] 
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0
[1 :: 0.46635818441961163]
[-1 :: 0.5336418155803884]
Prediction -1.0

вот код

   package svm;
  import java.io.BufferedReader;
  import java.io.FileReader;
  import java.io.IOException;
  import java.util.LinkedList;
  import java.util.List;
  import libsvm.svm;
  import libsvm.svm_model;
  import libsvm.svm_node;
  import libsvm.svm_parameter;
  import libsvm.svm_problem;
public class TrainSVMClasifier {
    public TrainSVMClasifier(){}

    public void getHogDescriptors(List<Double> gettedHogDescriptors,int gettedModelType) {
    }

    public svm_model StoreDataValues(String FileName, int valuesRecordSize,     int featureCount) throws IOException{
        LinkedList<String> DataBaseList = new LinkedList<String>();
        FileReader svmDataBaseFileReader = new FileReader(FileName);
        BufferedReader svmDataBaseLineReader = new BufferedReader(svmDataBaseFileReader);
        for(String line = svmDataBaseLineReader.readLine(); line!=null; line = svmDataBaseLineReader.readLine()){
            DataBaseList.add(line);
        }
        svmDataBaseLineReader.close();
        System.out.println("SVM DataBase Sieze ["+DataBaseList.size()+"]");
        double svmNodeValues[][] = new double[valuesRecordSize][];
        int svmNodeIndex[][] = new int[valuesRecordSize][];
        double svmClassLabels[] = new double[valuesRecordSize];
        for(int i = 0; i < DataBaseList.size(); i++){
            String [] DataBaseLine = DataBaseList.get(i).split("\\s");
            svmClassLabels[i] = Integer.parseInt(DataBaseLine[0].trim());
            LinkedList<Integer> svmLineValueIndex = new LinkedList<Integer>();
            LinkedList<Double> svmLineValue = new LinkedList<Double>();

            for(int z  = 0; z < DataBaseLine.length; z++){
                String [] tempDataValue = DataBaseLine[z].trim().split("#");
                if(tempDataValue.length == 2){
                    svmLineValueIndex.add(Integer.parseInt(tempDataValue[0].trim()));
                    svmLineValue.add(Double.parseDouble(tempDataValue[1].trim()));
                    System.out.println("Index "+tempDataValue[0]+" Value "+tempDataValue[1]);
                }
            }
            if(svmLineValue.size() > 0){
                svmNodeValues[i] = new double[svmLineValue.size()];
                svmNodeIndex[i] = new int[svmLineValueIndex.size()];
            }
            for(int x = 0; x > svmLineValue.size(); x++){
                svmNodeIndex[i][x] = svmLineValueIndex.get(x);
                svmNodeValues[i][x] = svmLineValue.get(x);
                System.out.println("List Index value "+svmLineValueIndex.get(x)+"<==> ListValues "+svmLineValue.get(x)+" listSize "+svmLineValueIndex.size());
            }
        }
        svm_problem svmProblem = new svm_problem();
        int dataCountSize = valuesRecordSize;
        svmProblem.y = new double[dataCountSize];
        svmProblem.l = dataCountSize;
        svmProblem.x = new svm_node[dataCountSize][];
        for(int i = 0; i <dataCountSize; i++){
            svmProblem.y[i] = svmClassLabels[i];
            double values[] = svmNodeValues[i];
            int indexes [] = svmNodeIndex[i];
            svmProblem.x[i] = new svm_node[values.length];
            for(int z = 0; z < values.length; z++){
                svm_node node = new svm_node();
                node.index = indexes[z];
                node.value = values[z];
                svmProblem.x[i][z] = node;
            }
        }
        svm_parameter svmParameters = new svm_parameter();
        svmParameters.probability = 1;
        svmParameters.gamma = 0.5;
        svmParameters.nu = 0.5;
        svmParameters.C = 1;
        svmParameters.svm_type = svm_parameter.C_SVC;
        svmParameters.kernel_type = svm_parameter.LINEAR;
        svmParameters.cache_size = 20000;
        svmParameters.eps = 0.001;
        svm_model model = svm.svm_train(svmProblem, svmParameters);
        return model;
    }

    public void EvaluateInstancesAll(String FileName,svm_model modelOne, int valuesRecordSize) throws IOException{
        LinkedList<String> DataSetList = new LinkedList<String>();
        FileReader svmDataBaseFileReader = new FileReader(FileName);
        BufferedReader svmDataBaseLineReader = new BufferedReader(svmDataBaseFileReader);
        for(String line = svmDataBaseLineReader.readLine(); line!=null; line = svmDataBaseLineReader.readLine()){
            DataSetList.add(line);
        }
        svmDataBaseFileReader.close();
        double svmNodeValues[][] = new double[valuesRecordSize][];
        int svmNodeIndex[][] = new int[valuesRecordSize][];
        for(int i = 0; i < DataSetList.size(); i++){
            String [] DataBaseLine = DataSetList.get(i).split("\\s");
            LinkedList<Integer> svmLineValueIndex = new LinkedList<Integer>();
            LinkedList<Double> svmLineValue = new LinkedList<Double>();

            for(int z  = 0; z < DataBaseLine.length; z++){
                String [] tempDataValue = DataBaseLine[z].trim().split("#");
                if(tempDataValue.length == 2){
                    svmLineValueIndex.add(Integer.parseInt(tempDataValue[0].trim()));
                    svmLineValue.add(Double.parseDouble(tempDataValue[1].trim()));
                    System.out.println("Index "+tempDataValue[0]+" Value "+tempDataValue[1]);
                }
            }
            if(svmLineValue.size() > 0){
                svmNodeValues[i] = new double[svmLineValue.size()];
                svmNodeIndex[i] = new int[svmLineValueIndex.size()];
            }
            for(int x = 0; x > svmLineValue.size(); x++){
                svmNodeIndex[i][x] = svmLineValueIndex.get(x);
                svmNodeValues[i][x] = svmLineValue.get(x);
                System.out.println("List Index value "+svmLineValueIndex.get(x)+"<==> ListValues "+svmLineValue.get(x)+" listSize "+svmLineValueIndex.size());
            }
        }
        for(int i = 0; i< valuesRecordSize; i++){
            int temp_indexes[] = svmNodeIndex[i];
            double temp_values[] = svmNodeValues[i];
            EvaluateInstancesOne(temp_indexes, temp_values, modelOne);
        }
    }

    private void EvaluateInstancesOne(int[] index, double[] value, svm_model modelOne) {
        svm_node [] nodes = new svm_node[value.length];
        for(int i = 0; i< value.length; i++){
            svm_node node = new svm_node();
            node.index = index[i];
            node.value = value[i];
            nodes[i] = node;
        }
        int totalClasses = svm.svm_get_nr_class(modelOne);
        int  Labels[] = new int[totalClasses];
        svm.svm_get_labels(modelOne, Labels);
        double[] probabilityEstimates = new double[totalClasses];
        double Prediction = svm.svm_predict_probability(modelOne, nodes, probabilityEstimates);
        for(int i = 0; i < totalClasses; i++){
            System.out.println("["+Labels[i]+" :: "+ probabilityEstimates[i]+"]");
        }
        System.out.println("Prediction "+Prediction);
    }

    public static void main(String[] args) throws IOException{
        TrainSVMClasifier svmTrainingObject = new TrainSVMClasifier();
        svm_model modelTwo = svmTrainingObject.StoreDataValues("svm1.txt",208, 60);
        svmTrainingObject.EvaluateInstancesAll("svm2.txt",modelTwo, 10);
        System.out.println(" Operation complete");
    }
    }

Как это решить?

READ ALSO
Переназначение аппаратных кнопок android(java)

Переназначение аппаратных кнопок android(java)

Я знаю метод для обработки нажатия кнопки Back, есть ли похожие методы для остальных аппаратных кнопок(меню, центральная кнопка, кнопки громкости,...

247
Динамическое добавление элементов к RecyclerView

Динамическое добавление элементов к RecyclerView

Мне нужно добавлять элементы к RecyclerView при нажатии на кнопку без потери данных, но что-то идет не такВ каждом элементе есть EditText и еще один...

390
Подключение к переменной базы данных с другого активити

Подключение к переменной базы данных с другого активити

Подключение к БД идет через DataBaseHelperjava В MainActivity

264