在 Encog 3.x 中,您如何规范化数据、使用它进行训练以及反规范化结果?
这方面没有很好的文档,一个应用其中每一个的简单示例将大大减少 Encog 的学习曲线。我还没有弄明白,但这里有一些资源。
(1) * How does Encog 3.0 Normalize? *
此代码可用于保存新的规范化 csv。这里并不清楚如何获取 AnalystNormalizeCSV 并将其转换为 MLDataSet 以实际使用它。
EncogAnalyst analyst = new EncogAnalyst();
AnalystWizard wizard = new AnalystWizard(analyst);
wizard.wizard(sourceFile, true, AnalystFileFormat.DECPNT_COMMA);
final AnalystNormalizeCSV norm = new AnalystNormalizeCSV();
norm.analyze(sourceFile, true, CSVFormat.ENGLISH, analyst);
norm.setOutputFormat(CSVFormat.ENGLISH);
norm.setProduceOutputHeaders(true);
norm.normalize(targetFile)
(2) * How do I normalize a CSV file with Encog (Java) *
此代码同样可以生成规范化的 csv 输出。但目前尚不清楚如何获取规范化数据并实际应用它。有一种将目标设置为 MLData 的方法,但它假定所有列都是输入并且没有为任何理想留出空间。此外,当文件有标题和/或未使用的列时,这两个选项都很难使用。
try {
File rawFile = new File(MYDIR, "iris.csv");
// download Iris data from UCI
if (rawFile.exists()) {
System.out.println("Data already downloaded to: " + rawFile.getPath());
} else {
System.out.println("Downloading iris data to: " + rawFile.getPath());
BotUtil.downloadPage(new URL("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"), rawFile);
}
// define the format of the iris data
DataNormalization norm = new DataNormalization();
InputField inputSepalLength, inputSepalWidth, inputPetalLength, inputPetalWidth;
InputFieldCSVText inputClass;
norm.addInputField(inputSepalLength = new InputFieldCSV(true, rawFile, 0));
norm.addInputField(inputSepalWidth = new InputFieldCSV(true, rawFile, 1));
norm.addInputField(inputPetalLength = new InputFieldCSV(true, rawFile, 2));
norm.addInputField(inputPetalWidth = new InputFieldCSV(true, rawFile, 3));
norm.addInputField(inputClass = new InputFieldCSVText(true, rawFile, 4));
inputClass.addMapping("Iris-setosa");
inputClass.addMapping("Iris-versicolor");
inputClass.addMapping("Iris-virginica");
// define how we should normalize
norm.addOutputField(new OutputFieldRangeMapped(inputSepalLength, 0, 1));
norm.addOutputField(new OutputFieldRangeMapped(inputSepalWidth, 0, 1));
norm.addOutputField(new OutputFieldRangeMapped(inputPetalLength, 0, 1));
norm.addOutputField(new OutputFieldRangeMapped(inputPetalWidth, 0, 1));
norm.addOutputField(new OutputOneOf(inputClass, 1, 0));
// define where the output should go
File outputFile = new File(MYDIR, "iris_normalized.csv");
norm.setCSVFormat(CSVFormat.ENGLISH);
norm.setTarget(new NormalizationStorageCSV(CSVFormat.ENGLISH, outputFile));
// process
norm.setReport(new ConsoleStatusReportable());
norm.process();
System.out.println("Output written to: " + rawFile.getPath());
} catch (Exception ex) {
ex.printStackTrace();
}
(3) *反规范化*
我完全不知道如何根据适当的数据类型的最大值和最小值进行所有这些和非规范化。
最佳答案
这里有一些资源,您可以在其中获得有关使用 ENCOG 框架进行规范化和反规范化的更多详细信息。
这些伟大的电子书由 Jeff Heaton 亲自撰写, 1. Programming Neural Networks with Encog3 in C#, 2nd Edition by Heaton, Jeff (Oct 2, 2011) 2.C# 神经网络简介,第 2 版,作者 Jeff Heaton(2008 年 10 月 2 日) 这些是 ENCOG 用户必备的电子书。
你也可以看看“Introduction to Machine learning with ENCOG”上的 pluralsight 类(class),这也包括一些规范化和反规范化的例子。
现在关于您的查询:“这里不清楚如何获取 AnalystNormalizeCSV 并将其转换为 MLDataSet 以实际使用它。”
您可以使用 AnalystNormalizeCSV 规范化您的训练文件。然后你可以使用 EncogUtility 类的 LoadCSV2Memory 加载规范化训练文件以获取 ML 数据集。这是 C# 中的示例代码,
var trainingSet = EncogUtility.LoadCSV2Memory(Config.NormalizedTrainingFile.ToString(),
network.InputCount, network.OutputCount,true, CSVFormat.English,false);
它以规范化训练文件作为第一个参数,网络输入神经元数作为第二个,网络输出神经元数作为第三个,第四个参数是 boolean 值,如果你的 csv 文件中有标题,那么你可以将格式作为第五个参数, 第六个参数为显着性。
所以一旦你在内存中有了这个数据集,你就可以用它来训练。在交叉验证和评估步骤中也可以采用类似的方法。
关于反规范化,您可以先持久化分析文件,然后您也可以使用分析文件对个别列进行反规范化。 例如:
var denormlizedOutput = analyst.Script.Normalize.NormalizedFields[index].DeNormalize(item.Input[index]);
类似的方法也可用于非规范化字段以获取类标签。例如
var predictedClass = analyst.Script.Normalize.NormalizedFields[索引].Classes[predictedClassInt].Name;
关于java - Encog 神经网络 : Normalization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19842348/