建立多个神经网络模型我正在使用神经平台进行预测,而对于神经网络还是陌生的人,我只对所有输入参数略有熟悉:隐藏层数,节点/隐藏层数,提升模型,学习率和游览。 我想做的是尝试最小化RMSE和验证模型错误分类率。 我一直在做的事情是逐个迭代地更改每个参数,保存模型性能参数,然后将它们粘贴到新的JMP表中,但这将需要几天的时间,因为层,节点,游览,等等。是否可以向JMP Pro构建,例如建立1000个模型并将数据转储到表中的地方编写脚本,这样我就不必手动更改每个模型输入参数了?
#隐藏层:1或2
#S形节点:0、1、2、3或4
#线性节点:0、1、2、3或4
#径向节点:0、1、2、3或4
#提升模型:不知道,也许是1-5?
#学习率:0-0.5,以0.1为增量
#tours:1、5、10、20、100
这样就等于2 x 5 x 5 x 5 x 5 x 5 x 5 =〜30,000
我想,一旦我对数据集更加熟悉,就可以将其中的一些混为一谈。 当然,拥有许多节点和大量的提升模型是没有意义的(某些其他组合也没有意义),但是我们仍在谈论潜在的数百个值得测试的模型。 这样的模型筛选/比较肯定可以编写脚本,对吗?
分析工具脚本编写回复:建立多个神经网络模型您可以设计较少级别的实验以适合二阶模型,然后使用该模型来优化设置。 此外,您可以制作每个模型,然后通过右键单击结果表之一并选择“制作为组合表”,一次提取所有结果。
回复:建立多个神经网络模型马克,谢谢您的建议。 我尝试过的第二个失败了。 我知道其他平台上的“合并表”选项,但也许出于某种原因它被排除在神经平台之外。 奇怪的是,按住选项键进行选择的“选项”把戏适用于报表的所有部分,在神经平台中不起作用,否则将加快工作速度。
如果我可以将DOE中的X作为神经网络参数(#节点,#tours等),以使RSME最小化为目标,那将是很酷的事情,但是由于您必须输入神经模型启动的特定框中的参数。 您必须执行一些非常高级的脚本编写,即使那样,我也不确定DOE和Neural是否可以正确通信。 但是,如果外面有人知道我可以使神经平台基本运行此屏幕快照中反映的模型的方式(是总计的子选择),我将不胜感激。 换句话说,第一个屏幕快照表中的值将需要转到第二个屏幕快照中的相应输入框(即神经模型启动)。
回复:建立多个神经网络模型顺便说一句,获取所有相关功能以显示与您正在主动选择的功能相同的信息的“选项”技巧实际上是Mac上的“命令”技巧(因此以前无法正常工作)。
回复:建立多个神经网络模型你好@abmayfield ,
这是我一直想编写一段时间的脚本,它确实很有趣,您的帖子激起了它的前进,谢谢! 我一直想有一种方法来调整NN平台一段时间,因为它对初始条件非常敏感,并且手动完成它相当慢。
因此,我改编了我为其他模型平台制作的一些脚本,以使其调整过程自动化,例如,增强树,引导森林和XGBoost平台。 这些脚本应保存到您的数据表中,并使用绿色的热键运行。
希望您了解一些有关脚本的知识,并且知道如何将这些脚本适应您的特定情况/数据结构/列名等。 我输入了一些评论,以尝试帮助解释每个较大的组中的工作。 我要附加两个脚本-一个用于连续的Y,另一个用于标称/有序Y。 我确实必须进行测试,以查看输出Y是标称还是有序的,因为Number Col Box()值根据此而变化。 我将示例数据中的Big Class Families.jmp数据表用作测试数据集。 我还包括两个我使用数字NN调整或名义/常规NN调整生成的输出数据表。 我使用:age,:weight:,:height在:sex上进行了标称处理,然后将:age从Ordinal更改为Continuous,并使用:weight和:sex建模了年龄,以进行连续的NN调整。拟合度和统计数据太可怕了,但这仅是为了查看JSL是否有效。 我还通过对:age进行分层对数据表添加了:Validation列,只是为了检查它们是否都正常工作。
我确信其他人可以更优雅地编写脚本,以测试Y()输入列的建模类型为Continuous,Nominal或Ordinal,然后插入适当的Number Col Box()值以仅使用单个JSL代码。
您将需要编辑dt << Nerual()部分的Y()和X()输入,以及在其中获取报告窗口名称的部分,因为它以您正在建模的变量命名。
原则上,NN调整表可以像填充空间的DOE一样对待,其中上下限是您想要设置的值,除了其中的一些设置,例如N_Layers只能为1或2,因为JMP仅允许1或2层。 Penalty_Method是仅在NN平台中有效的选项,并且“变换协变量”和“鲁棒拟合”仅采用0或1(关闭或打开)的值。 我也包括了NN调整表。
如果您有任何疑问,请告诉我。
这是我的名义/顺序建模类型的代码:
Names Default To Here( 1 );
dt = Data Table( "Big Class Families" );//enter the name of the current data table
dt_parms = Data Table( "NN Tuning" );//enter name of parameter data table for tuning the NN
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );//this copies the tuning table with all the different rows in it
//these commands create columns to record the fit results
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//This part just creates a separate modelling progress, delete if you don't want it.
i = 1;
imax = N Row( dt_parms );
dlgStatus = New Window( "Overall Modeling Progress",
V List Box(
Text Box( " Overall Modeling Progress ", <<SET font="" size=""></SET>
我不明白的一件事是,我在为NN平台运行日志窗口时收到有关创建的日志窗口的警告,但我从未从其他平台得到它。 我无法跟踪该警告的来源,但它仍然可以正确运行。 也许有人可以修复我的部分代码?
意外的“,”。 也许缺少“)”。
尝试解析“ <<”运算符的操作数。
第23行第10栏:))►,
最后一点:请小心设置,因为如果您具有大量的增强,巡视或传递函数,那么运行模型将花费很长时间。 只是要小心不要过分。
希望这可以帮助!,
DS
回复:建立多个神经网络模型是! 这正是我想要的:具有与NN平台同步的所有NN输入参数(例如,TanH节点数,层数等)的表。 我还没有尝试过,但我确实想像会花点时间,但是我使用的是20个样本x 90个预测变量“实践”数据集,因此它是可行的。 实际上,我实际上仅发现激活类型和节点数量(以及游览次数)实际上降低了我的RMSE,而提升并没有太大帮助。 但是即使那样,这也将比我计划运行的所有约500个模型快得多(谢天谢地,由于我希望保持在4个节点/激活类型以下,因此数量不及我昨天打算运行的数量)。 我明天将尝试一下,并让所有人知道它的进展。
回复:建立多个神经网络模型好吧,我失败了,但是我认为这可能是因为一些微小的脚本错误。 我将您的NN调整表与数据(附加)一起使用,并进行了所有必要的更新(我使用了三个训练+验证+测试样本)。 如果运行最后一个脚本(“神经网络比较”),它将建立新表,但不运行任何分析。 我只包含了几个X术语,但实际上它将是“标准化数据”组中的所有86列。 当我使用调试器时,它表示发生了问题
”对于(我= 1个,i <= imax,i ++”区域。 我希望/猜到一个更有能力的脚本编写者可能会在几秒钟内找到问题!
回复:建立多个神经网络模型你好@abmayfield ,
感谢您共享数据表,它有助于调试您在脚本中所做的更改。
我注意到了几件事:
- 您需要为要记录的“测试”数据集统计信息添加其他列。
- 您不小心删除了imax的定义,即参数表的行数
- 您还意外地将调用更改为NN平台,该脚本在脚本中说dt << Neural(),在该平台上它发送命令以对数据表“ dt”进行神经网络建模。 您已将其更改为其他内容。
- 窗口“ w”的定义必须具有NN窗口的全名,如果您只运行一个X,则显然JMP会将其作为窗口名的一部分放入,因此它必须同时位于两个窗口中GetName命令及其下的IF语句。 但这仅适用于使用单个X建模的情况。 如果使用多个,则无需在窗口名称或IF语句中使用“ by ......”。
- 最后一部分是确保在Number Col Box()命令中正确调用了训练,验证和测试数据的统计信息。
以下代码适用于您的数据表(还附带了修改的脚本)。 它可以与我之前给出的NN Tuning表一起使用。
如果您真的要使用所有86列,则需要将它们手动放入脚本的X(col1,col2,...)部分中。 然后,您还应该编辑GetName部分,因为它不会包含所有86个名称,而只是带有响应列的窗口名称。
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(
:OFA...22_c0_g2_i1.p1
),
Validation ( :Validation with test ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
希望这可以帮助!,
DS
回复:建立多个神经网络模型啊哈! 非常感谢您为我重新进行此操作。 我显然不了解脚本,因此我只是将“ Neural”更改为数据表的名称....显然不起作用。 将数据表的名称更改为“ Neural”后,添加了“测试”列,并进行了您建议的其他更改,它就可以了。
现在,我可能要做的是使用DOE进行有条件的析因设计(因为,正如您所指出的,您无法使用多个隐藏层进行增强),并在我的工作计算机上运行数百个模型(以免对我的8个模型造成过大的负担-GB RAM笔记本电脑)。
我觉得您的脚本需要成为GUI或加载项(任何使用者?)。 我正在进行Beta测试的JMP Pro 16,具有非常出色的“模型筛选”工具,但我认为它可以跨建模类型(例如PLS与Gen-Reg)进行测试,而不会在可能存在的数千种模型中进行测试。内置在每种建模类型中(否则它可能永远不会停止运行)。 我听说过“模拟器”,但是我认为这是在做一些不同的事情(不会生成大量的模拟模型),尽管我可能是错的。 再次感谢您的帮助。 这肯定可以节省我几天的时间!
回复:建立多个神经网络模型你好@abmayfield ,
很高兴它解决了您的问题。
借助基于树的建模(XGBoost,增强树和引导林),您可以轻松地在JMP中使用调整表GUI来运行许多模型。 但是,缺点是它占用了大量RAM。 以这种方式运行它的好处是,您可以运行数千个不同的参数设置中的10个,并且它不会消耗太多的内存,而只会消耗CPU消耗。 我使用引导森林执行了多达40k个不同的设置(速度很慢),并且在我的工作笔记本电脑(32 GB RAM和2GHz CPU)上可能要花几天时间。
我也是JMP 16的较早采用者,模型筛选非常好,但是正如您所指出的,它并没有调整任何模型,这可能会引起误解。 它仅使用默认设置,但不一定总是创建预测模型的最佳设置。 它至少可以帮助您确定哪些平台值得花时间进行进一步调整,而哪些则不值得研究。
您可能还需要考虑使用SVM平台对名义数据进行建模,因为这对于此类数据也是一种很好的方法。
至于模拟器,则有所不同,它是一种用于在不同初始条件下测试估计的方法(随机化)。 这将给出估计值的分布,并为您提供原始估计的置信区间,然后您可以确定具有给定估计的模型是否良好。
对于DOE,您可以进行因子分解,甚至可以在适当设置因子的情况下作为空间填充设计来运行,我认为该平台还允许有条件的约束。 另外,您可以考虑对预测变量进行筛选或引导,以查看您是否实际上需要全部89个预测变量,或者是否只能使用较小的子集。
最后一点,由于您的数据表又短又宽,因此您可能需要考虑使用而不用使用验证列的方法,而采用“留一法”进行验证。 如果这样做,则必须为此编辑脚本。
祝好运!,
DS
回复:建立多个神经网络模型更出色的建议,尤其是关于验证类型的建议。 我看到Neural支持回退,Kfold或行排除(据此,我猜测我只是随机选择几行来省略)。 我是否要更改脚本以更改验证类型,我是否只需更改“ Validation(:带有测试的:Validation)”行? 在JMP眼中,保留的样本是否等同于验证样本? 如果没有,我将需要删除验证列(或重命名它们),并且测试列也必须删除。
回复:建立多个神经网络模型你好@abmayfield ,
Kfold也是验证短数据集的另一种好方法。 是的,您可以将行排除设置为行状态,这可以通过选择“测试”数据集并将行状态设置为“已排除”来实现。 如果使用Kfold或Holdback,则JMP会将其用于数据验证,而不是对数据进行测试。 希望您还有一个单独的数据集,可以用作测试数据,而不必与训练和验证数据放在同一数据表中。
我只是使用Kfold进行验证,然后注释掉不需要运行脚本的部分。 以下是带有NN平台5倍验证设置的编辑版本。应该可以,对我有用。
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
//dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
//dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
//dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
//dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
//dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(:OFA...22_c0_g2_i1.p1 ),
Validation ( \!"KFold\!", 5 ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
//ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
//Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
//dt_results:Generalized R² Test[i] = Test_stats[1];
//dt_results:Entropy R² Test[i] = Test_stats[2];
//dt_results:RMSE Test[i] = Test_stats[3];
//dt_results:Mean Abs Dev Test[i] = Test_stats[4];
//dt_results:Misclassification Rate Test[i] = Test_stats[5];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
//dt_results:Sum Freq Test[i] = Test_stats[7];
);
祝好运!,
DS
回复:建立多个神经网络模型哇,由于您的脚本帮助,我无法相信我已经在午餐前运行了300个神经网络模型。 我希望这能像我想象的那样被接受并“赞誉”,当越来越多的人开始看到NN平台的价值时,他们会倾向于这样的事情,特别是如果它是一个全新的数据集,而您却不是真的知道可以微调的NN模型输入参数的数量令人困惑的地方“潜入”(有时即使只是将学习率从0.05提高到0.1,也会产生巨大的差异)。 接下来,我将介绍不同的验证方法(验证列vs.保留vs. KFold)。 鉴于我(目前)的样本量很小,绝对需要谨慎(希望使用这些初步数据来获得增加更多“行”(即珊瑚)的资金)。
回复:建立多个神经网络模型很高兴听到它正在为您效劳。 祝您建模愉快! 您可能还需要检查其他模型平台,然后在测试数据集上比较模型以查看哪个是最佳预测器。
DS回复:建立多个神经网络模型我有一个(可能很简单)脚本问题。 说我想将输入dt更改为另一个。 我不应该能够复制并粘贴脚本,并将dt从“ Neural”替换为其他东西吗?
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
如果我删除了原始的“ Neural”文件,并用具有完全相同的信息和不同名称的另一个表替换了该文件,则该脚本将无法工作! 是否有必要在两个数据表中拥有完全相同的数据,其中一个表名为“ Neural”? 也许我错过了那部分!
回复:建立多个神经网络模型你好@abmayfield ,
如果您返回并查看脚本,第二行将定义分析期间要使用的数据表。 JSL代码dt = Current Data Table()定义了一个本地变量“ dt”,该变量随后将在脚本的其余部分中使用,而不必按名称调用数据表。 同样,dt_parms是分配给NN调整表“ NN调整”的局部变量。 这两个表实际上是您提供给脚本的唯一内容。 其余的都是内部的。
如果将JSL代码复制/粘贴到新的数据表中,它应该会自动运行,因为您正在该数据表中本地运行它。
除了定义Y()和X()以及Validation()方法之外,您不应修改dt << Nerual()调用。 JSL代码dt << Nerual()是告诉JMP对数据表“ dt”执行NN建模的命令。 因此,在代码的开头定义了dt。
您还需要修改w = Window()调用,以反映NN报告窗口及其下方的Regex()的标题。 最后,根据您实际上是否将“测试”数据集作为验证列的一部分,然后您将要注释掉(在行首使用//命令)或删除注释它在创建Test结果列以及Test_stats定义时在代码的开头,并且代码将结果写入新的输出数据表。
除此之外,您根本不需要进行太多编辑。
关于最后一个问题,这取决于您如何实现代码。 如果要从数据表中运行它,即将其保存在数据表的脚本部分中,并且通过绿色的热按钮运行它,则只需更改Y()和X( )是您用作预测变量和响应,以匹配新数据表中的列名。 当然,您需要打开“ NN调整”表。 另一方面,如果将其作为单独的脚本运行,则可能需要将dt的定义从dt = Current Data Table()更改为dt = Data Table(“”),并在其中插入引号之间的新数据表的名称。
您所指的“神经”不是数据表,而是用于在指定数据表上运行神经网络模型的JMP命令。 “ <<”命令表示对左侧对象执行<<右侧的操作。 在代码开头附近,您可以使用new column命令看到这一点。 代码说dt_results << New Column()时,代码告诉JMP为对象dt_results创建新列,该对象是从dt_parms数据表生成的子集数据。
希望这可以帮助!,
DS
回复:构建多个神经网络模型太好了。 这回答了我的一些其他问题。 现在,我唯一遇到的问题是,当我在新数据表中复制、粘贴和运行脚本时,出现大纲框错误,您在脚本注释中提到了该错误。 “大纲框的访问或评估中的预期字符 arg 1。” 这意味着什么?? 我增加和减少了数字,但每次都收到相同的错误消息,并且脚本无法运行。 我什至不知道什么是大纲框。 奇怪的是树结构是相同的。 我只是更改了文件名。 文件名较长。 也许这意味着我需要一个更大的轮廓框?