自動化神經網絡大家好,
我正在開展一個項目,該項目使用神經網絡模型來預測由其唯一坐標定義的不同位置(大約 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 ,
我喜歡自動化 NN 擬合的想法,並且我已經為其他平台做了類似的事情。 我想我會嘗試為 NN 做一些類似的事情,以測試 NN 平台中的各種擬合參數,以找到最佳擬合。
我做了一些非常相似的事情,但是使用了不同的建模平台(隨機森林和增強樹)。 我將在下麵包含我的代碼,並說明主要行的作用。
不過,一般來說,您不會在每次選擇新位置時都將新信息提供給 NN 擬合。 合身實際上需要裡面一個 FOR 循環。 我將我的腳本代碼作為數據表中的腳本代碼並執行此操作,因為我需要運行一個非常大的調整表以獲得最佳擬合,當我這樣做時,它為我的計算機節省了大量內存,還有你可以通過這種方式在數據表中做超過 24k+ 行,讓它在一夜之間運行。
順便說一下,這個的最初概念和 fit 循環的想法是通過 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。 NN 平台有時需要更多的嘗試,例如在 DOE 中尋找給定參數集的最佳擬合。
祝你好運! 我希望看到最終的解決方案。 我也可能會嘗試一下。
感謝您啟動此線程。
DS
回复:自動化神經網絡學習腳本。回复:自動化神經網絡@giaMSU ,所以我大概的做法是訪問報表層,從報表層的樹結構中相應的顯示框中取值。 捕穫後,報告中的 R^2_i 統計信息可以將值插入列表,然後從列表創建數據表,或者創建數據表並將值連接到單個數據表中。 在腳本索引中搜索顯示樹結構。
回复:自動化神經網絡嗨 G_M
在你的幫助下,我進行了將近一千次神經網絡分析。 另外,我保存了一千個 NN 報告的 pdf 文件。 然後,這就成了一個問題,因為我需要手動閱讀許多 pdf 文件才能獲得每個 NN 的 R2。
我試圖添加獲取 R 方檢驗到腳本,以便它可以顯示 R2 值。 然後我可以將它們與文件一起保存
obj << Save (Get Gen RSquare Test)
該腳本仍在運行,但它不會在任何地方保存 R2 值。 我看不到價值。
你能幫我解決這個問題嗎?
太感謝了。
GN
回复:自動化神經網絡聽起來報告寫得太過火了。 嘗試將 ID 連接到報告,如下所示:
Save PDF("C:\test\model_"|| Char(i) ||".pdf");回复:自動化神經網絡該腳本現在運行良好。
腳本中有一個小問題。 由於您將該文件命名為“模型子集文件”,因此腳本會在每個步驟中替換 PDF 文件。 完成後,文件夾中只有一個文件。 您能幫我將位置 ID 添加到文件名中,以便腳本可以用唯一的名稱記錄每個報告嗎?
謝謝
回复:自動化神經網絡我認為問題在於您需要在 Select Where 函數中的 :ID 周圍添加 Char 函數。
Select Where(loc[j] == Char(:ID))
回复:自動化神經網絡嗨,G_M,
我試過你的劇本。 它運行良好,但並不完全如我所願。 腳本似乎從所有位置提取數據以創建一個子集,然後運行神經網絡。 我用 02 個位置的子集對其進行了測試。 神經跑了兩次。 但是,他們的報告是相同的。 所以我認為 For Loop 有一些問題。 請你幫助我好嗎 ? 我在此討論中附上了我的腳本和數據,以備您需要使用。
謝謝回复:自動化神經網絡感謝您的幫助。 我寫了一個包含 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 )
)
);
這部分效果很好。 然後我將 For 循環添加為 G_M 建議。
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%。
回复:自動化神經網絡@giaMSU ,你打算做的事是可能的。步驟1。 使用 Summarize 函數創建 J = 1000+ 個位置中每個位置的列表。第2步。 索引列表中的 J 個位置。第 3 步。 使用 Select Where 和 Subset 函數為第 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")
);回复:自動化神經網絡你好@giaMSU ,
這聽起來很可行,但你的問題很開放。您看到需要社區幫助解決的障礙是什麼?
我將從神經網絡的腳本開始,看看您需要在腳本中的哪個位置為每個位置進行替換。定義一個函數或表達式來提取特定於位置的信息,執行神經網絡分析,保存報告/腳本。遍歷每次運行該函數/表達式的位置。