LIBSVM回归Java实现

问题描述

我正在使用Java中的LIBSVM回归库执行EnergyForecast。在预测测试结果时,它对每个功能的测试数据集都提供相同的预测。

下面是代码

这就是我的数据

 List trainData= new ArrayList<List<Double>>();
    List testData= new ArrayList<List<Double>>();
    List temp=null;
    List<Double> pred=null;

设置SVm参数

svm_parameter param = new svm_parameter();
        param.svm_type = svm_parameter.EPSILON_SVR;
        param.kernel_type = svm_parameter.RBF;
        param.C = 1.0;
        param.gamma = 1;
        param.cache_size=200;
        param.coef0=0.0;
        param.degree=3;

建立SVM模型

        svm_problem prob = new svm_problem();
        int recordCount = trainData.size();
        prob.y = new double[recordCount];
        prob.l = recordCount;

        //getting number of features
        List features= (List) trainData.get(0);
        prob.x = new svm_node[recordCount][features.size()-1];
        
        for (int i = 0; i < recordCount; i++){            
            features= (List) trainData.get(i);
            prob.x[i] = new svm_node[features.size()-1];
            for (int j = 0; j < features.size()-1; j++){
                svm_node node = new svm_node();
                node.index = j;
                node.value = (double) features.get(j+1);
                prob.x[i][j] = node;
            }           
            prob.y[i] = (double) features.get(0);
        } 
        //training the model
        svm_model model = svm.svm_train(prob,param);

评估模型

         pred= new ArrayList<Double>();
        
        for(int k = 0; k < testData.size(); k++){

            List<Double> fVector = testData.get(k);

            svm_node[] nodes = new svm_node[fVector.size()-1];
            for (int i = 0; i < fVector.size()-1; i++)
            {
               svm_node node = new svm_node();
                node.index = i;
                node.value = (double) fVector.get(i+1);
                nodes[i] = node;
            }
            pred.add(svm.svm_predict(model,nodes));
        }

打印结果

for (int i = 0; i < pred.size(); i++) 
{
   List ll= (List) testData.get(i);
   System.out.println("(Actual:" + ll.get(0) + " Prediction:" + pred.get(i) + ")");
}

这就是我得到的...

(Actual:24076.68821 Prediction:39655.281246792365)
(Actual:26737.617019999998 Prediction:39655.281246792365)
(Actual:30801.850919999997 Prediction:39655.281246792365)
(Actual:35218.41209 Prediction:39655.281246792365)
(Actual:36237.76992 Prediction:39655.281246792365)
(Actual:36066.1183 Prediction:39655.281246792365)
(Actual:34224.65958 Prediction:39655.281246792365)
(Actual:30959.14411 Prediction:39655.281246792365)
(Actual:26310.846380000003 Prediction:39655.281246792365)
(Actual:22635.94736 Prediction:39655.281246792365)
(Actual:20206.37281 Prediction:39655.281246792365)
(Actual:18753.80365 Prediction:39655.281246792365)
(Actual:18053.6531 Prediction:39655.281246792365)
(Actual:18214.27355 Prediction:39655.281246792365)
(Actual:20045.88932 Prediction:39655.281246792365)
(Actual:24695.85854 Prediction:39655.281246792365)
(Actual:25663.172580000002 Prediction:39655.281246792365)
(Actual:23554.40137 Prediction:39655.281246792365)
(Actual:23382.007169999997 Prediction:39655.281246792365)
(Actual:23912.54456 Prediction:39655.281246792365)
(Actual:24658.7333 Prediction:39655.281246792365)
(Actual:25330.670140000002 Prediction:39655.281246792365)

有人可以帮助我吗?.svm参数有问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...