首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Encog SVM不会训练

Encog SVM不会训练
EN

Stack Overflow用户
提问于 2015-04-26 08:53:03
回答 1查看 244关注 0票数 2

我正在尝试训练一个SVM来对两个螺旋数据进行分类。

我的输入是一个3列的CSV文件,前两列是缓和曲线(未标准化)上的点的(x,y)-coordinates,第三列是点所属的缓和曲线(类)。

我首先对CSV文件进行规范化,使前两列在0和1之间(第三列保持不变)。

然后我创建并训练一个SVM,如下所示

代码语言:javascript
复制
    CSVNeuralDataSet trainingSet = new CSVNeuralDataSer(normaliseCSV("/path/to/data/file"), 2, 1, false);

SVM svm = new SVM(2, false);

final SVMSearchTrain train = new SVMSearchTrain(svm, trainingSet);

int epoch = 0;

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

train.finishTraining();

然而,do...while循环最终成为无限循环,因为训练误差约为0.4,并且它永远不会改变。

数据集包含大约200个样本,并且只有两个类(0和1)。

谁能告诉我为什么这个失败了?

编辑:Here is a pastebin link到大约10%的训练数据。

EN

回答 1

Stack Overflow用户

发布于 2015-04-30 17:17:20

问得好。你的问题是支持向量机不能建立螺旋数据的分离曲线。我建议你尝试归一化技巧,但不是根据X,Y坐标作为直线进行归一化,而是switch to polar system of coordinates。考虑一下阿基米德螺线,对数螺线等等。

。请看图片。螺旋数据需要从支持向量机中建立一些函数来区分第一类和第二类数据,我非常确定这对支持向量机来说并不是一件容易的事情。但是如果你要找到从螺旋数据表示到线性数据表示的方法,那么支持向量机将需要在两条曲线之间建立分离,这要容易得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29872459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档