<pre lang="java">// scale train data between 0 and 1 double[][] trainX_scale = new double[trainX.length][trainX[0].length]; for (int i = 0; i < trainX.length; i++) { double min = Double.MAX_VALUE; double max = Double.MIN_VALUE; for (int inner = 0; inner < trainX[i].length; inner++) { if (trainX[i][inner] < min) min = trainX[i][inner]; if (trainX[i][inner] > max) max = trainX[i][inner]; } double difference = max - min; for (int inner = 0; inner < trainX[i].length; inner++) { trainX_scale[i][inner] = (trainX[i][inner] - min)/ difference; } } // prepare the svm node svm_node[][] SVM_node_Train = new svm_node[trainX[0].length][trainX.length]; for (int p = 0; p < trainX[0].length; p++) { for (int q = 0; q < trainX.length; q++) { SVM_node_Train[p][q] = new svm_node(); SVM_node_Train[p][q].index = q; SVM_node_Train[p][q].value = trainX_scale[q][p]; } } double[] biny_SVM = new double[biny.length];// for svm compatible for (int p = 0; p < biny.length; p++) { biny_SVM[p] = biny[p]; } svm_problem SVM_Prob = new svm_problem(); SVM_Prob.l = trainX[0].length; SVM_Prob.x = SVM_node_Train; SVM_Prob.y = biny_SVM; svm_parameter SVM_Param = new svm_parameter(); SVM_Param.svm_type = 0; SVM_Param.kernel_type = 2; SVM_Param.cache_size = 100; SVM_Param.eps = 0.0000001; SVM_Param.C = 1.0; SVM_Param.gamma = 0.5; svm_model SVM_Model = new svm_model(); SVM_Model.param = SVM_Param; SVM_Model.l = trainX[0].length; SVM_Model.nr_class = 2; SVM_Model.SV = SVM_node_Train; //SVM_Model.label = biny; // String check =svm.svm_check_parameter(SVM_Prob, SVM_Param); // // System.out.println(check); double[] target = new double[biny.length];// for svm compatible Arrays.fill(target, 0.0); svm.svm_cross_validation(SVM_Prob, SVM_Param, 2, target); // train the classifier svm_model test_model = svm.svm_train(SVM_Prob, SVM_Param); /********** get the training results of libsvm **********/ //double[][] weights1 = test_model.sv_coef; double Bias = test_model.rho[0]; double NumberOfSupportVectors = svm.svm_get_nr_sv(test_model); double [] SupportVectorIDs = new int[NumberOfSupportVectors]; svm.svm_get_sv_indices(test_model, SupportVectorIDs); svm_node[][] SV= test_model.SV; double [][]SupportVectors=new double [SV.length][SV[0].length]; for(int ii=0;ii<SV.length;ii++){ for(int jj=0;jj<SV[0].length;jj++){ SupportVectors[ii][jj]=SV[ii][jj].value; } } double [] SupportVectorWeights=test_model.sv_coef[0]; double[] LinearSVMNormVector = new double [SupportVectors[0].length]; for (int ii=0;ii<msvm[0].SupportVectors[0].length;ii++){ for (int jj=0;jj<SupportVectors.length;jj++){ LinearSVMNormVector[ii] += (SupportVectors[jj][ii] * SupportVectorWeights[jj]); } }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)