Как нормализовать данные не-CSV в Encog

1

Поэтому я использую библиотеку Neural Network Jeff Heaton.

При попытке решить проблему классификации растений Iris у меня проблема с нормализацией данных.

Я могу нормализовать CSV файл, используя следующий метод:

public void NormalizeFile(FileInfo SourceDataFile, FileInfo NormalizedDataFile, FileInfo NormalizationConfigFile)
    {

        var wizard = new AnalystWizard(_analyst);
        wizard.Wizard(SourceDataFile, _useHeaders, AnalystFileFormat.DecpntComma);
        var norm = new AnalystNormalizeCSV();
        norm.Analyze(SourceDataFile, _useHeaders, CSVFormat.English, _analyst);
        norm.ProduceOutputHeaders = _useHeaders;
        norm.Normalize(NormalizedDataFile);

        // save normalization configuration, which can be used later to denormalize to get the raw output.
        _analyst.Save(NormalizationConfigFile);

    }

Пока что так хорошо... Программа работает с высокой степенью точности.

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

У меня есть некоторые входные данные

  • ширина сепала
  • длина сепалы
  • ширина лепестка
  • длина лепестка

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

Теги:
neural-network
normalization
encog
normalize

2 ответа

0
Лучший ответ

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

Проблема заключалась в том, что существующий код был тесно связан с файлами CSV. Чтобы бороться с этим, я написал свою собственную библиотеку методов расширения encog.

его можно найти здесь: https://github.com/KiransHub/encog-dotnet-core

Вот пример этого в действии:

    public void NormalizeDataExample()
    {
        List<LoadedMarketData> AppleMarketData = GetMarketData("AAPL");
        List<LoadedMarketData> MicrosoftMarketData = GetMarketData("MSFT");
        List<LoadedMarketData> YahootMarketData = GetMarketData("YHOO");

        List<LoadedMarketData> MarketData = new List<LoadedMarketData>();
        MarketData.AddRange(AppleMarketData);
        MarketData.AddRange(MicrosoftMarketData);
        MarketData.AddRange(YahootMarketData);

        DataSet dataSet = new DataSet().Convert(MarketData, "Market DataSet");
        var analyst = new EncogAnalyst();
        var wizard = new AnalystWizard(analyst);
        wizard.Wizard(dataSet);

        var normalizer = new AnalystNormalizeDataSet(analyst);
        var normalizedData = normalizer.Normalize(dataSet);


    }
  • 0
    Привет, я посмотрел и не увидел расширение в предложенном вами решении. AnalystNormalizeDataSet?
  • 0
    @ComputerAidedTradingSystems, так что раньше был проект ac #. Я ищу это на GitHub, но я не могу найти это сейчас. Есть проект .NET Core, но, похоже, он нигде не содержит класс. С тех пор я перешел в Tensorflow с использованием Python.
Показать ещё 1 комментарий
1

Согласно этой ссылке вы можете сделать это легко, используя Encog.Util.Arrayutil.NormalizeArray например:

Я предполагаю, что ваши данные сохранены в double[]

Encog.Util.Arrayutil.NormalizeArray normalizer = new Encog.Util.Arrayutil.NormalizeArray();
var normalizedData = normalizer.Process(dataMatrix, 0, 1);//(yourdata, low, high)
  • 0
    Привет, Ибрагим, я сам попробовал этот метод, но, похоже, я не получаю те же результаты, что и нормализация на основе файлов. Возможно, я делаю что-то еще не так. Спасибо за вашу помощь ... Я сосредоточу свои усилия на классе Encog.Util.Arrayutil.NormalizeArray.
  • 0
    @PrimeByDesign Не могли бы вы предоставить мне некоторые результаты нормализации на основе файлов?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню