用于估计分区模型的调整表:结果分区模型(树、引导、提升)的一个选项是使用调整设计表。 结果首先包含一个表格,其中包括设计点以及每个设计点的验证 R 平方和验证 RMSE。 我需要让该表还显示训练 R 平方、训练 RMSE、测试 R 平方和测试 RMSE。 任何人都可以在这里提供帮助 - 也许可以提供脚本吗?
这些统计数据以及更多数据显示在所选模型的表格下方,但我需要所有设计点的这些统计数据。 让我疯狂的方法是这样的:我希望能够生成一个图表,显示验证 R2 和训练 R2 与学习率的关系,以显示随着学习率增加而发生的过度拟合量。
回复:用于估计分区模型的调整表:结果卡梅伦,我对 JMP 脚本的细节有了很多了解。 再一次,这工作得很好。 再次感谢你。 我非常感谢你的帮助。
回复:用于估计分区模型的调整表:结果看起来 NumberBox 无法识别“<< Get”。检查 NumberBox 的脚本索引,您将看到该类型的对象可以识别的所有消息。其中之一是<<获取文本;但是这将返回一个字符串。您可以使用 num() 将其转换为数字。
num(report["Specifications"][NumberBox(1)] << Get Text);
回复:用于估计分区模型的调整表:结果你好,卡梅伦:
我已经修改了您的脚本(再次感谢!),但我陷入了最后一个问题。 除了提升树的 RSq、RMSE 等结果之外,我现在还想检索最终的层数。 我认为这将是对原始脚本的直接修改。 请参见底部第 13 行:
NL = report["Specifications"][NumberBox(1)] << Get;
显然,这不起作用。 您知道报告的“规格”部分与“总体统计”部分是否有不同吗?
dt = Data Table("C.jmp");
dt_pars = Data Table("table 3400.jmp");
//Get copy of pars table to store results
dt_results = dt_pars << Subset( All rows, Selected columns only( 0 ) );
dt_results << New Column("Seed");
dt_results << New Column("Final N Layers");
dt_results << New Column("Rsq Training");
dt_results << New Column("Rsq Validation");
dt_results << New Column("Rsq Test");
dt_results << New Column("RMSE Training");
dt_results << New Column("RMSE Validation");
dt_results << New Column("RMSE Test");
dt_results << New Column("N Training");
dt_results << New Column("N Validation");
dt_results << New Column("N Test");
for(i = 1, i<= N Row(dt_pars), i++,
SED = dt_pars: Seeds[i];
SPT = dt_pars:Splits Per Tree[i];
LR = dt_pars:Learning Rate[i];
RSR = dt_pars:Row Sampling Rate[i];
CSR = dt_pars:Column Sampling Rate[i];
MSS = dt_pars:Minimum Size Split[i];
NL = dt_pars:Number of Layers[i];
str = Eval Insert("\[report = (dt << Boosted Tree(
Y( :PR ),
X(
:Pe,
:To,
:Td,
),
Validation( :Name( "Train/Valid/Test" ) ),
Set Random Seed( ^SED^ ),
Method( "Boosted Tree" ),
Splits per Tree( ^SPT^ ),
Number of Layers( ^NL^ ),
Learning Rate( ^LR^ ),
Row Sampling Rate( ^RSR^ ),
Column Sampling Rate( ^CSR^ ),
Minimum Size Split( ^MSS^ ),
Go,
invisible
)) << Report;]\");
//Fit the boosted tree
Eval(Parse(str));
//Get the Rsq values and insert them into the results table
R2 = report["Overall Statistics"][NumberColBox(1)] << Get;
RMSE = report["Overall Statistics"][NumberColBox(2)] << Get;
N = report["Overall Statistics"][NumberColBox(3)] << Get;
NL = report["Specifications"][NumberBox(1)] << Get;
report << Close Window;
dt_results:Final N Layers[i] = NL[1];
dt_results:Rsq Training[i] = R2[1];
dt_results:Rsq Validation[i] = R2[2];
dt_results:Rsq Test[i] = R2[3];
dt_results:RMSE Training[i] = RMSE[1];
dt_results:RMSE Validation[i] = RMSE[2];
dt_results:RMSE Test[i] = RMSE[3];
dt_results:N Training[i] = N[1];
dt_results:N Validation[i] = N[2];
dt_results:N Test[i] = N[3];
);
回复:用于估计分区模型的调整表:结果很高兴我能帮上忙!回复:用于估计分区模型的调整表:结果卡梅伦,现在一切都很好。 无法告诉你我是多么欣赏你的智慧!
回复:用于估计分区模型的调整表:结果RMSE 列将位于 numcolbox(2) 中,因此您可以像获取 R2 一样在脚本中获取它。
要从报告中获取此类值,您只需找出它们在显示树中的位置即可。 您可以在此处查看如何执行此操作: https://www.jmp.com/support/help/14/view-the-display-tree.shtml
在我的脚本中,我有一个变量“report”,它包含对提升树输出中的报告窗口的引用。 在报告中,标题为“总体统计”的大纲框包含包含 R2 和 RMSE 的表格。 我使用 'report[“Overall Statistics”][numcolbox(1)]' 获取带有 R2 值的 numcolbox 显示元素回复:用于估计分区模型的调整表:结果卡梅伦,干得真有魅力! 冒着考验您耐心的风险,我如何检索 RMSE 以及 R2? 或者,更一般地说,对于我的教育来说,如何确定 R2、RMSE 等的变量名称,以便我可以在脚本中调用它们?
回复:用于估计分区模型的调整表:结果我改变了主意。编写脚本并不太难。以下是示例数据库中的提升树和汽车物理数据的示例。我为此创建了一个调整表来尝试,并将其附在后面。我还在“汽车物理数据”表中放置了一个验证列。
这是脚本:
dt = Data Table("Car Physical Data");
dt_pars = Data Table("TuningTable");
//Get copy of pars table to store results
dt_results = dt_pars << Subset( All rows, Selected columns only( 0 ) );
dt_results << New Column("Rsq Training");
dt_results << New Column("Rsq Validation");
for(i = 1, i<= N Row(dt_pars), i++,
SPT = dt_pars:SplitsPerTree[i];
LR = dt_pars:Learning Rate[i];
RSR = dt_pars:Row Sampling Rate[i];
CSR = dt_pars:Column Sampling Rate[i];
str = Eval Insert("\[report = (dt << Boosted Tree(
Y( :Weight ),
X(
:Country,
:Type,
:Turning Circle,
:Displacement,
:Horsepower,
:Gas Tank Size
),
Validation( :Validation ),
Method( "Boosted Tree" ),
Splits per Tree( ^SPT^ ),
Number of Layers( 50 ),
Learning Rate( ^LR^ ),
Row Sampling Rate( ^RSR^ ),
Column Sampling Rate( ^CSR^ ),
Go,
invisible
)) << Report;]\");
//Fit the boosted tree
Eval(Parse(str));
//Get the Rsq values and insert them into the results table
R2 = report["Overall Statistics"][NumberColBox(1)] << Get;
report << Close Window;
dt_results:Rsq Training[i] = R2[1];
dt_results:Rsq Validation[i] = R2[2];
);我为结果表做了一堆 R2 列来制作下图:
这应该很容易适应您提到的其他平台。
回复:用于估计分区模型的调整表:结果我认为您必须为此编写一个脚本,这实际上需要重现内置功能的结果+获取训练集的其他所需指标。当然可行,但我不确定这是否值得付出努力。