1

我想从 CSV 文件创建一个训练集,并将其标准化为 [0, 1] 或 [-1, 1] 范围(根据用户选择的激活函数)。我怎样才能做到这一点?在阅读 Encog 教程和指南后,我有这样的事情:

var source = new CSVDataSource(openFileDialog.FileName, true, CSVFormat.DecimalPoint);
data = new VersatileMLDataSet(source);
data.DefineSourceColumn("x", 0, ColumnType.Continuous);
var outputColumnDefinition = data.DefineSourceColumn("y", 1, ColumnType.Continuous);
data.Analyze();
data.DefineSingleOutputOthersInput(outputColumnDefinition);
data.Normalize();

根据API 文档,该Normalize()方法不带参数,并且

规范化数据集,并分配内存来保存它。

它归一化到什么范围?我可以强制它使用不同的吗?也许这不是从 CSV 加载训练数据并将其规范化到内存中的正确方法?

我想使用一个使用反向传播的简单前馈网络来解决回归问题。

4

1 回答 1

1

可能最简单的方法就是为您想要的范围分配规范化策略。这将输入范围指定为 -1,1,将输出范围指定为相同。

data.NormHelper.NormStrategy = new BasicNormalizationStrategy(-1,1,-1,1);

选择模型时,使用:

model.SelectMethod(data, MLMethodFactory.TypeFeedforward);

Encog 将根据您的激活函数自动创建标准化策略。因此,如果您要覆盖该策略,请确保在设置模型后执行此操作(如果您使用与上面类似的代码)这里有一个示例:

https://github.com/encog/encog-dotnet-core/blob/master/ConsoleExamples/Examples/Guide/Classification/IrisClassification.cs

于 2014-10-22T22:15:09.933 回答