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