문제

Encog 3.x에서 어떻게합니까? 정상화하십시오 데이터, 그걸 써 훈련을 위해 거절 결과?

이것에 대한 좋은 문서는 없으며, 이들 각각을 적용하는 간단한 예는 Encog의 학습 곡선을 줄이는 데 먼 길을 갈 것입니다. 나는 아직 그것을 모두 알아 내지 않았지만 여기에 몇 가지 자료가 있습니다.

(1) *Encog 3.0은 어떻게 정규화됩니까?*

이 코드는 새로운 정규화 된 CSV를 저장해도 괜찮습니다. 분석가normalizecSV를 가져 와서 실제로 사용하기 위해 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) *비정규 화*

나는이 모든 것을 취하고 적절한 데이터 유형의 Max 's and Min's에 따라이를 제거하는 방법에 대해 총 손실을 입었습니다.

도움이 되었습니까?

해결책

다음은 Encog 프레임 워크를 사용하여 정규화 및 피식에 대한 자세한 정보를 얻을 수있는 리소스가 몇 가지입니다.

Jeff Heaton 자신이 쓴이 위대한 전자 책, 1. C#의 Encog3로 신경망을 프로그래밍하여 Heaton, Jeff의 2 판 (2011 년 10 월 2 일)2. Jeff Heaton (2008 년 10 월 2 일)의 C#, 2nd Edition의 신경망에 대한 소개에는 Encog 사용자를위한 eBook이 있어야합니다.

당신은 또한 pluralsight 코스를 볼 수 있습니다.Encog를 사용한 기계 학습 소개"여기에는 정규화 및 피식의 예가 거의 포함되지 않습니다.

이제 귀하의 쿼리와 관련하여 : "분석가 NormalizeCSV를 가져 와서 MLDATASET으로 변환하여 실제로 사용하는 방법은 명확하지 않습니다."

분석법 파일을 정상화하기 위해 AnalystnormalizeCSV를 사용할 수 있습니다. 그런 다음 Encogutility 클래스의 Loadcsv2Memory를 사용하여 정규화 된 교육 파일을로드하여 ML 데이터 세트를 얻을 수 있습니다. 다음은 C#의 샘플 코드입니다.

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

정규화 된 훈련 파일을 첫 번째 매개 변수로, 네트워크 입력 뉴런 카운트로, 두 번째, 네트워크 출력 뉴런 수는 CSV 파일에 헤더가있는 경우 세 번째, 네 번째 매개 변수는 부울입니다. 그러면 형식을 다섯 번째 매개 변수로 언급 할 수 있습니다. 매개 변수는 중요합니다.

따라서이 데이터 세트가 메모리에 있으면 교육에 사용할 수 있습니다. 교차 검증 및 평가 단계에서도 비슷한 접근법을 취할 수 있습니다.

denormalization과 관련하여 먼저 분석가 파일을 지속 할 수 있으며 나중에 분석 파일을 사용하여 개별 열을 제거 할 수 있습니다. 예를 들어 :

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

비슷한 접근법은 필드를 제거하여 클래스 레이블을 얻을 수 있습니다. 예를 들어

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

다른 팁

Encog Analyst는 데이터 정규화에 환상적입니다. CSV 파일에 저장된 정보를 가져 와서 정규화 된 필드와 해당 인코딩 유형 (N 정형 인코딩 중 1 개 포함)을 자동으로 결정할 수 있습니다.

이것의 유일한 단점은 논리가 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