添加缺失的类以阻止分析员

时间:2015-12-06 16:25:19

标签: machine-learning neural-network normalization 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 = False
analyst.Script.Normalize.NormalizedFields(8).Action = Encog.Util.Arrayutil.NormalizationAction.Equilateral

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

'save the analyst file
analyst.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分析师保存我手动提供的所有类,而不仅仅是基本文件中的那些类。我该怎么做?

1 个答案:

答案 0 :(得分:1)

我能够使用这样的代码生成额外的[DATA:CLASSES](parden我的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));

但是我认为如果您使用带有假行的数据文件来丢失值,那将会好得多。既然您可能会创建更多数据文件来进行一些数据隔离(培训,交叉验证,测试),并且还创建规范化文件,我不认为添加额外的文件有一些额外的无意义的行会太突兀了。