C# 如何在Encog.NET中加速规范化

C# 如何在Encog.NET中加速规范化,c#,machine-learning,normalization,encog,C#,Machine Learning,Normalization,Encog,我有以下代码来规范我的文档。我的文档包含以下方法来规范我的SmallShuffledTrainingDataCSV static void Normalize() { Console.WriteLine("Normalizing..."); var analyst = new EncogAnalyst(); var wizard = new AnalystWizard(analyst); wizard.Wizard(SmallShuffledTrainingDa

我有以下代码来规范我的文档。我的文档包含以下方法来规范我的
SmallShuffledTrainingData
CSV

static void Normalize()
{
    Console.WriteLine("Normalizing...");
    var analyst = new EncogAnalyst();

    var wizard = new AnalystWizard(analyst);
    wizard.Wizard(SmallShuffledTrainingData, true, AnalystFileFormat.DecpntComma);

    // customer id
    analyst.Script.Normalize.NormalizedFields[0].Action = Encog.Util.Arrayutil.NormalizationAction.PassThrough;

    var norm = new AnalystNormalizeCSV();
    norm.Analyze(SmallShuffledTrainingData, true, CSVFormat.English, analyst);
    norm.ProduceOutputHeaders = true;
    norm.Normalize(SmallShuffledTrainingDataNormalized);
    analyst.Save(AnalystFile);
}
我只想标准化一列,因为这需要很长时间

我的文档有332k行和25列

除了将规范化过程分解为越来越小的文档之外,还有什么方法可以加快规范化过程吗


如果我把它分解了,我怎么可能把它们合并成一个文档,因为规范化需要查看所有记录,以找到给定列的最高值和最低值?

首先,谢谢!在CSV向导的分析阶段,速度慢是一个“不可伸缩性”问题。这会出现在特别大的文件上。我可以用上面的代码重现这个问题。我刚刚在GitHub中检查了一个修复程序。您可以在这里看到提交

这将进入Encog 3.3(尚未发布)。但是你可以从GitHub获得修复。使用此修复程序,我可以在几分钟内规范化大小类似的文件

其他一些建议

如果添加此行:

norm.Report=新的ConsoleStatusReportable()

您将获得进度更新

您还需要指定预测字段,否则您将在稍后遇到错误。大概是这样的:


wizard.TargetFieldName=“字段:1”

数据集的规范化正在改变所有数据集值,您有332K和25列。这将是迭代332.000*25并对其进行数学运算。O(n),其中n是8.300.000。归一化时间标度为O(n)。如果数据不变,缓存结果如何?如果您感到好奇,那么可以在这里分析代码“缓存结果”是什么意思?我在您发送的源代码中没有看到任何缓存。我的意思是,缓存规范化数据的结果,因此它只运行一次。您必须实现缓存方法。或者将数据标准化一次并将结果保存到文件中。然后下次加载规范化数据,而不是加载普通数据并应用规范化。问题是,我甚至无法让我的代码进行一次运行-因此我根本无法缓存它,因为它甚至无法运行。我等了一个多小时,还没做完。有没有更好的方法来优化这么大的文件?听起来真的很慢,你可以试着把它发布在Encog上。我将开始验证API是否正确使用,并找出代码中哪部分速度慢。是norm.Analyze()还是norm.Normalize()等等…谢谢!为了解决这个问题,我必须下载源代码和您的代码,然后重新编译DLL并用它替换现有的DLL?是的。从这里获取代码。然后选择下载zip。重建一个发布DLL并使用它。谢谢,速度肯定更快。但是,它不会规范化一个特定的列。如果你有时间帮忙的话,我已经在这里详细说明了这个问题;所以它一定把安可搞糊涂了。