신경망 자동화모두 안녕
고유한 좌표로 정의된 다양한 위치(약 1000개)의 토양 수분을 예측하기 위해 신경망 모델을 사용하는 프로젝트를 진행하고 있습니다.JMP의 신경망에 대해 동일한 구조를 모든 사이트에 적용할 수 있습니다. 그래서 작업 자동화에 대해 생각하고 있습니다. 위치 코디네이터(X, Y)를 찾고, 필요한 데이터 입력을 추출하고, 신경망을 실행할 수 있는 JMP 스크립트일 수 있습니다. 결국 스크립트는 모델의 보고서를 저장할 수 있습니다. 나와 공유할 수 있는 조언이나 조언이 있습니까?
미리 감사드립니다.
모든 제안이나 토론을 환영합니다.
Re: 신경망 자동화안녕 @마르코1 ,
출력 열 없이 특정 기간 수를 예측하려는 이유를 잘 모르겠습니다. NN이든, 트리 기반이든, kNN이든 모델에 대한 좋은 예측 변수 집합이 있다는 것을 알고 있다면 그것이 실제로 중요하다고 생각하지 않습니다. 다음 이벤트. 모델에 Y 열을 공급해야 합니다. 그렇지 않으면 모델의 교육 및 검증을 위해 시도하고 예측할 결과가 없습니다. 플랫폼을 사용하면 예측 수식을 데이터 테이블에 저장하거나 생성한 다른 예측과 비교하기 위해 Depot에 게시할 수 있으므로 새 데이터에서 테스트하고 어떤 메트릭이 더 나은 모델인지 확인할 수 있습니다. 분류 또는 회귀를 수행하는지 여부를 보고 있습니다.
여유 시간이 있을 때 파레토 경계를 조사해야 합니다. 추가 기능에 감사드립니다.
JMP 내에서 다양한 모델링 플랫폼을 모두 실행하는 원스톱 GUI가 있다면 좋겠지만 지금 당장 수행하기에는 부담이 큽니다. 향후 버전에서는 플랫폼을 추가할 수 있습니다. 지금은 NN, 부스트 트리, 부트스트랩 포리스트 및 XGBoost를 실행할 수 있습니다. kNN, naive Bayes, SVM도 목록에 추가할 계획입니다. 특히 여러 플랫폼을 호출할 때 버그 등을 해결하는 데 시간이 걸립니다.
감사해요!,
DS
Re: 신경망 자동화안녕하세요 디드리히,
좋은 설명, 쿼리: JMP 신경망을 사용한 시계열 예측에 대해 1, 2, 3개 이상의 입력 열을 사용하여 향후 2, 3, 4, 5개 이상의 기간을 예측할 수 있는 방법 ? ... 즉, 출력 열이 없습니다.
다목적 최적화(파레토 경계)와 관련하여 JMP 커뮤니티에서 다운로드할 수 있는 매우 우수한 GUI를 첨부했습니다. 아마도 작업 중인 GUI를 업데이트하는 데 도움이 될 것입니다.
GUI가 시계열(ARIMA, Winter ...)을 포함하여 JMP가 가지고 있는 모든 플랫폼의 매개변수를 최적화할 수 있다면 일부 최적화가 수행할 수 있는 작업을 사용자가 수행해야 하는 것을 피할 수 있다면 좋을 것입니다.
당신의 도움을 주셔서 감사합니다!
인사말,
마르코
Re: 신경망 자동화안녕 @giaMSU ,
서로 다른 NN을 서로 다른 유효성 검사 체계와 비교하고 싶다면 무작위 시드를 12345와 같은 숫자로 설정합니다. 그렇게 하면 항상 같은 지점에서 시작됩니다. 거기에서 어디로 가는지는 모델에 사용된 매개 변수와 유효성 검사 세트에 따라 다르지만 적어도 모두 같은 위치에서 시작됩니다.제 경험상 좋은 검증 체계를 갖추는 것이 매우 중요합니다. 교육 또는 검증을 위한 특정 예를 선택하면 특정 결과를 다른 결과보다 선호하는 매우 불균형한 데이터 세트를 생성할 수 있으며, 이는 결국 교육에 과적합되고 검증 세트를 잘 예측하지 못하거나 그 반대가 될 수 있습니다. 중첩된 k-폴드 유효성 검사 체계의 일종인 K-폴드 유효성 검사 열을 만드는 것을 고려할 수도 있습니다. 그런 다음 각 중첩 열에 대한 적합 예측 및 적합 통계를 볼 수도 있습니다. 그냥 생각.
행운을 빌어요!,
DS
Re: 신경망 자동화안녕 @마르코1 ,
파레토 경계 DOE 생성을 수행하는 데 JMP에서 어떤 플랫폼을 사용할지 잘 모르겠습니다. 지금 업데이트하고 있는 내 GUI에서는 공간 채우기 DOE 플랫폼을 호출합니다. 이 플랫폼은 공간 채우기 DOE의 낮은 입력 값과 높은 입력 값을 기준으로 하이퍼 매개변수 공간을 포인트로 최적으로 채웁니다. 생성된 결과 데이터 테이블은 모든 맞춤 통계를 저장하므로 각 맞춤을 평가하고 나중에 플랫폼에서 수동으로 돌아가서 실행할 수도 있습니다.
내가 아는 한, JMP는 2개 이상의 계층을 지원하지 않습니다. 자세한 내용은 기억나지 않지만 지난 주 Discover Summit Americas의 세션 중 하나에서 언급되었습니다. 성능(특히 예측 성능)을 평가할 때 두 개 이상의 레이어는 모델을 구축하는 데 추가 계산 시간에 대해 많이 추가되지 않았기 때문이라고 생각합니다. 또한 NN으로 부스팅할 때 하나의 레이어만 허용된다는 점에 유의하십시오. 종종 노드 수는 레이어 수보다 더 의미가 있습니다.
내가 아는 한 NN 플랫폼으로 시계열을 모델링할 수 있어야 합니다. 거기에는 어떤 제한도 없습니다. 물론 유일한 도전은 NN 모델의 해석 가능성입니다. NN에서 X의 -> Y의 변환을 해석하는 것이 훨씬 더 어렵습니다.
하이퍼파라미터 공간을 탐색하기 위해 기본 NN 튜닝 테이블(NN 튜닝)과 공간 채우기 DOE를 첨부하고 있습니다. DOE에는 네 가지 패널티 방법 중 두 가지만 있습니다. 또한 모든 변수(강력한 맞춤 제외)를 다양하게 허용했지만 부스팅은 단일 계층 모델에만 허용되므로 코드는 자동으로 2계층 선택을 제거하고 부스팅 옵션으로 되돌아갑니다. 마지막으로 GUI를 실행할 때 선택한 튜닝 테이블에 13개 열이 모두 있어야 합니다. 존재하지 않으면 오류가 발생합니다.
DOE 플랫폼은 기본적으로 상수인 모든 요소를 제거합니다. DOE를 생성한 후 열이 누락된 경우 요인 테이블에서 다시 복사해야 합니다(그리고 값을 테이블 끝까지 채워야 함). 따라서 Robust Fit이 0에서 일정하게 유지되는 예입니다. 공간 채우기 DOE를 생성하기 위해 120회 실행과 함께 1234의 임의 시드를 사용했습니다.
도움이 되었기를 바랍니다,
DS
Re: 신경망 자동화안녕하세요 디드리히,
반갑습니다. 사용자가 조정해야 하는 모든 하이퍼파라미터에서 GUI가 다중 객체 최적화(파레토 경계)를 수행하고 2개 이상의 레이어(딥 러닝)를 생성할 수 있다면 훌륭할 것입니다.
질문: JMP 신경망으로 시계열을 예측할 수 있습니까?
제가 보낸 예, 즉 조정 테이블은 JMP의 사용자 정의 DOE에서 생성한 것입니다. 이제 막 NN과 DOE를 사용하는 방법을 배우는 중인데 DOE가 어떤 열을 제거합니까? 어떤 열을 어떤 테이블에 배치해야 합니까? 즉, 데이터 테이블 또는 조정 테이블?
예를 보내 주시겠습니까?
귀하의 답변과 도움에 감사드립니다 !!!
인사말,
마르코
Re: 신경망 자동화안녕 @마르코1 ,
감사합니다. 실제로 사용자를 위한 튜닝 테이블을 생성하도록 JSL을 더욱 업데이트하는 과정에 있습니다. 수동으로 수행하는 문제는 예, 코드의 내용을 잘 알아야 한다는 것입니다. 문제는 각 행에 모델링 플랫폼에 공급되는 매개 변수가 포함되어 있기 때문에 일정하더라도 코드에서 특정 열이 튜닝 데이터 테이블에 있을 것으로 예상한다는 것입니다.
내 추측으로는 조정 테이블을 만들 때 JMP가 자동으로 모든 상수 항을 삭제한 것 같습니다. 결과 조정 테이블에는 올바른 열이 없으므로 오류가 발생합니다. 저는 최고의 프로그래머가 아니기 때문에 가능한 모든 시나리오를 시도하는 데 시간이 좀 걸립니다.
그 동안 다음 버전이 나오기 전에 JMP가 떨어뜨린 열을 다시 복사한 다음 테이블 끝에 값을 채우는 것이 좋습니다. 이것은 당신을 갈 것입니다. 다른 문제가 있으면 알려주세요.
도움이 되었기를 바랍니다!,
DS
Re: 신경망 자동화안녕하세요 디드리히 슈미트,
GUI Gen_AT_v3.0에 대해 축하합니다. 사용 방법을 모르는 것 같습니다. 오류가 발생합니다.
매뉴얼이나 예제가 있습니까?
첨부된 시계열 테이블 및 매개변수 테이블.
지원해 주셔서 감사합니다.
인사말,
마르코





