Frage

Wie geht es dir in Encog 3.x? normalisieren Daten, benutze es für das Training und Denormalisieren Ergebnisse?

Es gibt keine gute Dokumentation zu diesem und ein einfaches Beispiel, das jedes davon anwendet, um die Lernkurve für Encog zu verringern. Ich habe noch nicht alles herausgefunden, aber hier sind einige Ressourcen.

(1) *Wie normalisiert Encog 3.0?*

Dieser Code ist in Ordnung, um einen neuen normalisierten CSV zu speichern. Es ist hier jedoch nicht klar, wie man den Analysednormalizecsv übernimmt und ihn in einen mldataset umwandelt, um sie tatsächlich zu verwenden.

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) *Wie normalisiere ich eine CSV -Datei mit Encog (Java)*

Dieser Code ist wiederum in Ordnung, um einen normalisierten CSV -Ausgang zu erzeugen. Es ist jedoch unklar, wie man die normalisierten Daten aufnimmt und tatsächlich anwendet. Es gibt eine Methode zum Festlegen des Ziels als mldata, aber es wird davon ausgegangen, dass alle Spalten Eingänge sind und keinen Raum für Ideale hinterlassen. Darüber hinaus sind beide Optionen schwierig zu verwenden, wenn die Datei hat Header und/oder nicht verwendete Spalten.

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) *Denormalisierung*

Ich habe einen Totalverlust dafür, wie ich all dies aufnimmt und gemäß den entsprechenden Datentyps-Max- und Mins-Typen des Datums enthält.

War es hilfreich?

Lösung

Hier sind nur wenige Ressourcen, in denen Sie detailliertere Informationen über Normalisierung und Denormalisierung mithilfe des Encog -Frameworks erhalten können.

Diese großartigen E-Books von Jeff Heaton selbst, 1. Programmieren neuronaler Netzwerke mit CNOG3 in C#, 2. Ausgabe von Heaton, Jeff (2. Oktober 2011)2. Einführung in neuronale Netze für C#, 2. Ausgabe von Jeff Heaton (2. Oktober 2008) Dies sind E -Books für Encog -Benutzer.

Sie können sich auch den Pluralsight -Kurs ansehen "Einführung in maschinelles Lernen mit Encog"Dies umfasst auch einige Beispiele für Normalisierung und Denormalisierung.

Jetzt in Bezug auf Ihre Fragen: "Es ist hier nicht klar, wie Sie den AnalyseMalizizecsv übernehmen und sie in einen mldataset umwandeln können, um sie tatsächlich zu verwenden."

Nun, Sie können AnalyseNormalizecsv verwenden, um Ihre Trainingsdatei zu normalisieren. Und dann können Sie LoadCSV2Memory der Himmelsklasse verwenden, um die normalisierte Trainingsdatei zu laden, um den ML -Datensatz zu erhalten. Hier ist ein Beispielcode in C#.

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

Sie nimmt die normalisierte Trainingsdatei als erster Parameter, Netzwerkeingabe -Neuronenzahl als zweite, Netzwerkausgabe -Neuronenzahl als dritter. Der vierte Parameter ist booleschen, wenn Sie Header in Ihrer CSV -Datei haben Parameter ist für Bedeutung.

Sobald Sie diesen Datensatz im Speicher haben, können Sie ihn zum Training verwenden. Ein ähnlicher Ansatz kann auch im Quervalidierungs- und Bewertungsschritt verfolgt werden.

In Bezug auf die Denormalisierung können Sie zunächst die Analystendatei bestehen und später auch die Analystendatei verwenden, um einzelne Spalten zu denormalisieren. Zum Beispiel :

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

Ein ähnlicher Ansatz kann bei der Denormalisierung von Feldern verwendet werden, um auch Klassenetiketten zu erhalten. Zum Beispiel

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

Andere Tipps

Der Encog Analyst ist fantastisch für die Normalisierung von Daten. Es kann Informationen in einer CSV -Datei aufnehmen und automatisch die normalisierten Felder und ihre Art der Codierung (einschließlich 1 der n gleichseitigen Codierung n) bestimmen.

Der einzige Nachteil davon ist, dass die Logik eng mit der ReadCSV -Klasse verbunden ist.

Bevorzugung der Erweiterung im Gegensatz zu Modifikationen Ich habe mich entschlossen, Erweiterungsmethoden und alternative Klassen zu erstellen, um einen Analyst zu erstellen, der einen generischen .NET -Datensatz normalisieren würde.

Ich habe auch eine neue Testklasse hinzugefügt, die Ihnen zeigt, wie Sie sie verwenden (es ist sehr ähnlich wie bei der Standard -Encog -Implementierung).

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;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top