【问题标题】:How Do I Normalize CSV Input Data in Encog?如何在 Encog 中规范化 CSV 输入数据?
【发布时间】:2015-06-05 00:32:27
【问题描述】:

我已经使用 Jeff Heaton 的 Encog 库成功地制作了一个神经网络。我目前正在使用它来分类(鸢尾植物)。

我现在遇到的问题如下:

我有一个包含理想输出的数据集 CSV 文件,我将其用于训练。我希望使用不包含用于识别的输出字段的单独 CSV 文件。我遇到的问题是,当我使用没有输出字段的新 CSV 时,尝试规范化我的文件时出现以下错误:

错误:

"无法自动确定目标字段,请指定一个。

如果您指定了错误的文件格式,也会发生这种情况。"

方法是这样的:

        public void NormalizeFile(FileInfo SourceDataFile, FileInfo NormalizedDataFile)
    {
        var wizard = new AnalystWizard(_analyst);

        // This line errors
        wizard.Wizard(SourceDataFile, _useHeaders, AnalystFileFormat.DecpntComma); 

        var norm = new AnalystNormalizeCSV();
        norm.Analyze(SourceDataFile, _useHeaders, CSVFormat.English, _analyst);
        norm.ProduceOutputHeaders = _useHeaders;
        norm.Normalize(NormalizedDataFile);
    }

当我进行涉及标准化训练数据的训练时。我保存标准化数据。然后我在识别时重新加载这个标准化数据。

如果我将输出列保留在我正在识别的数据中,那么它可以工作!分类未知时新数据的案例呢?

例如当使用以下格式作为要识别的文件时:

sepal_l、sepal_w、petal_l、petal_w、名称

然后它添加另一列,预测输出如下:

sepal_l,sepal_w,petal_l,petal_w,名称,预测,

但是我希望能够在没有名称列的情况下输入文件。

非常感谢, 基兰

【问题讨论】:

    标签: csv neural-network classification encog


    【解决方案1】:

    您可以通过多种方式完成任务。但是,典型的流程是:

    获取您的数据 --> 使用存储在 encog 分析器中的归一化信息对其进行归一化 ---> 创建归一化输入的输入数组 --> 将其传递给经过训练的网络并计算输出(或预测分类问题中的类别)

    我已经为这个场景更新了Iris demo(评估阶段)(我在Pluralsight Course中介绍过:

    以下是部分代码:

        // Evaluating a new data set with no class information
             var extraEvaluationSet = EncogUtility.LoadCSV2Memory(Config.ExtraEvaluationFile.ToString(),
               network.InputCount, 0, true, CSVFormat.English, false);
    
             int extraFileCount = 0;
             using (var file = new System.IO.StreamWriter(Config.ExtraEvaluationFileOutput.ToString()))
             {
                 file.WriteLine("sepal_l,sepal_w,petal_l,petal_w,predicted");
                 foreach (var item in extraEvaluationSet)
                 {
                     //normalize input
                     double normalized_sepal_l = analyst.Script.Normalize.NormalizedFields[0].Normalize(item.Input[0]);
                     double normalized_sepal_w = analyst.Script.Normalize.NormalizedFields[1].Normalize(item.Input[1]);
                     double normalized_petal_l = analyst.Script.Normalize.NormalizedFields[2].Normalize(item.Input[2]);
                     double normalized_petal_w = analyst.Script.Normalize.NormalizedFields[3].Normalize(item.Input[3]);
                     double[] inputToNetwork = { normalized_sepal_l, normalized_sepal_w, normalized_petal_l, normalized_petal_w };
    
                     count++;
                     //output
                     var output = network.Compute(new BasicMLData(inputToNetwork));
    
                     int classCount = analyst.Script.Normalize.NormalizedFields[4].Classes.Count;
                     double normalizationHigh = analyst.Script.Normalize.NormalizedFields[4].NormalizedHigh;
                     double normalizationLow = analyst.Script.Normalize.NormalizedFields[4].NormalizedLow;
    
                     var eq = new Encog.MathUtil.Equilateral(classCount, normalizationHigh, normalizationLow);
                     var predictedClassInt = eq.Decode(output);
                     var predictedClass = analyst.Script.Normalize.NormalizedFields[4].Classes[predictedClassInt].Name;
                     var resultLine = string.Format("{0},{1},{2},{3},{4}", item.Input[0], item.Input[1], item.Input[2], item.Input[3],predictedClass);
                     file.WriteLine(resultLine);
                     Console.WriteLine("Count :{0} Properties [{1},{2},{3},{4}] ,Predicted : {5} ",
                          extraFileCount, item.Input[0], item.Input[1], item.Input[2], item.Input[3], predictedClass);
    
                 }
    
             }
    

    演示代码可在以下链接中找到: http://bit.ly/1GRg0u7(执行前请编辑数据文件夹路径)

    【讨论】:

    • 阿布舍克你是明星!太感谢了。今天我将通读并获得正确的理解!
    • 我不确定如果没有 tge 向导这将如何工作,但我稍后会尝试一下
    • 有效!!精彩的!谢谢...我把它拼凑在一起,所以我重构了我拥有的东西并让它变得漂亮。
    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 2023-03-29
    • 2019-09-19
    • 2019-07-03
    • 2017-12-10
    • 1970-01-01
    • 2015-08-22
    • 2012-01-21
    相关资源
    最近更新 更多