Vra

Hoe doen jy in Encog 3.x? normaliseer data, gebruik dit vir opleiding, en denormaliseer resultate?

Daar is geen goeie dokumentasie hieroor nie, en 'n eenvoudige voorbeeld wat elkeen van hierdie toepassing van toepassing is, sal die leerkurwe op Encog verminder. Ek het nog nie alles uitgepluis nie, maar hier is 'n paar hulpbronne.

(1) *Hoe normaliseer ENCOG 3.0?*

Hierdie kode is in orde om 'n nuwe genormaliseerde CSV te stoor. Dit is egter nie hier duidelik hoe om die ontleders te neem nie en dit na 'n mldataset om te skakel om dit eintlik te gebruik.

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) *Hoe normaliseer ek 'n CSV -lêer met Encog (Java)*

Hierdie kode is weereens ok vir die vervaardiging van 'n genormaliseerde CSV -uitset. Maar dit is onduidelik hoe om die genormaliseerde data te neem en dit eintlik toe te pas. Daar is 'n metode om die teiken as 'n MLDATA te stel, maar dit neem aan dat alle kolomme insette is en nie ruimte laat vir enige ideale nie. Verder is albei hierdie opsies moeilik om te gebruik wanneer die lêer het hoofde en/of ongebruikte kolomme.

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

Ek het 'n totale verlies vir hoe om dit alles te neem en te denormaliseer volgens die toepaslike datasipe se Max's en Min's.

Was dit nuttig?

Oplossing

Hier is min bronne, waar u meer gedetailleerde inligting oor normalisering en denormalisering met behulp van ENCOG -raamwerk kan kry.

Hierdie wonderlike e-boeke geskryf deur Jeff Heaton self, 1. Programmering van neurale netwerke met encog3 in C#, 2de uitgawe deur Heaton, Jeff (2 Oktober 2011)2. Inleiding tot neurale netwerke vir C#, 2de uitgawe deur Jeff Heaton (2 Oktober 2008). Dit moet e -boeke hê vir ENCOG -gebruikers.

U kan ook kyk na pluralight -kursus oor "Inleiding tot masjienleer met encog"Dit bevat ook enkele voorbeelde van normalisering en denormalisering.

Wat u navrae betref: "Dit is hier nie duidelik nie, maar hoe u die ontledingsnormalizecsv kan neem en dit na 'n mldataset omskakel om dit eintlik te gebruik."

Wel, u kan AnalystNormalizeCSV gebruik om u opleidingslêer te normaliseer. En dan kan u LoadCSv2Memory of Encogutility Class gebruik om die genormaliseerde opleidingslêer te laai om die ML -datastel te kry. Hier is 'n voorbeeldkode in C#,

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

Dit neem die genormaliseerde opleidingslêer as eerste parameter, netwerkinvoerneurontelling as tweede, netwerkuitsetneurontelling as derde, vierde parameter is Boolean as u kop in u CSV -lêer het, dan kan u die formaat noem as die vyfde parameter, en sesde Parameter is vir betekenis.

Sodra u hierdie datastel in die geheue het, kan u dit gebruik vir opleiding. Soortgelyke benadering kan ook in kruisvalidering en evalueringstap gebruik word.

Wat denormalisering betref, kan u eers die ontlederslêer volhou, en later kan u ontledingslêer gebruik om ook individuele kolomme te denormaliseer. Byvoorbeeld :

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

Soortgelyke benadering kan gebruik word in denormaliserende velde om ook klasetikette te kry. Byvoorbeeld

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

Ander wenke

Die ENCOG -ontleder is fantasties om data te normaliseer. Dit kan inligting neem wat in 'n CSV -lêer gestoor is en outomaties die genormaliseerde velde en hul tipe kodering bepaal (insluitend 1 van n gelyksydige kodering).

Die enigste nadeel hiervan is dat die logika nou gekoppel is aan die ReadCSV -klas.

Ek het besluit om die uitbreiding in teenstelling met wysiging te bevoordeel.

Ek het ook 'n nuwe toetsklas bygevoeg wat u wys hoe u dit moet gebruik (dit is baie soortgelyk aan die standaard ENCOG -implementering).

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;
    }
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top