質問

Encog 3.x では、どうすればよいですか ノーマライズ データ、 これを使って トレーニング用、そして 非正規化する 結果?

これに関する適切なドキュメントはなく、これらのそれぞれを適用する簡単な例は、Encog の学習曲線を短縮するのに大いに役立ちます。まだすべてを理解しているわけではありませんが、いくつかのリソースを紹介します。

(1) *Encog 3.0 はどのように正規化しますか?*

このコードは、新しい正規化された CSV を保存するのに問題ありません。ただし、ここでは AnalystNormalizeCSV を取得し、それを実際に使用するために 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) *Encog (Java) を使用して CSV ファイルを正規化するにはどうすればよいですか?*

このコードも、正規化された 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。 C# での Encog3 を使用したニューラル ネットワークのプログラミング、第 2 版、Heaton、Jeff 著 (2011 年 10 月 2 日)2. C#のニューラルネットワークへの導入、ジェフヒートンによる第2版(2008年10月2日)これらは、ENCOGユーザー向けの電子書籍が必要です。

「」のマルチサイトコースもご覧ください。ENCOG を使用した機械学習の概要」、これには正規化と非正規化の例もいくつか含まれています。

さて、あなたのクエリについて:「ここでは、AnalystNormalizeCSVを取得し、それを実際に使用するためにMLDataSetに変換する方法が明確ではありません。」

AnalystNormalizeCSV を使用してトレーニング ファイルを正規化できます。次に、EncogutilityクラスのLoadCSV2Memoryを使用して、正規化されたトレーニングファイルをロードしてMLデータセットを取得できます。以下は C# のサンプルコードです。

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

最初のパラメータとして正規化されたトレーニング ファイル、2 番目にネットワーク入力ニューロン数、3 番目にネットワーク出力ニューロン数を受け取ります。csv ファイルにヘッダーがある場合、4 番目のパラメータはブール値です。5 番目のパラメータとして形式を指定でき、6 番目のパラメータとして指定できます。パラメータは意味を持ちます。

したがって、このデータセットをメモリに保存したら、トレーニングに使用できます。同様のアプローチは、相互検証および評価ステップでも採用できます。

非正規化に関しては、最初にアナリスト ファイルを永続化し、後でアナリスト ファイルを使用して個々の列も非正規化することができます。例えば ​​:

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

同様のアプローチを非正規化フィールドに使用して、クラス ラベルを取得することもできます。例えば

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

他のヒント

ENCOGアナリストは、データを正規化するのに最適です。 CSVファイルに保存されている情報を使用して、正規化されたフィールドとそのタイプのエンコード(Nの1つのNoqueratal Encodingを含む)を自動的に決定できます。

これの唯一の欠点は、ロジックが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