我在进行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的输入列的所有类别,因此我在进行等边归一化之前,通过添加所有类别来进行归一化,代码如下:
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 = Falseanalyst.Script.Normalize.NormalizedFields(8).Action = Encog.Util.Arrayutil.NormalizationAction.Equilateral
然而,当我保存我的分析师文件时,
'save the analyst fileanalyst.Save(AnalystFile)
我只得到了基础文件中存在的那些类别,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_3、CLASS_2、CLASS_6、CLASS_8之外的其他类别,我会收到一个错误,显示无法确定CLASS_1的类别
我希望Encog分析师能够保存我手动输入的所有类别,而不仅仅是基础文件中存在的那些类别。我该怎么做呢?
回答:
我能够使用如下代码生成额外的[DATA:CLASSES](请原谅我的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));
但我认为,如果你使用一个包含缺失值的假行的数据文件会更好。因为你可能会创建更多的数据文件来进行数据的分离(训练、交叉验证、测试),并且还会创建归一化文件,我认为添加一个包含一些额外无意义行的额外文件不会太麻烦。