Поэтому я использую библиотеку 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 файл на диск.
Позже я понял, что мне действительно нужен в качестве анализатора, который позволил бы мне автоматически нормализовать смесь качественных (номинальных) и количественных данных (как и реализация 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);
}
Согласно этой ссылке вы можете сделать это легко, используя 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)