gpt4 book ai didi

java - Encog SVM 不会训练

转载 作者:行者123 更新时间:2023-11-30 08:53:10 24 4
gpt4 key购买 nike

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

我的输入是一个 3 列的 CSV 文件,前两列是螺旋(未归一化)上一个点的 (x, y) 坐标,第三列是该点所属的螺旋(类) .

我首先规范化 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%。

最佳答案

好问题。您的问题是 SVM 无法为螺旋数据建立分离曲线。我建议你尝试归一化技巧,但不是根据 X、Y 坐标作为直线进行归一化,而是 switchpolar system of coordinates .并可能考虑阿基米德螺线、对数螺线等。enter image description here .请看图片。螺旋数据需要 SVM 构建一些函数来分离 Class 1 和 Class 2 之间的数据,我很确定这对 SVM 来说不是一件容易的事。但是,如果您会找到从螺旋数据表示切换到线性数据表示的方法,那么 SVM 将需要在两条曲线之间建立分离,这会容易得多。

关于java - Encog SVM 不会训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com