파티션 플랫폼의 분할 수에 패널티를 추가하여 잎 수를 줄이시겠습니까?저는 최근에 Partition 플랫폼에서 많은 시간을 보냈고 현재 분석을 자동화할 방법을 찾고 있습니다.
내 문제는 다음과 같습니다. 일반적으로 데이터 세트를 50/50 훈련/검증으로 분할하고 "이동"을 눌러 검증 RSquare를 최대화합니다. 하지만, 이것은 종종 실제로 신뢰할 수 있는 것보다 더 많은 분할이 있는 모델로 이어집니다. , 예를 들어 여기에서 Validation RSquare 0.288에 도달하기 위해 5개의 분할을 생성하는 경우, 2개의 분할을 사용하면 0.27의 거의 동등하게 적합합니다.

결과적으로, 나는 일반적으로 허용 가능한 적은 수의 모델 항으로 허용 가능한 양호한 Validation RSquare를 얻기 위해 항상 수동으로 분할을 제거해야 합니다.
JMP에 페널티를 적용하고 분할 수를 기반으로 모델 선택 기준에 페널티를 주는 일종의 "정규화된" 검증 RSquare를 생성하도록 요청하는 방법이 있습니까? 예를 들어, "정규화된" Validation RSquare는 [Validation RSquare] - 0.05*[N Splits]일 수 있습니다. 또는 정규화하는 더 좋은 방법이 있습니다(예: 절대 분산의 5%가 아닌 잔차 분산의 최소 5%를 모델링할 수 있는 경우 항을 계속 추가).
JSL 솔루션은 주로 자동화된 분석을 위한 것이므로 환영합니다.
해석학스크립팅Re: 파티션 플랫폼의 분할 수에 패널티를 추가하여 리프 수를 줄입니까?안녕하세요 @markschwab ,
우려 사항과 관련하여 분할 횟수가 정말 신뢰할 수 있는지 아니면 분할 횟수가 상당히 적습니까? 신뢰할 수 있는 분할 수는 데이터 테이블의 행에서 1을 뺀 것이라고 생각하지만 100%는 아닙니다.
어쨌든, 나는 자동 분할을 수행하는 데 사용할 수 있는 코드 조각을 포함하고 있습니다. 저는 Boston Housing.jmp 파일로 이 작업을 수행했습니다.
JSL에 익숙하다면 필요에 맞게 수정할 수 있어야 합니다. 코드는 매우 기본적이며 숫자의 연속 응답 열이 있다고 가정합니다. 첫 번째 창에서 정의한 최대 파티션 수만큼 파티셔닝을 실행한 다음 파티셔닝 통계를 저장합니다. 예를 들어 "벌점" 유효성 검사 RSquare를 갖도록 고유한 열 수식을 쉽게 만들거나 파티션에 벌점을 적용하도록 선택할 수 있습니다. 그런 다음 기준에 가장 적합한 파티션을 선택하고 결정한 고정 수의 분할로 다시 실행할 수 있습니다. 프로그램을 멋지게 꾸밀 방법에 대한 몇 가지 아이디어가 있지만 그건 나중을 위한 것입니다.
참고로, 검증 열을 만들고(Pro가 없는 경우 스크립팅 인덱스에서 검색하여 수행할 수 있음) 응답 열로 계층화하면 훈련/검증 세트에 더 많은 정보를 제공할 수 있습니다. 50/50이 아닌 분할을 처리할 때 동등한 표현. 이렇게 하면 파티션을 훈련하기 위해 더 많은 데이터를 가질 수 있습니다.
도움이 되었기를 바랍니다!,
DS
Names Default To Here( 1 );
lbWidth = 168;
//dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
// Expression to store the current settings in global variables
recallRolesS1 = Expr(
::dtchosenRecall = dtchosen
);
// Expression to clear all current settings. KW: Clear
clearRoles = Expr(
Try(
colListY << RemoveAll;
ColListX << RemoveAll;
ColListW << RemoveAll;
ColListF << RemoveAll;
colListV << RemoveAll;
)
);
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::xcolRecall = colListX << GetItems;
::WcolRecall = colListW << GetItems;
::FcolRecall = colListF << GetItems;
::vcolRecall = colListV << GetItems;
);
//Function to choose the data table to model. KW: choose_data
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL>Re: 파티션 플랫폼의 분할 수에 패널티를 추가하여 리프 수를 줄입니까?감사 해요 @DiedrichSchmidt 자세한 답변을 위해! 대본을 소화하는 데 시간이 걸릴 것입니다.
지금은 사용 방법의 예와 함께 간단한 입문서를 제공할 수 있습니까? 다음은 내가 시도한 내용이며 오류가 발생합니다.
1) "dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );" 줄의 주석 처리를 제거합니다. 그리고 스크립트를 실행
2) "데이터 테이블 선택" -> "Boston Housing" -> 확인을 클릭합니다.
3) "작업"에서 "확인"을 클릭합니다.
4) "JSL to help with Partitioning" 창에서 "nox"를 Y로, "age"를 X로 변환하고 "OK"를 누릅니다.
5) JMP 경고가 표시됩니다." 'w[Outline Box("Partition for " || ycols[1])]' , w[/*###*/Outline Box( "Partition for " || ycols[ 1] )] ". "Partition_Results" 테이블은 1-20 범위의 "Splits" 열을 제외하고 null입니다.
Re: 리프 수를 줄이기 위해 파티션 플랫폼에서 분할 수에 패널티를 추가합니까?안녕하세요 @markschwab ,
의도한 대로 코드를 사용하고 있습니다. 어떤 상황에서도 작동하기에 충분히 일반적이지 않은 추측을 했습니다. 유효성 검사 열이 있다고 생각하고 하나와 함께 실행되도록 스크립팅했습니다. 아래의 업데이트된 스크립트는 파티션 플랫폼 창에서와 같이 유효성 검사 부분을 입력할 수 있도록 하여 이 문제를 해결합니다. 그러나 유효성 검사 열과 유효성 검사 부분을 모두 사용하지 마십시오. 스크립트는 아직 이를 설명하기 위해 코딩되지 않았으며 가능한 모든 사용자 입력에 대해 충분히 일반적이지 않습니다.
발생한 오류는 프로세스에 둘 이상의 X 요소가 있다고 가정하고 그에 따라 보고서 창에 대한 참조를 스크립팅했기 때문입니다. 이제 X가 1개만 있든 여러 개가 있든 상관없도록 수정되었습니다.
다시 말하지만, 이 스크립트는 비숫자/비연속 응답 열 Y를 설명하기에 충분히 일반적이지 않습니다. 응답이 범주형인 경우 이 스크립트는 이를 설명하도록 설계되지 않았습니다. 필요한 경우 그렇게 하도록 쉽게 수정할 수 있습니다.
도움이 되었기를 바랍니다,
DS
업데이트: 알겠습니다. 그래서 더 많은 코딩을 할 수 없었고 몇 가지 벌점을 받은 RSquare 열과 학습 검증 RSquare 열을 포함했습니다. 코드를 편집하여 벌점 계산의 공식과 계수를 변경할 수 있습니다. 저는 이것을 Rsquare-0.05*Splits의 개념으로 설정했습니다. 그 외에도 계산 실행이 완료되면 결과를 그래픽으로 표시하는 몇 가지 코드도 포함했습니다.
업데이트 2: 돌아가서 코드를 좀 더 재미있게 만들었습니다. 이제 그래프 결과와 함께 테이블 결과를 볼 수 있으며 그래프에서 가장 좋아하는 지점을 선택하여 특정 파티션에 대해 파티션을 다시 실행할 수 있습니다. "확인"을 클릭할 때 분할 수. 이전과 마찬가지로 모든 종류의 사용자 입력에 대해 매우 일반적으로 만들지 않았지만 숫자/연속 응답에 대해 작동하도록 하려고 했습니다. 지금 가지고 있는 것으로 충분해야 합니다.
추신 코드를 배우면서 JMP 도움말 메뉴의 스크립팅 색인을 사용하십시오. 일부 호출을 이해하고 스크립팅할 때 호출을 사용하는 방법을 이해하는 데 매우 유용합니다.
Names Default To Here( 1 );
lbWidth = 168;
dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
// Expression to store the current settings in global variables
recallRolesS1 = Expr(
::dtchosenRecall = dtchosen
);
// Expression to clear all current settings. KW: Clear
clearRoles = Expr(
Try(
colListY << RemoveAll;
ColListX << RemoveAll;
ColListW << RemoveAll;
ColListF << RemoveAll;
colListV << RemoveAll;
)
);
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::xcolRecall = colListX << GetItems;
::WcolRecall = colListW << GetItems;
::FcolRecall = colListF << GetItems;
::vcolRecall = colListV << GetItems;
::max_spRecall = max_sp_input << get;
::partVPRecall = partVP_input << Get;
);
//Function to choose the data table to model. KW: choose_data
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL>