自动化神经网络大家好,
我正在开展一个项目,该项目使用神经网络模型来预测由其唯一坐标定义的不同位置(大约 1000 个)的土壤湿度。JMP 中神经网络的相同结构可应用于所有站点。 所以,我正在考虑自动化工作。 它可以是一个 JMP 脚本,可以找到位置协调器 (X, Y)、提取必要的数据输入并运行神经网络。 最后,脚本可以保存模型的报告。 您有什么建议或建议可以与我分享吗?
先感谢您。
任何建议或讨论表示赞赏。
回复:自动化神经网络你好@Marco1 ,
我不确定我是否遵循为什么您想要在没有输出列的情况下预测一定数量的期间。 如果你知道你的模型有一组很好的预测变量,无论是 NN 还是基于树的,还是 kNN,那么我认为这并不重要,关键在于模型是否能很好地预测接下来的事件。 您必须向模型提供 Y 列,否则它们没有结果可以尝试预测模型的训练和验证。 这些平台允许您将预测公式保存到数据表或将它们发布到 Depot 以与您生成的其他预测进行比较,因此您可以在新数据上测试它们并查看哪个模型更好——这取决于您使用的指标正在查看以及您是在进行分类还是回归。
当我有一些额外的时间时,我将不得不研究帕累托边界,谢谢你的插件。
虽然如果一站式 GUI 能够在 JMP 中运行所有不同的建模平台会很棒,但我现在要承担的责任有点多。 也许在未来的版本中我可以添加额外的平台。 现在,它可以运行神经网络、提升树、引导森林和 XGBoost。 我也计划将 kNN、朴素贝叶斯和 SVM 添加到列表中。 解决错误和诸如此类的问题都需要时间,尤其是在调用多个不同平台时。
谢谢!,
DS
回复:自动化神经网络嗨迪德里希,
很好的解释,一个疑问:关于用JMP神经网络预测时间序列,如何实现对未来2、3、4、5或更多时期的预测,输入列为1、2、3或更多? ...也就是说,没有输出列。
关于多目标优化(帕累托边界),我附上了一个非常好的 GUI,可以从 JMP 社区下载,也许它有助于更新您正在使用的 GUI。
如果 GUI 可以优化 JMP 拥有的任何平台的参数,包括时间序列(ARIMA、Winter ...),避免用户不得不做一些优化可以做的工作,那就太好了。
感谢您的帮助!
问候,
马可
回复:自动化神经网络你好@giaMSU ,
如果你真的想用不同的验证方案比较不同的神经网络,我会将随机种子设置为某个数字,比如 12345。 这样,它将始终从同一点开始。 它从哪里开始取决于模型中使用的参数——以及验证集,但至少所有这些都将从同一个地方开始。根据我的经验,拥有一个好的验证方案非常重要。 如果通过选择特定示例进行训练或验证,您可能会创建一个高度不平衡的数据集,该数据集更喜欢一个结果而不是另一个结果,这最终会导致训练过度拟合而不能很好地预测验证集,反之亦然。 您甚至可以考虑制作 K 折验证列,这是一种嵌套的 k 折验证方案,然后您可以查看每个嵌套列的拟合预测甚至拟合统计数据。 只是一个想法。
祝你好运!,
DS
回复:自动化神经网络你好@Marco1 ,
我不确定 JMP 中的哪个平台会用于生成 Pareto 边界 DOE。 在我现在正在更新的 GUI 中,我调用了空间填充 DOE 平台,它根据空间填充 DOE 的低输入值和高输入值用点最佳地填充超参数空间。 生成的结果数据表保存了所有拟合统计数据,因此可以评估每个拟合,甚至可以返回并稍后在平台中手动运行它们。
据我所知,JMP 不支持超过两层。 我不记得细节了,但在上周的 Discover Summit Americas 的其中一场会议上提到过。 我认为这是因为在评估性能(尤其是预测性能)时,两层以上并没有为构建模型的额外计算时间增加太多。 另外请注意,使用 NN 进行增强时,只允许使用一层。 通常,节点数比层数更有意义。
据我所知,您应该能够使用 NN 平台对时间序列进行建模。 我没有看到任何限制。 当然,唯一的挑战是神经网络模型的可解释性。 在 NN 中解释 X's -> Y's 的转换要困难得多。
我附上了一个基本的神经网络调整表 (NN Tuning) 和一个空间填充 DOE 来探索超参数空间。 请注意,我的 DOE 中只有四种惩罚方法中的两种。 此外,我允许每个变量(稳健拟合除外)发生变化,但由于仅允许对单层模型进行提升,因此代码会自动消除两层选择并恢复为提升选项。 最后一点,所有 13 列都必须存在于您在运行 GUI 时选择的调优表中。 如果它们不存在,它将引发错误。
DOE 平台将删除任何默认为常量的因素。 如果在生成 DOE 后缺少一列,您必须将其从因子表中复制回来(并将值填充到表的末尾),因此稳健拟合保持为 0 的示例。 我使用了 1234 的随机种子,运行 120 次来生成空间填充 DOE。
希望这可以帮助,
DS
回复:自动化神经网络嗨迪德里希,
很高兴向您打招呼,如果GUI能够在用户必须调整的所有超参数中执行多对象优化(pareto border)并创建超过2层(深度学习),那就太好了
提问:JMP神经网络可以预测时间序列吗?
我发的例子,也就是调整表是JMP的自定义DOE创建的,我刚学用NN和DOE,DOE剔除哪些列? 我应该在什么表中放置哪些列? 即数据表还是调整表?
请问你能发个例子吗?
感谢您的回答和帮助!!!
问候,
马可
回复:自动化神经网络你好@Marco1 ,
谢谢。 实际上,我正在进一步更新 JSL,以便它为用户生成调整表。 手动执行的问题是,是的,您需要非常了解代码的来龙去脉。 您遇到的问题是代码期望某些列在调整数据表中,即使它们是常量也是如此,因为每一行都包含提供给建模平台的参数。
我的猜测是,当您创建调整表时,JMP 会自动删除任何常数项。 生成的调整表中没有正确的列,因此会引发错误。 我不是最好的程序员,所以尝试解决所有可能的情况需要一些时间。
同时,在我的下一个版本发布之前,我建议您复制回 JMP 删除的列,然后将值填充到表的末尾。 这应该让你去。 如果您有任何其他问题,请告诉我。
希望这可以帮助!,
DS
回复:自动化神经网络你好迪德里希施密特,
恭喜你有了 GUI Gen_AT_v3.0,显然我不知道如何使用它,我得到一个错误:
有手册或例子吗?
附时间序列表和参数表。
感谢您的支持。
问候,
马可





回复:自动化神经网络嗨,DS,
感谢你们对我的帮助。 老实说,我放弃了,手动完成了。
我通过询问他人或使用 JMP Scripting Index 自学多次尝试编写脚本。 例如,我在 fit() 中使用了 Get RSquare Validation 选项或添加rSquare = (report(obj)["Validation"]["mvalue"][NumberColBox(1)]<显示(rSquare);
他们两个都没有工作。
关于您关于随机选择 K 折验证数据集的建议。 这是个好主意。 但是,我想保持 NN 结构的一致性,以便我可以比较 NN 之间的性能。 我读过的大多数使用人工神经网络的论文都没有提到他们在迭代过程中如何选择验证数据集。
我将尝试查看 R2 的任何改进。 我会尽快让你知道结果。
最好的
回复:自动化神经网络当然,很高兴它有帮助!回复:自动化神经网络太感谢了。
回复:自动化神经网络谢谢,.@G_M!回复:自动化神经网络干得好, @SDF1 .
回复:自动化神经网络你好@giaMSU和@G_M ,
在此线程的早些时候,我发布了一段脚本,我在运行数千个训练集时一直使用它来保存 R^2、RASE 等。
作为@G_M提到过,您需要进入报告的树结构以找出要保存值的位置。 在脚本的最底部,就在 FOR 循环结束之前,它就是从报告的树结构中提取值的地方。
我修改了我以前的脚本来自动执行 NN 拟合,并包含了我之前的帖子中将提取拟合值(R2 和 RMSE)的部分。 如果您需要其他值,也可以添加它们。 该脚本创建一个新数据表,其中包含每个位置 ID 的 NN 拟合结果。 我还修改了根据位置ID生成每个数据表的部分,使数据表有自己的基于位置ID的唯一标识符,虽然我最后只是关闭了每个数据表;原则上,您可以通过在 FOR 循环末尾注释掉关闭命令来保持它们全部打开,但是您将打开大量数据表。
在实施代码之前,我强烈建议您通读注释并了解脚本的作用。 一旦您熟悉了脚本,它将永远改变您的 JMP 生活!
附带一提,你真的需要始终拥有相同的随机种子吗? 我建议将它留空以适合合身,这样您就可以真正获得合身的随机性,从而使其更加稳健。 此外,您的数据中有足够的观察结果,您可以创建一个包含训练、验证和测试集的验证列,这样您就可以真正找出哪个模型实际上最擅长预测。 您可以根据您的 :Y 列(“SoilMoisture(kg.m-2) 或 (mm)”)对此验证列进行分层。 您也可以自动执行此操作,并在对 :ID 进行汇总后将其放在创建每个数据表的部分中。
在您的数据表上运行以下脚本,我得到以下输出:

Names Default To Here( 1 ); //keeps variables local, not global
dt = Data Table( "Subset of 765-450" ); //defines your starting data table
Summarize( locs = BY( dt:ID ) ); //creates a list of the different location IDs
<BR />//This FOR loop creates all the different data tables based on location ID and also names them based on location ID
For( j = 1, j <= N Items( locs ), j++,
file = dt << Select Where( locs[j] == Char( :ID ) ) << Subset( file, Output Table Name( "Model Subject File Location ID " || locs[j] ) )
);
<BR />//this portion of the code generates the list of data tables that will be used to train the models for each location.
dt_list = {};
one_name = {};
For( m = 1, m <= N Table(), m++,
dt_temp = Data Table( m );
one_name = dt_temp << GetName;
If( Starts With( one_name, "Model" ),
Insert Into( dt_list, one_name )
);
);
<BR />//this portion of the code creates the fit result data table that will record the statistics for each fit, to be reviewed later. Also adds the label column property to the Loc_ID column.
dt_fit_results = New Table( "Fit Results", Add Rows( N Items( dt_list ) ), New Column( "Loc_ID", "Continuous" ) );
dt_fit_results << New Column( "R² Training" );
dt_fit_results << New Column( "R² Validation" );
dt_fit_results << New Column( "RMSE Training" );
dt_fit_results << New Column( "RMSE Validation" );<BR />dt_fit_results:Loc_ID << Label;
<BR />//this FOR loop makes sure that each row of the fit result table also includes the location ID
For( l = 1, l <= N Items( dt_list ), l++,
dt_fit_results:Loc_ID[l] = dt_list[l]:ID[l]
);
//this FOR loop is the fitting routine for each location data table.
For( i = 1, i <= N Items( dt_list ), i++,
NN = Data Table( dt_list[i] ) << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( ), //I took away the random seed, so your fits will be different from mine.
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 1 ) //I only did one tour just for proof of concept, so you'll want to change this
)
);
NNReport = NN << Report;<BR />//These next lines of code are what pull the actual values from the fit report and saves them to the fit results data table.
Train = NNreport["Training"][Number Col Box( 1 )] << Get;
Valid = NNreport["Validation"][Number Col Box( 1 )] << Get;
dt_fit_results:Name( "R² Training" )[i] = Train[1];
dt_fit_results:Name( "RMSE Training" )[i] = Train[2];
dt_fit_results:Name( "R² Validation" )[i] = Valid[1];
dt_fit_results:Name( "RMSE Validation" )[i] = valid[2];
Close( dt_list[i], no save );
);祝你好运!,
DS
回复:自动化神经网络嗨DS
感谢您的贡献。
我对这个问题还有一个小问题。 我保存了一千个 NN 报告的 pdf 文件。 然后,这就成了一个问题,因为我需要手动阅读许多 pdf 文件才能获得每个 NN 的 R2。
我想运行一个脚本来自动提取它们。 你能帮助我吗?
真挚地
GN
回复:自动化神经网络你好@giaMSU ,
感谢您发布您拥有的较小数据表,以及您正在使用的脚本。 我对其进行了一些修改,然后让它开始工作。 试试下面的方法。 我没有意识到您正在创建数据表的子集并仅使用这些数据表进行拟合。
这是我运行脚本的修改版本后得到的输出:

这是修改后的脚本:
Names Default To Here( 1 );
dt = Data Table( "Subset of 765-450" );
Summarize( locs = BY( dt:ID ) );
For( j = 1, j <= N Items( locs ), j++,
file = dt << Select Where( locs[j] == Char( :ID ) ) << Subset( file, Output Table Name( "Model Subject File" ) )
);
dt_list = {};
one_name = {};
For( m = 1, m <= N Table(), m++,
dt_temp = Data Table( m );
one_name = dt_temp << GetName;
If( Starts With( one_name, "Model" ),
Insert Into( dt_list, one_name )
);
);
For( i = 1, i <= N Items( dt_list ), i++,
NN = Data Table( dt_list[i] ) << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
NNReport = NN << Report;
NNReport << Save PDF("E:/Ready_for_ANN/result") // I actually didn't do this part.
);如果您有很多不同的位置 ID,您可能希望使用唯一 ID 字符代码保存每个结果以区分它们。 也许将“保存”行修改为:
NNReport << Save PDF("E:/Ready_for_ANN/result_LocID_"|| Char(dt_list[i]:ID[1]));希望这可以帮助!,
DS
回复:神经网络自动化嗨@giaMSU ,
我喜欢自动化神经网络拟合的想法,并且我已经为其他平台做了类似的事情。我想我会尝试为神经网络做类似的事情,以测试神经网络平台中的各种拟合参数,以找到最佳拟合。
我做了一些非常相似的事情,但使用了不同的建模平台(随机森林和增强树)。我将在下面包含我的代码以及主要线路功能的描述。
但一般来说,每次选择新位置时,您不会将新信息提供给神经网络拟合。拟合实际上需要位于 FOR 循环内。我将我的作为脚本代码放在我的数据表中,这样做是因为我需要运行一个非常大的调整表以获得最佳拟合,当我这样做时,它为我的计算机节省了大量内存,而且你通过这种方式,可以在数据表中处理超过 24k+ 行,并让它运行过夜。
顺便说一句,这个最初的概念和拟合循环的想法是通过 gzmorgan0 的帖子想到的,但我不记得原来的帖子了。我用它所有的时间。
Names Default To Here( 1 );//keeps all variables local<BR />
dt = Data Table( "My data table" ); //this is where you specify your data table with the :Y and :X columns
dt_pars = Data Table( "tuning table" ); //for me, this is my tuning table that has modified tuning parameters. For you, it might be the "Model Subject File" data table.
dt_results = dt_pars << Subset( All rows, Selected columns only( 0 ) ); //this just duplicate the above dt because I want to add columns for recording fit parameters.
<BR />//the below portion creates new columns for recording the fit parameters.<BR />dt_results << New Column("Overall In Bag RMSE");
dt_results << New Column("Overall Out of Bag RMSE");
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
<BR />//The FOR loop here is to actually run the fit with each of the different tuning parameters.
For( i = 1, i <= N Row( dt_pars ), i++,<BR /> //these next few lines pulls the NEW fit parameters to put into the model fit. This would be each new row of data (location) for your case
NumTrees = dt_pars:Number Trees[i];
NumTerms = dt_pars:Number Terms[i];
PortBoot = dt_pars:Portion Bootstrap[i];
MinSplpTr = dt_pars:Minimum Splits per Tree[i];
MaxSplpTr = dt_pars:Maximum Splits per Tree[i];
MinSplSz = dt_pars:Minimum Size Split[i];<BR /><BR /> //this next section is a string that will be evaluated below and represents what you would do via a normal GUI in JMP.
str = Eval Insert(
"report = (dt << Bootstrap Forest( //this is the fit method
Y( :Y_Response ), //whatever your response variable is
X(
:X_1, //these are all your x variables that you put in (which you want to be changing each time)
:X_2,
:X_3,
),
Minimum Size Split( ^MinSplSz^ ), //here is where something is changing and the new values are inserted via the ^ ^ and fed to the fit method. Here is where you'd want to do something similar, but above with the :X's
Validation Portion( 0.2 ), //this too can even be a variable and changed each time.
Set Random Seed( ),
Method( \!"Bootstrap Forest\!" ), //this again defines the method
Minimum Splits per Tree( ^MinSplpTr^ ),
Maximum Splits per Tree( ^MaxSplpTr^ ),
Portion Bootstrap( ^PortBoot^ ),
Number Terms( ^NumTerms^ ),
Number Trees( ^NumTrees^ ),
Early Stopping( 0 ),
Go,
invisible
)) << Report;"
); //this closes the Eval Insert() command<BR />
Eval( Parse( str ) ); //this actually runs the fit for each iteration<BR /><BR /> //The below lines, I pull out the relevant fit statistic I want to evaluate from the report and save it to the data table called dt_results. I can then analyze my multiple thousand data points later and not chew up too much RAM.
Overall=report["Overall Statistics"][Number Col Box( 1 )] << Get;
R2 = report["Overall Statistics"][Number Col Box( 2 )] << Get;
RMSE = report["Overall Statistics"][Number Col Box( 3 )] << Get;
report << Close Window;
dt_results:Name("Overall In Bag RMSE")[i]=Overall[1];
dt_results:Name("Overall Out of Bag RMSE")[i]=Overall[2];
dt_results:Name("R² Training")[i] = R2[1];
dt_results:Name("R² Validation")[i] = R2[2];
dt_results:Name("RMSE Training")[i] = RMSE[1];
dt_results:Name("RMSE Validation")[i] = RMSE[2];
);我想您应该能够从上面获取大纲并根据您的具体需求进行修改。
顺便说一句,不要忘记不仅要进行拟合验证以免过度拟合,还要在从拟合数据中分离出的完全未使用的测试数据集上测试其预测能力。另外,如果你能负担得起,我建议增加旅行次数> = 25。神经网络平台有时需要更多的尝试,例如在 DOE 中找到给定参数集的最佳拟合。
祝你好运!我希望看到最终的解决方案。我也可能会尝试一下。
感谢您启动此线程。
DS
回复:神经网络自动化你好@giaMSU ,
这听起来很可行,但你的问题相当开放。您发现哪些障碍需要社区帮助解决?
我将从神经网络的脚本开始,看看您需要在脚本中为每个位置进行替换。定义一个函数或表达式来提取特定于位置的信息,执行神经网络分析,保存报告/脚本。迭代每次运行该函数/表达式的位置。
回复:神经网络自动化@giaMSU ,你计划做的事情是可能的。步骤1。 使用 Summarize 函数创建每个 J = 1000+ 位置的列表。第2步。 对列表中的 J 位置建立索引。步骤 3. 使用“选择位置”和“子集”函数为第 j 个位置创建数据集。步骤4。 针对第 j 个位置运行第 j 个神经网络模型。步骤 5。 以您所需的格式保存 NN 平台报告。 步骤 6。 重复直到到达最后一个位置。我没有测试,但以下内容应该有效或让您真正接近。
//assumes data table is "dt" and location is in a variable called "Location"
Summarize( locs = BY(dt:Location) );
For(
j=1, j<=NItems(locs), j++,
file = dt << Select Where(locs[j] == :Location) << Subset(
file,
Output Table Name("Model Subset File")
);
NN = file << Neural(
Y( :Name( "Y" ) ),
X( :Name( "X1" ), :Name( "X2" ) ),
Validation( :Validation ),
Informative Missing( 0 ),
Set Random Seed( 1121 ),
Fit( NTanH( 3 ) )
);
NNReport = NN << Report;
NNReport << Save PDF("Path")
);回复:神经网络自动化感谢您的帮助。 我编写了一个包含 2 个位置数据集的脚本。
首先,我使用了在 JMP 14 Pro 上运行的神经网络保存的神经脚本。 我使用了两个隐藏层,分别有六个节点和三个节点。
Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
这部分效果很好。 然后我按照 G_M 的建议添加 For 循环。
dt = Open( "E:/Ready_for_ANN/Subset of 765-450.jmp" );
Summarize(locs=BY(dt:ID))
For (
j=1, j<=NItems(locs),j++,
file = dt << Select Where(locs[j])== :ID << Subset(
file,
Output Table Name ("Model Subject File"))
);
NN = file << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)"),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
NNReport = NN << Report;
NNReport << Save PDF("E:/Ready_for_ANN/result")然后,它就不起作用了。
据我从脚本中了解到,For 循环创建了一个子集,其中包括从 j=1 到 j++ 的所有 ID。 然后这个子集将被神经脚本使用。 但神经部分不包含在 For 循环中。 那么,这不是我想做的。
我想创建 1 个位置数据的子集,并在每个步骤中运行该子集的神经网络。如果我错了,请纠正。
我在此处附加了我的数据子集(02 个位置)。
请帮我解决这个问题。
先感谢您。
回复:神经网络自动化@G_M我喜欢你的方法。
为了@giaMSU ,您所要做的就是运行神经网络的一种情况,并将脚本保存到脚本窗口(或剪贴板)。 (最上面的红色三角形菜单,列表中的最后一个选项,“保存脚本”)
拿G_M写的脚本,替换这部分:
Neural(
Y( :Name( "Y" ) ),
X( :Name( "X1" ), :Name( "X2" ) ),
Validation( :Validation ),
Informative Missing( 0 ),
Set Random Seed( 1121 ),
Fit( NTanH( 3 ) )
);
有了你的神经脚本,你可能就可以开始了,或者至少已经完成了 90%。
回复:自动化神经网络嗨,G_M,
我已经尝试过你的脚本。 它运行良好,但不完全如我所愿。 看起来该脚本从所有位置提取数据以创建一个子集,然后运行神经网络。 我用 02 个位置的子集对其进行了测试。 神经运行了两次。 然而,他们的报告是相同的。 所以我认为 For 循环有一些问题。 请你帮助我好吗 ? 我在本次讨论中附上了我的脚本和数据,以防您需要使用。
谢谢回复:自动化神经网络我认为问题在于您需要在 SelectWhere 函数中的 :ID 周围添加 Char 函数。
Select Where(loc[j] == Char(:ID))
回复:神经网络自动化该脚本现在运行良好。
剧本有一个小问题。 由于您将该文件命名为“模型子集文件”,因此脚本会在每个步骤中替换 PDF 文件。 完成后,文件夹中只有一个文件。 您能否帮我将位置 ID 添加到文件名中,以便脚本可以使用唯一的名称记录每个报告?
谢谢
回复:神经网络自动化听起来报告已经写完了。 尝试将 ID 连接到报告,如下所示:
Save PDF("C:\test\model_"|| Char(i) ||".pdf");回复:神经网络自动化嗨,G_M
在您的帮助下,我进行了近千次神经网络分析。 另外,我还保存了一千个 NN 报告的 pdf 文件。 然后,这成为一个问题,因为我需要手动阅读许多 pdf 文件才能获取每个 NN 的 R2。
我尝试添加获取 R 方测试到脚本中,以便它可以显示 R2 值。 然后我可以使用将它们与文件一起保存
obj << Save (Get Gen RSquare Test)
该脚本仍在运行,但它不会在任何地方保存 R2 值。 我看不到价值。
你能帮我解决这个问题吗?
太感谢了。
肾小球肾
回复:神经网络自动化@giaMSU ,因此我可能采用的方法是访问报表图层并从报表图层的树结构中的相应显示框中获取值。 捕获后,报告中的 R^2_i 统计数据可以将值插入列表,然后从列表创建数据表,或者创建数据表并将值连接到单个数据表中。 在脚本索引中搜索“显示树结构”。
回复:神经网络自动化学习剧本。