在Encog 3.X中,您如何 归一化 数据, 用它 用于培训, 否定性 结果?

对此没有很好的文档,一个简单的示例适用于每一个都可以在减少Encog上的学习曲线方面大有帮助。我还没有弄清楚这一切,但是这里有一些资源。

(1) *如何包裹3.0归一化?*

此代码可以保存新的归一化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) *如何用Encog(Java)将CSV文件归一化*

同样,此代码可以生产归一化的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) *译出*

我对如何采用所有这些并根据适当的数据类型的Max和Min的Max和Min的贬值感到完全损失。

有帮助吗?

解决方案

这里有很少的资源,您可以在其中获得有关使用Endog Framework的规范化和否定化的更多详细信息。

这些由杰夫·希顿(Jeff Heaton)本人撰写的伟大电子书,1。 用encog3在C#中的编程神经网络,Heaton,Jeff的第二版(2011年10月2日)2.杰夫·希顿(Jeff Heaton)(2008年10月2日)对C#的神经网络进行了介绍,这些版本必须具有用于Encog用户的电子书。

您还可以看一下“多元景点”课程”用交流的机器学习简介“,这也包括归一化和否定化的示例。

现在关于您的查询:“尽管如何使用AnalystNormalizecsv并将其转换为MLDATASET来实际使用它,但这里尚不清楚。”

好吧,您可以使用AnalystNormalizecsv来使您的培训文件正常化。然后,您可以使用loadcsv2 -Memory of Encutility类使用归一化训练文件以获取ML数据集。这是C#中的示例代码

var trainingSet = EncogUtility.LoadCSV2Memory(Config.NormalizedTrainingFile.ToString(), network.InputCount, network.OutputCount,true, CSVFormat.English,false);

它将归一化培训文件作为第一个参数,网络输入神经元计数为第二,网络输出神经元计数为第三,如果您在CSV文件中有标题,则第四参数为boolean,那么您可以提及该格式为第五参数,而第六个参数则是第六名。参数具有显着性。

因此,一旦将此数据集中在内存中,就可以将其用于培训。在交叉验证和评估步骤中也可以采取类似的方法。

关于否定化,您可以首先坚持分析师文件,以后您可以使用分析师文件也可以将单个列变为规范。例如 :

var denormlizedOutput = analyst.Script.Normalize.NormalizedFields[index].DeNormalize(item.Input[index]);

类似的方法也可以用于划定字段以获取类标签。例如

var predictedClass = analyst.Script.Normalize.NormalizedFields[index].Classes[predictedClassInt].Name;

其他提示

Encog分析师对于标准化数据非常棒。它可以使用存储在CSV文件中的信息,并自动确定归一化字段及其编码类型(包括N等式编码的1个)。

唯一的缺点是逻辑与ReadCSV类紧密结合。

偏爱扩展而不是修改我决定创建扩展方法和替代类,以创建将通用.NET数据集正常化的分析师。

我还添加了一个新的测试类,向您展示了如何使用它(它与标准Encog实现非常相似)。

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using Encog.ML.Data.Market;
using Encog.ML.Data.Market.Loader;
using Encog.App.Analyst;
using Encog.App.Analyst.Wizard;
using EncogExtensions.Normalization; //<- This is my extension lib
using System.Data;
using System.Linq;     
[TestMethod]
    public void Normalize_Some_In_Memory_Data()
    {
        // Download some stock data
        List<LoadedMarketData> MarketData = new List<LoadedMarketData>();
        MarketData.AddRange(DownloadStockData("MSFT",TimeSpan.FromDays(10)));
        MarketData.AddRange(DownloadStockData("AAPL", TimeSpan.FromDays(10)));
        MarketData.AddRange(DownloadStockData("YHOO", TimeSpan.FromDays(10)));

        // Convert stock data to dataset using encog-extensions
        DataSet dataSet = new DataSet().Convert(MarketData, "Market DataSet");

        // use encog-extensions to normalize the dataset 
        var analyst = new EncogAnalyst();
        var wizard = new AnalystWizard(analyst);
        wizard.Wizard(dataSet);

        // DataSet Goes In... 2D Double Array Comes Out... 
        var normalizer = new AnalystNormalizeDataSet(analyst);
        var normalizedData = normalizer.Normalize(dataSet);

        // Assert data is not null and differs from original
        Assert.IsNotNull(normalizedData);
        Assert.AreNotEqual(normalizedData[0, 0], dataSet.Tables[0].Rows[0][0]);

    }

    private static List<LoadedMarketData> DownloadStockData(string stockTickerSymbol,TimeSpan timeSpan)
    {
        IList<MarketDataType> dataNeeded = new List<MarketDataType>();
        dataNeeded.Add(MarketDataType.AdjustedClose);
        dataNeeded.Add(MarketDataType.Close);
        dataNeeded.Add(MarketDataType.Open);
        dataNeeded.Add(MarketDataType.High);
        dataNeeded.Add(MarketDataType.Low);
        dataNeeded.Add(MarketDataType.Volume);

        List<LoadedMarketData> MarketData =
            new YahooFinanceLoader().Load(
                new TickerSymbol(stockTickerSymbol),
                dataNeeded,
                DateTime.Now.Subtract(timeSpan),
                DateTime.Now).ToList();

        return MarketData;
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top