建立多個神經網絡模型我正在使用神經平台進行預測,而對於神經網絡還是陌生的人,我只對所有輸入參數略有熟悉:隱藏層數,節點/隱藏層數,提升模型,學習率和遊覽。 我想做的是嘗試最小化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
我想,一旦我對數據集更加熟悉,就可以將其中的一些混為一談。 當然,擁有許多節點和大量的提升模型是沒有意義的(某些其他組合也沒有意義),但是我們仍在談論潛在的數百個值得測試的模型。 這樣的模型篩選/比較肯定可以編寫腳本,對嗎?
分析工具腳本編寫回复:建立多個神經網絡模型您可以設計較少級別的實驗以適合二階模型,然後使用該模型來優化設置。 此外,您可以製作每個模型,然後通過右鍵單擊結果表之一併選擇“製作為組合表”,一次提取所有結果。
回复:建立多個神經網絡模型馬克,謝謝您的建議。 我嘗試過的第二個失敗了。 我知道其他平台上的“合併表”選項,但是也許出於某種原因它被排除在神經平台之外。 奇怪的是,您按住Option鍵,進行選擇並應用到報表的所有部分的“選項”技巧在神經平台中不起作用,否則可能會加快處理速度。
如果我可以在DOE中將神經網絡參數(#節點,#tours等)設置為X,以使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。” 這意味著什麼?? 我增加和減少了數字,但每次都收到相同的錯誤消息,並且腳本無法運行。 我什至不知道什麼是大綱框。 奇怪的是樹結構是相同的。 我只是更改了文件名。 文件名較長。 也許這意味著我需要一個更大的輪廓框?