【发布时间】:2014-05-26 03:13:37
【问题描述】:
我有以下代码来规范我的文档。我的文档包含以下方法来规范化我的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 列。
除了将其分解成越来越小的文档之外,还有什么方法可以加快规范化过程?
如果我确实将其分解,我怎么可能将它们组合成一个文档,因为规范化需要查看所有记录以找到给定列的最高和最低值?
【问题讨论】:
-
数据集的标准化正在改变所有数据集的值,你有 332K 和 25 列。那将是迭代 332.000*25 并对它们进行数学运算。 O(n) 其中 n 为 8.300.000。归一化时间尺度为 O(n)。如果你的数据没有改变,那么缓存结果呢?好奇的话可以在这里分析代码github.com/encog/encog-dotnet-core/blob/master/encog-core-cs/…
-
“缓存结果”是什么意思?我在您发送的源代码中没有看到任何缓存。
-
我的意思是,缓存归一化数据的结果,所以它只运行一次。您必须实现缓存方法。或者将数据标准化一次并将结果保存到文件中。然后下次加载规范化数据,而不是加载正常数据并应用规范化。
-
问题是,我什至无法让我的代码运行一次 - 所以我根本无法缓存它,因为它甚至不会通过。我等了一个多小时,仍然没有完成。有没有更好的方法来优化这么大的文件?
-
听起来很慢,你可以尝试在 Encog 上发帖heatonresearch.com/forum 我会开始验证 API 是否使用正确,并找出代码的哪一部分慢。是 norm.Analyze() 还是 norm.Normalize() 等..
标签: c# machine-learning normalization encog