我正在尝试训练一个SVM来对两个螺旋数据进行分类。
我的输入是一个3列的CSV文件,前两列是缓和曲线(未标准化)上的点的(x,y)-coordinates,第三列是点所属的缓和曲线(类)。
我首先对CSV文件进行规范化,使前两列在0和1之间(第三列保持不变)。
然后我创建并训练一个SVM,如下所示
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%的训练数据。
发布于 2015-04-30 17:17:20
问得好。你的问题是支持向量机不能建立螺旋数据的分离曲线。我建议你尝试归一化技巧,但不是根据X,Y坐标作为直线进行归一化,而是switch to polar system of coordinates。考虑一下阿基米德螺线,对数螺线等等。

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