将缺失的 类 添加到 encog 分析师

Adding missing classes to encog analyst

我正在做 encog 等边归一化。我的 encog 分析师代码如下所示:

 'Analyst
 Dim analyst = New EncogAnalyst()
 'Wizard
 Dim wizard = New AnalystWizard(analyst)
 Dim BaseFile As FileInfo = FileUtil.CombinePath(New FileInfo(CSV_EXPORTS_PATH), 'baseFile.csv')
 wizard.Wizard(BaseFile, True, AnalystFileFormat.DecpntComma)

虽然我的基础文件不包含索引 8 处输入列之一的所有 classes,因此,我通过在执行等边归一化之前添加所有 classes 进行归一化,如下所示:

analyst.Script.Normalize.NormalizedFields(8).Classes.Clear()
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_1",0))
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_2",1))
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_3",2))
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_4",3))
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_5",4))
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_6",5))
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_7",6))
analyst.Script.Normalize.NormalizedFields(8).Classes.Add(New Encog.Util.Arrayutil.ClassItem("CLASS_8",7))
analyst.Script.Normalize.NormalizedFields(8).Output = False
analyst.Script.Normalize.NormalizedFields(8).Action = Encog.Util.Arrayutil.NormalizationAction.Equilateral

但是,当我保存分析师文件时,

'save the analyst file
analyst.Save(AnalystFile)

我只得到基本文件中的那些 classes,来自 ega 文件的片段如下所示:

[DATA:CLASSES]
"field","code","name"
"TYPE_CLASS","CLASS_3","CLASS_3",1
"TYPE_CLASS","CLASS_2","CLASS_2",12
"TYPE_CLASS","CLASS_6","CLASS_6",33
"TYPE_CLASS","CLASS_8","CLASS_8",1

因此,当我再次加载此 .ega 文件时,如果输入包含一些 class,则 CLASS_3、CLASS_2、CLASS_6、CLASS_8,我收到一条错误消息,提示 无法确定 class for:CLASS_1

我希望 encog 分析师保存我手动输入的所有 classes,而不仅仅是基本文件中的那些。我该怎么做?

我可以使用这样的代码生成额外的 [DATA:类](请原谅我的 C# 代码,我不是 VB 程序员):

        analyst.Script.Fields[8].ClassMembers.Clear();
        analyst.Script.Fields[8].ClassMembers.Add(new Encog.App.Analyst.Script.AnalystClassItem("CLASS_1", "CLASS_1", 0));
        analyst.Script.Fields[8].ClassMembers.Add(new Encog.App.Analyst.Script.AnalystClassItem("CLASS_2", "CLASS_2", 1));
        analyst.Script.Fields[8].ClassMembers.Add(new Encog.App.Analyst.Script.AnalystClassItem("CLASS_3", "CLASS_3", 2));
        analyst.Script.Fields[8].ClassMembers.Add(new Encog.App.Analyst.Script.AnalystClassItem("CLASS_4", "CLASS_4", 3));

但我认为,如果您使用包含缺失值假行的数据文件,情况会好得多。由于无论如何您可能会创建更多的数据文件来进行一些数据分离(训练、交叉验证、测试),并且还会创建规范化的文件,所以我不认为添加一个带有一些额外无意义行的额外文件会太突兀。