如何在Java中使用Encog SVM预测多个值

费德里科·马蒂亚斯·罗德里格斯(Federico Matias Rodriguez)

很久以前,我就在Encog库中研究反向传播神经网络的预测系统,现在我正在研究支持向量机领域,我发现它比NN效率高得多,我的目标是测试预测在SVM中的行为方式并将其与BPN进行比较。

我有两个二维数组,一个数组是INPUT,一个数组是IDEAL。数组的每一行都由3个元素组成(实数在1/9和9之间)。INPUT中有800行,对应的IDEAL。另外还有2个TEST数组,每个数组有200行。

使用BPN没问题,我用输入层中的3个神经元,中间层中的50个神经元和输出层中的3个神经元训练网络(在5分钟内收敛,误差小于0.01),并且测试工作正常。

另一方面,在SVM中,我有一个问题。我训练了网络,在3秒内收敛,并且看起来工作正常,但是当我测试数据时,它预测每行输出中只有1个元素,而BPN中没有3个asi。
我不知道我在做什么错,我复制了一个简化的代码和运行的输出。

JAVA代码

/* SVM Structure */
SVM svm = new SVM(3, true); 

/* Training Set */
BasicMLDataSet trainingSet = new BasicMLDataSet(INPUT_ARRAY, IDEAL_ARRAY);

/* Train SVM */
SVMSearchTrain train = new SVMSearchTrain(svm, trainingSet);

int epoch = 1;
do {
   train.iteration();
   System.out.println("Epoch #" + epoch + " Error:" + train.getError());
   epoch++;
} while(train.getError() > 0.01);

// Test the SVM
BasicMLDataSet testSet = new BasicMLDataSet(INPUT_TEST_ARRAY, IDEAL_TEST_ARRAY);
//Normalize/Denormalize class -> 0.11111111111111111 - 9 into 0 - 1
NormalizedField norm = new NormalizedField(NormalizationAction.Normalize, null,9,0.11111111111111111,1,0);

for(MLDataPair dataPair: testSet ) {
   final MLData output = svm.compute(dataPair.getInput());
   System.out.print("Input: [ ");           
   int elementos = (orden*(orden-1))/2;
   for(int i=0; i<elementos; i++){
       System.out.print(norm.deNormalize(dataPair.getInput().getData(i))+" ");
   }
   System.out.print("] - ");
   System.out.print("Ideal: [ ");           
   for(int i=0; i<elementos; i++){
       System.out.print(norm.deNormalize(dataPair.getIdeal().getData(i))+" ");
   }
   System.out.print("] - ");
   System.out.print("Ideal: [ "); 
   for(int i=0; i<output.size();i++){
      System.out.print(norm.deNormalize(output.getData(0))+" ");
   }
   System.out.print("]\n");         
}

Encog.getInstance().shutdown();

输出

Epoch #1 Error:0.0040788759553631255
Input: [ 0.1111111111111111 0.14285714285714285 4.0 ] - Ideal: [ 0.1111111111111111 0.16666666666666666 4.0 ] - Actual: [ -0.41164113104867955 ]
Input: [ 0.125 0.125 4.0 ] - Ideal: [ 0.125 0.5 3.0 ] - Actual: [ -0.4085939985232357 ]
Input: [ 1.0 1.0 0.25 ] - Ideal: [ 1.0 0.5 0.25 ] - Actual: [ 1.6604401446928032 ]
.
.
.
Input: [ 8.0 4.0 0.16666666666666666 ] - Ideal: [ 8.0 4.0 0.2 ] - Actual: [ 7.545661375461256 ]

任何帮助将不胜感激,感谢您的阅读!

杰夫·希顿

我认为这是一个回归问题,您在SVM中输入一个数字,而不是一个分类。

神经网络在模型之间有些独特,因为它们可以有多个输出。支持向量机用于回归时,只有一个输出。您可以使用SVM将其分类为多个类,但是,为了进行回归,您只能使用一个输出。

如果要尝试预测两个不同的数字,则需要使用两个SVM。如果要分类为多个类别,请在此处获取更多信息:http : //www.heatonresearch.com/content/encog_svm_multiclass.html

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中使用Encog SVM预测多个值

来自分类Dev

SVM在Java中使用Encog为初学者

来自分类Dev

如果您有多个虚拟列,如何预测值?

来自分类Dev

如何使用保存 SVM 模型进行预测

来自分类Dev

使用图像训练 SVM 并进行预测

来自分类Dev

Sklearn svm预测相同的值

来自分类Dev

SVM 预测正在降低值

来自分类Dev

如何在HTML布局页面中使用多个Java脚本

来自分类Dev

如何在Java中使用动态数据创建多个arraylist

来自分类Dev

如何在Java中使用varargs加入多个列表?

来自分类Dev

如何在Java中使用varargs加入多个列表?

来自分类Dev

如何在Java中的WebDriver中使用多个断言

来自分类Dev

如何在Java中使用循环定义多个集合?

来自分类Dev

在Shiny中使用反应性数据框进行预测(SVM)

来自分类Dev

如何在Java中使用XPath获取属性值?

来自分类Dev

如何在JAVA CLASS中使用JSP页面变量的值

来自分类Dev

如何在Java的for循环中使用值?

来自分类Dev

如何在JAVA CLASS中使用JSP页面变量的值

来自分类Dev

如何在java中使用ndk获取证书值

来自分类Dev

如何在R中使用vars包来预测多个时间序列?

来自分类Dev

如何在jQuery ajax dataType中使用多个值?

来自分类Dev

如何在Reducer中使用数组更新多个值

来自分类Dev

如何在bash中使用awk遍历字段的多个值?

来自分类Dev

如何在条件中使用多个文本框值

来自分类Dev

如何在SQL中使用多个值进行计算

来自分类Dev

如何在python中使用多个json计算相同的值

来自分类Dev

如何在 Django 中使用 API 返回多个值

来自分类Dev

如何在http中使用多个进程

来自分类Dev

如何在多个表中使用插入?

Related 相关文章

热门标签

归档