Вопрос

В Encog 3.x, как вы нормализовать данные, используй это для обучения, и денализировать полученные результаты?

Нет хорошей документации по этому поводу, и простой пример, который применяет каждый из них, будет иметь большое значение для уменьшения кривой обучения на Encog. Я еще не понял все это, но вот некоторые ресурсы.

(1) *Как NENCOG 3.0 нормализуется?*

Этот код в порядке для сохранения нового нормализованного CSV. Здесь неясно, как принять анализнормализой и преобразовать его в 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) *Как нормализовать файл CSV с помощью 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.

Эти великие электронные книги, написанные самим Джеффом Хиттоном, 1. Программирование нейронных сетей с ENCOG3 в C#, 2 -е издание Heaton, Джефф (2 октября 2011 г.)2. Введение в нейронные сети для C#, 2 -е издание Джеффа Хитона (2 октября 2008 г.). Они должны иметь электронные книги для пользователей Encog.

Вы также можете взглянуть на курс Pluralsight на "Введение в машинное обучение с помощью Encog«Это также включает в себя несколько примеров нормализации и денормализации.

Теперь относительно ваших запросов: «Здесь неясно, как взять анализнормализой и преобразовать его в mldataset, чтобы фактически использовать его».

Ну, вы можете использовать AnalystNormalizecsv для нормализации вашего обучающего файла. И затем вы можете использовать LoadCSV2 -Mememory класса Enogutility для загрузки нормализованного обучающего файла для получения набора данных ML. Вот пример кода в C#,

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

Он принимает нормализованный учебный файл в качестве первого параметра, считать сетевой входной нейроны как второе, количество сетевых выходных нейронов как третий, четвертый параметр является логическим, если у вас есть заголовок в вашем файле CSV, то вы можете упомянуть формат как пятый параметр и шестой Параметр для значимости.

Так что, как только у вас есть этот набор данных в памяти, вы можете использовать его для обучения. Аналогичный подход также может быть принят на шаге перекрестной проверки и оценки.

Что касается денормализации, вы можете сначала сохранить файл аналитиков, а затем вы можете использовать файл аналитиков для обозначения отдельных столбцов. Например :

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

Аналогичный подход может быть использован в денормализующих полях, чтобы получить метки классов. Например

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

Другие советы

Аналитик ENCOG фантастичен для нормализации данных. Он может принимать информацию, хранящуюся в файле CSV, и автоматически определять нормализованные поля и их тип кодирования (включая 1 из n равностороннего кодирования).

Единственным недостатком этого является то, что логика тесно связана с классом 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