我已经使用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,pallet_l,petal_w,名称
然后添加具有预期输出的另一列,如下所示:
sepal_l,sepal_w,pallet_l,pallet_w,名称,预测,
但是我希望能够输入没有名称列的文件。
非常感谢,基兰
您可以通过多种方式完成任务。但是,典型的流程为:
获取数据->使用encog分析器中存储的归一化信息对其进行归一化--->创建归一化输入的输入数组->将其传递给训练有素的网络并计算输出(或预测分类问题中的类)
我已经针对该场景(在Pluralsight课程中介绍了该场景)更新了Iris演示(评估阶段):
这是代码的一部分:
// 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(请在执行之前编辑数据文件夹路径)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句