سؤال

في 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) *كيف أقوم بتطبيع ملف 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) *إزالة الطبيعية*

أنا في خسارة تامة لكيفية أخذ كل هذا وأضعف وفقًا لـ Max و Min's المناسبة.

هل كانت مفيدة؟

المحلول

فيما يلي موارد قليلة ، حيث يمكنك الحصول على معلومات أكثر تفصيلاً حول التطبيع وإعادة التمييز باستخدام إطار ENCOG.

هذه الكتب الإلكترونية العظيمة التي كتبها جيف هيتون نفسه ، 1. برمجة الشبكات العصبية مع ENCOG3 في C#، الطبعة الثانية من قبل هيتون ، جيف (2 أكتوبر 2011)2. مقدمة إلى الشبكات العصبية للنسخة الثانية ، الطبعة الثانية بقلم جيف هيتون (2 أكتوبر 2008) يجب أن تحتوي هذه الكتب الإلكترونية لمستخدمي ENCOG.

يمكنك أيضًا إلقاء نظرة على دورة Pluralsight على "مقدمة للتعلم الآلي مع Encog"، وهذا يشمل أيضًا أمثلة قليلة على التطبيع وتوضيحها.

الآن فيما يتعلق باستفساراتك: "ليس من الواضح هنا على الرغم من كيفية أخذ المحلل NormalizeCSV وتحويله إلى mldataset لاستخدامه فعليًا."

حسنًا ، يمكنك استخدام AnalystNormalizeCSV لتطبيع ملف التدريب الخاص بك. وبعد ذلك ، يمكنك استخدام LOADCSV2Memory من فئة Encogutility لتحميل ملف التدريب الطبيعي للحصول على مجموعة بيانات 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