Re: 신경망 자동화안녕 DS,
도와 주셔서 감사합니다. 솔직히 포기하고 수동으로 했습니다.
사람들에게 물어보거나 JMP 스크립팅 인덱스로 스스로 학습하면서 스크립트를 여러 번 시도했습니다. 예를 들어 fit()에서 Get RSquare Validation 옵션을 사용하거나 추가했습니다. rSquare = (report(obj)["검증"]["mvalue"][NumberColBox(1)]< 쇼(rSquare);
둘 다 작동하지 않았습니다.
K-겹 검증 데이터 세트를 무작위로 선택하는 것에 대한 귀하의 제안에 대해. 좋은 생각입니다. 그러나 NN 간의 성능을 비교할 수 있도록 NN 구조의 일관성을 유지하고 싶습니다. 인공 NN을 사용하여 내가 읽은 대부분의 논문은 반복 중에 유효성 검사 데이터 세트를 선택하는 방법에 대해 언급하지 않습니다.
R2의 개선 사항을 확인하기 위해 노력하겠습니다. 곧 결과를 알려드리겠습니다.
최상의
Re: 신경망 자동화물론입니다. 도움이 되었다니 다행입니다!Re: 신경망 자동화매우 감사합니다.
Re: 신경망 자동화감사합니다, .@G_M!Re: 신경망 자동화잘 하셨어요, @SDF1 .
Re: 신경망 자동화안녕 @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
Re: 신경망 자동화하이디에스
당신의 기여에 감사드립니다.
여전히 문제에 작은 문제가 있습니다. NN 보고서의 PDF 파일을 수천 개 저장했습니다. 그런 다음 각 NN의 R2를 얻기 위해 많은 pdf 파일을 수동으로 읽어야 하므로 문제가 되었습니다.
자동으로 추출하는 스크립트를 실행하고 싶습니다. 도와주세요?
감사합니다
GN
Re: 신경망 자동화안녕 @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 문자 코드로 저장하여 구분할 수 있습니다. "save" 줄을 다음과 같이 수정할 수 있습니다.
NNReport << Save PDF("E:/Ready_for_ANN/result_LocID_"|| Char(dt_list[i]:ID[1]));도움이 되었기를 바랍니다!,
DS
Re: 신경망 자동화Hi @giaMSU ,
나는 NN 핏을 자동화하는 아이디어를 좋아하고 다른 플랫폼에서도 비슷한 작업을 수행했습니다. 나는 최적의 피팅을 찾기 위해 NN 플랫폼에서 다양한 피팅 매개변수를 테스트하기 위해 NN과 유사한 작업을 시도해 볼 것이라고 생각합니다.
나는 매우 유사한 작업을 수행했지만 다른 모델링 플랫폼(랜덤 포레스트 및 부스트 트리)을 사용했습니다. 주요 라인의 기능에 대한 설명과 함께 아래 코드를 포함하겠습니다.
그러나 일반적으로 새 위치를 선택할 때마다 NN Fit에 새 정보를 제공하지 않습니다. 적합은 실제로 FOR 루프 내부에 있어야 합니다. 내 데이터 테이블 안에 스크립트 코드로 내 것이 있고 가장 적합한 것을 얻으려면 매우 큰 튜닝 테이블을 실행해야 하기 때문에 이 작업을 수행합니다. 이렇게 하면 내 컴퓨터의 메모리가 많이 절약됩니다. 이런 방식으로 데이터 테이블에서 24,000개 이상의 행을 수행하여 밤새도록 실행할 수 있습니다.
그건 그렇고, 이것의 원래 개념과 핏을 위한 루프에 대한 아이디어는 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
Re: 신경망 자동화안녕 @giaMSU ,
이것은 매우 가능한 것처럼 들리지만 귀하의 질문은 꽤 개방적입니다.커뮤니티의 도움이 필요한 장애물은 무엇입니까?
신경망용 스크립트부터 시작하여 각 위치에 대해 스크립트에서 대체해야 할 위치를 확인하겠습니다.위치별 정보를 추출하고, 신경망 분석을 수행하고, 보고서/스크립트를 저장하는 함수 또는 표현식을 정의합니다.매번 해당 함수/표현식을 실행하는 위치를 반복합니다.
Re: 신경망 자동화@giaMSU , 당신이 계획한 일은 가능합니다.1 단계. 요약 기능을 사용하여 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")
);Re: 신경망 자동화@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 ) )
);
Neural 스크립트를 사용하면 괜찮을 수도 있고 적어도 90% 정도는 완료될 수도 있습니다.
Re: 신경망 자동화도움을 주셔서 감사합니다. 저는 2개의 위치 데이터 세트를 사용하여 스크립트를 작성했습니다.
먼저 JMP 14 Pro에서 실행된 NN에서 저장된 신경 스크립트를 사용했습니다. 저는 각각 6개의 노드와 3개의 노드로 구성된 2개의 히든 레이어를 사용했습니다.
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개 위치)을 첨부했습니다.
문제를 해결하도록 도와주세요.
미리 감사드립니다.
Re: 신경망 자동화안녕하세요 G_M님,
나는 당신의 스크립트를 시험해 보았습니다. 잘 실행되지만 정확히 내가 원하는 대로 실행되지는 않습니다. 스크립트가 모든 위치에서 데이터를 추출하여 하위 집합을 만든 다음 신경망을 실행하는 것처럼 보입니다. 02개 위치의 하위 집합으로 테스트했습니다. 신경은 두 번 작동했습니다. 그러나 그들의 보고서는 동일합니다. 그래서 For 루프에는 몇 가지 문제가 있다고 생각합니다. 저 좀 도와 주 시겠어요 ? 필요할 경우를 대비하여 이 토론에 스크립트와 데이터를 첨부했습니다.
감사해요Re: 신경망 자동화문제는 Select Where 함수에서 :ID 주위에 Char 함수를 추가해야 한다는 것입니다.
Select Where(loc[j] == Char(:ID))
Re: 신경망 자동화이제 스크립트가 잘 실행됩니다.
스크립트에 작은 문제가 있습니다. 파일 이름이 "Model Subset File"이므로 스크립트는 각 단계에서 PDF 파일을 대체합니다. 완료되면 폴더에는 파일만 남게 됩니다. 스크립트가 각 보고서를 고유한 이름으로 기록할 수 있도록 파일 이름에 위치 ID를 추가하는 데 도움을 주실 수 있나요?
감사해요
Re: 신경망 자동화보고서가 너무 많이 쓰여지는 것 같습니다. 다음과 같이 ID를 보고서에 연결해 보세요.
Save PDF("C:\test\model_"|| Char(i) ||".pdf");Re: 신경망 자동화안녕하세요 G_M
여러분의 도움으로 저는 거의 천 건에 달하는 신경망 분석을 실행했습니다. 또한 NN 보고서의 PDF 파일을 수천 개 저장했습니다. 그러다가 각 NN의 R2를 얻으려면 많은 PDF 파일을 수동으로 읽어야 했기 때문에 문제가 되었습니다.
추가하려고했는데 RSquare 테스트 받기 R2 값을 표시할 수 있도록 스크립트에 추가합니다. 그런 다음 다음을 사용하여 파일과 함께 저장할 수 있습니다.
obj << Save (Get Gen RSquare Test)
스크립트는 계속 실행 중이지만 R2 값은 어디에도 저장되지 않습니다. 나는 그 가치를 볼 수 없다.
이 문제를 해결하도록 도와주실 수 있나요?
매우 감사합니다.
GN
Re: 신경망 자동화@giaMSU , 따라서 제가 접근하는 방식은 보고서 레이어에 액세스하여 보고서 레이어의 트리 구조에 있는 적절한 표시 상자에서 값을 가져오는 것입니다. 일단 캡처되면 보고서의 R^2_i 통계는 값을 목록에 삽입한 다음 목록에서 데이터 테이블을 생성하거나, 데이터 테이블을 생성하고 값을 단일 데이터 테이블에 연결할 수 있습니다. 스크립팅 인덱스에서 Show Tree Structure를 검색하세요.
Re: 신경망 자동화스크립트를 배우세요.