여러 신경망 모델 구축저는 신경 플랫폼을 사용하여 예측을하고 있으며, 신경망을 처음 접하기 때문에 모든 입력 매개 변수 (히든 레이어 수, 노드 / 히든 레이어 수, 부스팅 모델, 학습률 및 둘러보기)에 약간만 익숙합니다. 내가하고 싶은 것은 RMSE와 검증 모델 오 분류 율을 최소화하는 것입니다. 제가하고있는 일은 각 매개 변수를 하나씩 반복적으로 변경하고, 모델 성능 매개 변수를 저장하고, 새 JMP 테이블에 붙여 넣는 것입니다.하지만 레이어, 노드, 둘러보기, 등. JMP Pro가 1,000 개의 모델을 빌드하고 데이터를 테이블에 덤프하는 곳에 스크립트를 작성하여 각 모델 입력 매개 변수를 수동으로 변경할 필요가 없습니까?
# 숨겨진 레이어 : 1 또는 2
# 시그 모이 드 노드 : 0, 1, 2, 3 또는 4
# 선형 노드 : 0, 1, 2, 3 또는 4
# 방사형 노드 : 0, 1, 2, 3 또는 4
# 부스팅 모델 : 모름, 아마도 1-5?
# 학습률 : 0.1 단위로 0-0.5
# 투어 : 1, 5, 10, 20, 100
따라서 2 x 5 x 5 x 5 x 5 x 5 x 5 = ~ 30,000이됩니다.
데이터 세트에 익숙해지면이 중 몇 가지를 숙지 할 수있을 것 같습니다. 물론 노드가 많고 부스팅 모델이 많은 것은 의미가 없지만 (다른 특정 조합도 수행하지 않음) 테스트 할 가치가있는 잠재적으로 수백 개의 모델에 대해 이야기하고 있습니다. 확실히 이런 종류의 모델 스크리닝 / 비교는 스크립트로 작성 될 수 있습니다.
해석학스크립팅Re : 여러 신경망 모델 구축2 차 모델에 적합하도록 더 적은 수준으로 실험을 설계 한 다음 모델을 사용하여 설정을 최적화 할 수 있습니다. 또한 결과 테이블 중 하나를 마우스 오른쪽 버튼으로 클릭하고 결합 된 테이블로 만들기를 선택하여 각 모델을 만든 다음 모든 결과를 한 번에 추출 할 수 있습니다.
Re : 여러 신경망 모델 구축Mark, 제안 해 주셔서 감사합니다. 두 번째 시도했지만 실패했습니다. 다른 플랫폼의 "결합 된 테이블로 만들기"옵션을 알고 있지만 어떤 이유로 든 신경 플랫폼에서 제외되었을 수 있습니다. 이상하게도 옵션 키를 누른 상태에서 선택하면 보고서의 모든 부분에 적용되는 "옵션"트릭은 신경 플랫폼에서 작동하지 않거나 속도를 높일 수 있습니다.
RSME를 최소화 할 목적으로 신경망 매개 변수 (노드 # 개, 둘러보기 등)를 DOE에서 X로 가질 수 있다면 멋질 것입니다. 신경 모델 시작의 특정 상자에있는 매개 변수. 정말 고급 스크립팅을해야하는데, 그래도 DOE와 Neural이 제대로 통신 할 수 있을지 모르겠습니다. 그러나 누구든지이 스크린 샷에 반영된 모델을 기본적으로 실행할 수있는 신경 플랫폼을 얻을 수있는 방법을 알고 있다면 (총합계의 하위 선택) 크게 감사하겠습니다. 즉, 첫 번째 스크린 샷 테이블의 값은 두 번째 스크린 샷의 적절한 입력 상자로 이동해야합니다 (예 : 신경 모델 시작).
Re : 여러 신경망 모델 구축BTW, 모든 관련 기능을 사용하여 적극적으로 선택하는 기능과 동일한 정보를 표시하는 "옵션"트릭은 실제로 Mac의 "명령"트릭입니다 (따라서 이전에는 작동하지 않았던 이유).
Re : 여러 신경망 모델 구축안녕하세요 뿡 빵뀨 ,
이것은 내가 한동안 스크립트를 작성하고 싶었고 정말 재미있었습니다. 귀하의 게시물은 그것을 시작하기 위해 불을 냈습니다. 감사합니다! NN 플랫폼은 초기 조건에 매우 민감하고 수동으로 수행하는 것이 다소 느리기 때문에 잠시 동안 NN 플랫폼을 조정하는 방법을 갖고 싶었습니다.
그래서 다른 모델 플랫폼 용으로 만든 일부 스크립트 (예 : 부스트 트리, 부트 스트랩 포리스트 및 XGBoost 플랫폼)를 조정하여 튜닝 프로세스를 자동화했습니다. 스크립트는 데이터 테이블에 저장되고 녹색 핫 버튼으로 실행됩니다.
스크립팅에 대해 알고 있고 이러한 스크립트를 특정 상황 / 데이터 구조 / 열 이름 등에 적용 할 위치를 알고 있기를 바랍니다. 나는 각각의 큰 그룹에서 내가하고있는 일을 설명하기 위해 몇 가지 의견을 입력했습니다. 두 개의 스크립트를 첨부합니다. 하나는 연속 Y 용이고 다른 하나는 공칭 / 서수 Y 용입니다. Number Col Box () 값이 이에 따라 변경되기 때문에 출력 Y가 명목인지 서수인지 확인하기 위해 테스트를 포함해야했습니다. 샘플 데이터의 Big Class Families.jmp 데이터 테이블을 테스트 데이터 세트로 사용했습니다. 또한 수치 NN 튜닝 또는 명목 / 순서 NN 튜닝을 사용하여 생성 한 두 개의 출력 데이터 테이블을 포함합니다. 나는 : age, : weight :, : height를 사용하여 : sex에 대해 명목상을 수행 한 다음 : age를 Ordinal에서 Continuous로 변경하고 연속 NN 튜닝을 위해 : weight 및 : sex로 나이를 모델링했습니다.적합성과 통계는 끔찍하지만 JSL이 작동하는지 여부를 확인하기위한 목적으로 만 사용됩니다. 또한 : age를 계층화하여 데이터 테이블에 : Validation 열을 추가하여 모두 올바르게 작동하는지 확인했습니다.
다른 사람이 Y () 입력 열을 연속, 명목 또는 서수 모델링 유형으로 테스트하기 위해 더 우아하게 스크립팅 한 다음 적절한 Number Col Box () 값을 삽입하여 단일 JSL 코드.
dt << Nerual () 섹션에 대한 Y () 및 X () 입력과 모델링중인 변수의 이름을 따서 명명 된 보고서 창의 이름을 얻는 부분을 편집해야합니다.
NN 튜닝 테이블은 원칙적으로 DOE를 채우는 공간처럼 취급 할 수 있으며, JMP는 1 또는 2 만 허용하므로 N_Layers는 1 또는 2 만 허용하는 것과 같은 일부를 제외하고는 하한 및 상한 설정이 원하는대로 설정됩니다. 레이어. Penalty_Method는 NN 플랫폼에서 유효한 옵션 일 뿐이며 Transform Covariate 및 Robust Fit은 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
Re : 여러 신경망 모델 구축예! 이것이 바로 제가 원하는 것입니다. NN 플랫폼과 동기화되는 모든 NN 입력 매개 변수 (예 : TanH 노드 수, 레이어 수 등)가있는 테이블입니다. 아직 시도하지 않았고 시간이 좀 걸릴 것이라고 생각하지만 작은 20 샘플 x 90 예측 변수 "연습"데이터 세트를 사용하고 있으므로 가능할 수 있습니다. 실제로는 활성화 유형과 노드 수 (및 둘러보기 수)가 실제로 RMSE를 낮추고 부스팅은 그다지 도움이되지 않는다는 것을 발견했습니다. 하지만 그래도 실행하려고 계획 한 500 개 모델을 모두 수행하는 것보다 훨씬 빠를 것입니다 (고맙게도 4 개 노드 / 활성화 유형 아래에 머물기를 원하기 때문에 어제 실행하려고했던 것만 큼 많지는 않음). 나는 내일 그것을 시험 해보고 그것이 어떻게 진행되는지 모두에게 알릴 것이다.
Re : 여러 신경망 모델 구축글쎄, 실패했지만 아마 작은 스크립팅 실수 때문인 것 같습니다. 내 데이터 (첨부 됨)와 함께 NN 튜닝 테이블을 사용하고 필요한 모든 업데이트를 수행했습니다 (3 개의 교육 + 검증 + 테스트 샘플 사용). 마지막 스크립트 ( "신경망 비교")를 실행하면 새 테이블이 작성되지만 분석은 실행되지 않습니다. 몇 개의 X 용어를 포함했지만 실제로는 "표준화 된 데이터"그룹의 모든 열이 86 개가됩니다. 디버거를 사용할 때 문제가 발생한다고합니다.
" 에 대한 (나는 = 1 , i <= imax, i ++, "영역. 더 유능한 스크립트 작성자가 몇 초 안에 문제를 찾을 수 있기를 바랍니다.
Re : 여러 신경망 모델 구축안녕하세요 뿡 빵뀨 ,
데이터 테이블을 공유 해주셔서 감사합니다. 스크립트에서 변경 한 사항을 디버그하는 데 도움이되었습니다.
내가 알아 차린 몇 가지 :
- 기록하려는 "테스트"데이터 세트 통계에 대한 추가 열을 추가해야했습니다.
- 매개 변수 테이블의 행 수인 imax에 대한 정의를 실수로 제거했습니다.
- 또한 실수로 스크립트에서 dt << Neural ()이라고 표시된 NN 플랫폼에 대한 호출을 변경했습니다. 여기에서 데이터 테이블 "dt"에서 신경망 모델링을 수행하는 명령을 보냅니다. 당신은 그것을 다른 것으로 바꿨습니다.
- 창 "w"의 정의는 NN 창의 전체 이름을 가져야합니다. 단일 X 만 실행하는 경우 JMP는이를 창 이름의 일부로 입력하므로 둘 다에 있어야합니다. GetName 명령과 그 아래의 IF 문. 그러나 이는 단일 X로 모델링 할 때만 해당됩니다. 둘 이상을 사용하는 경우 창 이름이나 IF 문에 "by ......"가 필요하지 않습니다.
- 마지막 부분은 Number Col Box () 명령에서 Training, Validation 및 Test 데이터에 대한 통계가 올바르게 호출되었는지 확인하는 것입니다.
아래 코드는 데이터 테이블에서 작동합니다 (수정 된 스크립트와 함께 첨부 됨). 이전에 제공 한 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
Re : 여러 신경망 모델 구축아하! 다시 해주셔서 감사합니다. 나는 분명히 스크립팅에 대한 지식이 없기 때문에 "Neural"을 내 데이터 테이블의 이름으로 변경했습니다. .... 분명히 작동하지 않을 것입니다. 데이터 테이블의 이름을 "Neural"로 변경하고 테스트 열을 추가하고 권장하는 다른 변경을 수행하면 제대로 작동했습니다.
이제 제가 할 수있는 일은 DOE를 사용하여 조건부 요인 설계를 만들고 (여러분이 숨겨진 레이어로 부스트 할 수 없기 때문에) 내 작업 컴퓨터에서 수백 개의 모델을 실행하는 것입니다. -GB RAM 노트북).
스크립트가 GUI 또는 추가 기능이되어야한다고 생각합니다 (테이커가 있습니까?). 내가 베타 테스트중인 JMP Pro 16은 정말 훌륭한 "모델 스크리닝"도구를 가지고 있지만 잠재적으로 수천 개의 모델 내에서가 아니라 모델링 유형 (예 : PLS 대 Gen-Reg)에서 테스트한다고 생각합니다. 각 모델링 유형 내에서 빌드됩니다 (또는 실행이 중지되지 않을 수 있음). 나는 "시뮬레이터"에 대해 들어 봤지만 그것이 다른 일을하고 있다고 생각한다 (수많은 시뮬레이션 모델을 생성하지 않음), 비록 내가 틀릴 수도있다. 다시 한 번 도와 주셔서 감사합니다. 이것은 확실히 저의 시간을 절약 할 것입니다!
Re : 여러 신경망 모델 구축안녕하세요 뿡 빵뀨 ,
문제가 해결되어 다행입니다.
트리 기반 모델링 (XGBoost, 부스트 트리 및 부트 스트랩 포리스트)을 사용하면 JMP 내에서 튜닝 테이블 GUI를 사용하여 쉽게 많은 모델을 실행할 수 있습니다. 그러나 한 가지 단점은 RAM을 많이 소모한다는 것입니다. 이런 방식으로 실행하는 것의 좋은 점은 수만 가지의 다양한 매개 변수 설정을 실행할 수 있고 많은 양의 램을 소모하지 않고 CPU 소비 만 할 수 있다는 것입니다. 부트 스트랩 포리스트 (느림)를 사용하여 최대 4 만 개의 다른 설정을 실행했으며 업무용 랩톱 (32GB RAM 및 2GHz CPU)에서 며칠이 걸릴 수 있습니다.
나는 또한 JMP 16의 얼리 어답터이며 모델 스크리닝도 좋지만, 당신이 지적했듯이 어떤 모델도 튜닝하는 것이 아니기 때문에 약간 오해의 소지가 있습니다. 예측 모델을 생성하는 데 항상 최상의 설정은 아닌 기본 설정 만 사용합니다. 최소한 어떤 플랫폼이 추가 조정에 시간을 투자 할 가치가 있는지, 어떤 플랫폼은 조사 할 가치가 없는지 결정하는 데 도움이 될 수 있습니다.
SVM 플랫폼을 사용하여 명목 데이터를 모델링하는 것도 고려할 수 있습니다. 이는 이러한 종류의 데이터를위한 좋은 방법이기도합니다.
시뮬레이터의 경우 이는 다른 것이며 다른 초기 조건 (무작위 화)으로 추정치를 테스트하는 방법을 의미합니다. 이렇게하면 추정값의 분포가 제공되고 원래 추정값에 대한 신뢰 구간이 제공되며 그런 다음 주어진 추정값을 사용하는 모델이 좋은지 여부를 결정할 수 있습니다.
DOE에 관해서는 팩토리얼을 수행하거나 적절하게 설정된 요인으로 공간 채우기 디자인으로 실행할 수 있으며 플랫폼도 조건부 제약을 허용한다고 생각합니다. 또한 예측 인자 스크리닝을 수행하거나 예측 인자에 대해 부트 스트랩을 수행하여 실제로 89 개가 모두 필요한지 또는 실제로 더 작은 부분 집합 만 사용할 수 있는지 확인할 수 있습니다.
마지막으로, 짧고 넓은 데이터 테이블이 있으므로 유효성 검사 열을 사용하는 대신 고려할 수 있으므로 유효성 검사를 위해 Leave one Out 접근 방식을 수행하십시오. 그렇게하면 스크립트를 편집해야합니다.
행운을 빕니다!,
DS
Re : 여러 신경망 모델 구축특히 유효성 검사 유형과 관련하여 더 우수한 제안. Neural이 홀드 백, Kfold 또는 행 제외를 지원한다는 것을 알았습니다 (이로 인해 제외 할 행 몇 개를 무작위로 선택하겠다고 생각합니다). 유효성 검사 유형을 변경하기 위해 스크립트를 변경하려면 "Validation (: Validation with test)"줄만 변경하면됩니까? 그리고 보류 된 샘플이 JMP의 관점에서 검증 샘플과 동일할까요? 그렇지 않은 경우 유효성 검사 열을 제거하거나 이름을 변경해야하며 테스트 열도 이동해야합니다.
Re : 여러 신경망 모델 구축안녕하세요 뿡 빵뀨 ,
Kfold는 또한 짧은 데이터 세트를 검증하는 또 다른 좋은 방법입니다. 예, "테스트"데이터 세트를 선택하고 행 상태를 "제외됨"으로 설정하여 행 상태로 설정할 수있는 행 제외입니다. Kfold 또는 Holdback을 사용하는 경우 JMP는 데이터 테스트가 아닌 데이터 유효성 검사에이를 사용합니다. 테스트 데이터로 사용할 수있는 별도의 데이터 세트가 있고 훈련 및 검증 데이터와 동일한 데이터 테이블에 있지 않기를 바랍니다.
유효성 검사를 위해 Kfold를 사용한 다음 스크립트를 실행할 필요가없는 부분을 주석 처리합니다. 아래는 NN 플랫폼에 대한 5-Kfold 유효성 검사 설정이있는 편집 된 버전입니다.작동해야합니다.
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
Re : 여러 신경망 모델 구축와, 스크립팅 도움 덕분에 점심 전에 300 개의 신경망 모델을 실행했다고 믿을 수 없습니다. 점점 더 많은 사람들이 NN 플랫폼의 가치를 알기 시작하면 이것이 선택되고 "쿠도 (kudo'd)"되기를 바라며, 특히 새로운 데이터 세트이고 실제로 그렇지 않은 경우 이와 같은 것에 끌릴 것입니다. 약간 조정할 수있는 NN 모델 입력 매개 변수의 당황스러운 양과 관련하여 "잠수"할 위치를 파악합니다 (예를 들어 학습률이 0.05에서 0.1로 증가하는 경우에도 큰 차이가 발생하기도 함). 다음에 다른 유효성 검사 접근 방식 (유효성 검사 열 대 홀드 백 대 KFold)을 사용해 보겠습니다. 내 (현재) 작은 샘플 크기를 고려할 때 확실히주의해야합니다 (이 예비 데이터를 사용하여 더 많은 "행", 즉 산호를 추가하기위한 자금을 확보하기를 희망 함).
Re : 여러 신경망 모델 구축그것이 당신을 위해 잘 작동하고 있다는 소식을 듣고 기쁩니다. 모델링에 행운을 빕니다! 다른 모델 플랫폼도 확인한 다음 테스트 데이터 세트에서 모델을 비교하여 가장 좋은 예측 변수를 확인할 수 있습니다.
DSRe : 여러 신경망 모델 구축(아마도 간단한) 스크립팅 질문이 있습니다. 입력 dt를 다른 것으로 변경하고 싶다고 가정하십시오. 스크립트를 복사하여 붙여넣고 "Neural"의 dt를 다른 것으로 대체 할 수 있어야하지 않습니까?
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
원본 "Neural"파일을 삭제하고 정확히 동일한 정보와 다른 이름을 가진 다른 테이블로 대체하면 스크립트가 작동하지 않습니다! 두 개의 데이터 테이블에 정확히 동일한 데이터가 있어야합니까? 그 중 하나는 "신경망"이라고합니다. 아마 그 부분을 놓쳤을 것입니다!
Re : 여러 신경망 모델 구축안녕하세요 뿡 빵뀨 ,
돌아가서 스크립트를 검토하면 두 번째 행은 분석 중에 사용할 데이터 테이블을 정의합니다. JSL 코드 dt = Current Data Table ()은 이름으로 데이터 테이블을 호출하는 대신 스크립트의 나머지 부분에서 사용되는 로컬 변수 "dt"를 정의합니다. 마찬가지로 dt_parms는 NN 튜닝 테이블 "NN 튜닝"에 할당 된 로컬 변수입니다. 이 두 테이블은 실제로 스크립트에 제공하는 유일한 것입니다. 나머지는 모두 내부입니다.
JSL 코드를 새 데이터 테이블에 복사 / 붙여 넣기하면 해당 데이터 테이블에서 로컬로 실행하기 때문에 자동으로 작동합니다.
Y () 및 X () 및 Validation () 메서드를 정의하는 경우를 제외하고 dt << Nerual () 호출을 수정해서는 안됩니다. JSL 코드 dt << Nerual ()은 데이터 테이블 "dt"에서 NN 모델링을 수행하도록 JMP에 지시하는 명령입니다. 따라서 코드 시작 부분에 dt가 무엇인지 정의합니다.
또한 w = Window () 호출을 수정하여 NN 보고서 창의 제목과 그 아래에있는 Regex ()를 반영해야합니다. 마지막으로 유효성 검사 열의 일부로 "test"데이터 세트가 실제로 있는지 여부에 따라 주석 처리 (줄 시작 부분에 // 명령 사용)하거나 주석을 제거 할 수 있습니다. 테스트 결과 열과 Test_stats 정의를 생성하고 코드가 결과를 새 출력 데이터 테이블에 기록 할 때 코드 시작 부분에 출력합니다.
그 외에는 많이 편집 할 필요가 없습니다.
마지막 질문과 관련하여 코드를 구현하는 방법에 따라 다릅니다. 데이터 테이블 내에서 실행하는 경우, 즉 데이터 테이블의 스크립트 부분에 저장하고 녹색 핫 버튼을 통해 실행하는 경우 Y () 및 X (만 변경하면됩니다. )는 새 데이터 테이블의 열 이름과 일치하는 예측 변수 및 응답으로 사용하고 있습니다. 물론 "NN 튜닝"테이블을 열어야합니다. 반면에 이것을 별도의 스크립트로 실행하는 경우 dt의 정의를 dt = Current Data Table ()에서 dt = Data Table ( "")로 변경할 수 있습니다. 따옴표 사이에있는 새 데이터 테이블의 이름입니다.
"신경망"은 데이터 테이블이 아니라 지정된 데이터 테이블에서 Neural Net 모델을 실행하는 JMP 명령입니다. "<<"명령은 왼쪽에있는 개체의 << 오른쪽에있는 작업을 수행하는 것을 의미합니다. 코드 시작 부분에서 새 열 명령을 통해 확인할 수 있습니다. dt_results << New Column ()이라고 표시된 경우 코드는 dt_parms 데이터 테이블에서 생성 된 하위 집합 데이터 인 dt_results 개체에 대한 새 열을 만들도록 JMP에 지시합니다.
도움이 되었기를 바랍니다!,
DS
Re : 여러 신경망 모델 구축큰 확인. 이것은 몇 가지 추가 질문에 대한 답변입니다. 이제 내가 고생하는 유일한 것은 새 데이터 테이블에서 스크립트를 복사, 붙여 넣기 및 실행할 때 스크립트 주석에서 언급 한 개요 상자 오류가 발생한다는 것입니다. "개요 상자 액세스 또는 평가에서 문자 인수 1이 필요합니다." 그게 무슨 뜻이야 ?? 숫자를 늘리거나 줄 였지만 매번 같은 오류 메시지가 나타나고 스크립트가 실행되지 않습니다. 외곽선 상자가 뭔지도 모르겠어요. 트리 구조가 동일하다는 것이 이상합니다. 방금 파일 이름을 변경했습니다. 파일 이름이 더 깁니다. 더 큰 외곽선 상자가 필요하다는 뜻일까요?