안녕하세요 여러분
JMP Japan의 테스터 인 Yusuke Ono입니다.
k-fold 검증을 사용할 때 예측 값이 때때로 매우 시끄러워지는 것 같습니다. 아래 스크린 샷을 참조하십시오. 이것은 하나의 X 변수가있는 모델에 대한 예측 값의 플롯입니다. 5 중 유효성 검사가 사용됩니다.

우리가 예측 한 값은 아래와 같이 간단하게 계산할 것을 제안하고 싶습니다.
(0 + :Name( "y Predictor FoldA==1" ) + :Name( "y Predictor FoldA==2" ) +
:Name( "y Predictor FoldA==3" ) + :Name( "y Predictor FoldA==4" ) +
:Name( "y Predictor FoldA==5" )) / 5
현재 예측 식은 다음과 같습니다.
If( :N Val > 0,
(0 + :Name( "FoldA==1" ) * :Name( "y Predictor FoldA==1" ) + :Name( "FoldA==2" )
* :Name( "y Predictor FoldA==2" ) + :Name( "FoldA==3" ) *
:Name( "y Predictor FoldA==3" ) + :Name( "FoldA==4" ) *
:Name( "y Predictor FoldA==4" ) + :Name( "FoldA==5" ) *
:Name( "y Predictor FoldA==5" )) / :N Val,
(0 + (1 - :Name( "FoldA==1" )) * :Name( "y Predictor FoldA==1" ) + (1 -
:Name( "FoldA==2" )) * :Name( "y Predictor FoldA==2" ) + (1 -
:Name( "FoldA==3" )) * :Name( "y Predictor FoldA==3" ) + (1 -
:Name( "FoldA==4" )) * :Name( "y Predictor FoldA==4" ) + (1 -
:Name( "FoldA==5" )) * :Name( "y Predictor FoldA==5" )) / :N Trn
);
귀하의 의견을 말씀해 주시겠습니까?
이 현상을 재현하는 단계
(1) 아래 스크립트를 실행하여 샘플 데이터 세트를 만듭니다.
Names Default To Here(1);
Random Reset(111111111);
n = 10000;
x = J(n, 1, Random Uniform(-10, 10));
y = Sin(x) + J(n, 1, Random Normal());
As Table(x||y,<<COLUMN names=""></COLUMN>
(2) 고르다 [추가 기능] > [XGBoost] > [K- 폴드 컬럼 만들기] .
2-1. "1"입력 [생성 할 K- 폴드 열 수] .
2-2. "y"를 지정하여 [Y, 응답] .
2-3. 딸깍 하는 소리 [가다] .
(삼) 아래 스크립트를 실행하십시오.
XGBoost(
Y( :y ), X( :x ),
Validation( :FoldA ),
Fit( max_depth( 3 ), alpha( 10 ), lambda( 10 ), iterations( 50 ) ),
);
(4) 고르다 [예측 공식 저장] "모델 1"개요의 빨간색 삼각형 메뉴에서.
(5) 저장된 예측 값을 보려면 아래 스크립트를 실행하십시오.
Graph Builder(
Size( 1209, 478 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :y Predictor ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "x", ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -3 ), Max( 3 ), Inc( 1 ),
Minor Ticks( 1 )}
)
)
);
(6) 내 제안의 줄거리를 보려면 아래 스크립트를 실행하십시오.
New Column( "My Suggestion",
Formula(
(:Name( "y Predictor FoldA==1" ) +
:Name( "y Predictor FoldA==2" ) +
:Name( "y Predictor FoldA==3" ) +
:Name( "y Predictor FoldA==4" ) +
:Name( "y Predictor FoldA==5" )) / 5
)
);
Graph Builder(
Size( 1209, 478 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :My Suggestion ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "x", ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -3 ), Max( 3 ), Inc( 1 ),
Minor Ticks( 1 )}
)
)
);
첨부 된 데이터 테이블에는 이러한 결과가 있습니다. 도표를 보려면 테이블 스크립트를 실행하십시오.
미리 의견을 보내 주셔서 감사합니다.
Yusuke에게 물어볼 좋은 질문입니다. 전체 프로세스를 두 가지 주요 단계로 나누면 먼저 하나 이상의 합리적인 XGBoost 모델을 결정합니다. 이 k- 폴드 크로스 밸리데이션 또는 이와 유사한 것은 매우 중요합니다. 두 번째는 예측입니다.이를 현재 학습 데이터와 새 테스트 데이터에 대한 예측으로 나누겠습니다. 학습 데이터에 대한 예측의 경우 동일한 데이터에 대해 학습 된 모델을 사용하면 일반적으로 과적 합되고 비현실적으로 좋은 예측이 생성되므로 접을 수없는 예측이 가장 적합합니다. 새로운 테스트 데이터의 경우 데이터를 보지 못한 모든 모델의 예측을 평균화하는 것이 제안한대로 좋습니다. (사실 추가 기능은 Y가 누락 된 모든 행에 대해 이미이 작업을 수행합니다.) 교차 유효성 검사에 의해 결정된 매개 변수를 사용하여 유효성 검사없이 전체 데이터에 대한 후속 최종 맞춤을 수행하는 것도 괜찮습니다. 내 경험에 따르면 평균 k- 폴드 ( "배깅")의 예측과 전체 데이터 피팅의 예측은 매우 유사한 경향이 있습니다. 예를 들어 0.5 * (배깅 된 k- 폴드 예측) + 0.5 * (전체 데이터 피팅에서 예측). k-fold 모델 피팅 중에서 "최적"을 찾으려고하는 것은 시도 할 가치가 없다고 생각합니다. 왜냐하면 그것들은 운영상 동등하고 그러한 선택에 과적 합할 위험이 있기 때문입니다.
답장 해주셔서 감사합니다, Russ.
이제 JMP의 XGBoost에 의한 이러한 접이식 예측이 모델 평가, 이상 값 감지 및 앙상블 모델 작성에 사용될 수 있음을 이해합니다.
k 교차 검증을 사용할 때 최종 예측 모델을 만드는 여러 가지 방법이라고 생각합니다.
- 모든 데이터에 대해 선택된 조정 매개 변수로 모델을 다시 맞추십시오. (<이것은 당신의 조언입니다.)
- 평균 k 모델. (<제 제안입니다.)
- k 개의 모델 중 "최상의"모델 만 사용하십시오.
일반적으로 첫 번째 방법이 최종 예측 모델을 얻는 데 두 번째 및 세 번째 방법보다 낫다고 생각하십니까?
질문에 대해 Yusuke에게 감사하고 JSL로 재현하는 방법에 대한 아주 좋은 설명입니다. JMP의 다른 예측 모델링 플랫폼과 비교하여 예측 값을 계산할 때 추가 기능이 작동하는 방식 사이에 중요한 차이점이 있습니다. 추가 기능의 예측은 "out-of-fold"입니다. 즉, 각 예측 값은 해당 관측치를 제외하는 모델 적합도에서만 계산됩니다.
기본 5 겹을 예로 들어 데이터의 첫 번째 행이 폴드 3에 할당되었다고 가정합니다. 추가 기능은 5 개의 모델에 적합하며 각 접힌 부분을 차례로 유지하지만 첫 번째 행에 대한 예측 값은 접힘 3을 제외한 세 번째 맞춤 만 기반으로합니다. 모든 행에 유사한 논리가 사용됩니다. 왜 이러나요? 몇 가지 이유:
1. 접을 수없는 예측은 모델이 미래의 보이지 않는 데이터에서 어떻게 수행 될지에 대한 현실적인 평가를 제공합니다. 실제로 "Validation"이라는 레이블이 붙은 모든 출력 통계 및 그래픽은 out-of-fold 예측을 기반으로합니다. 아시다시피 이러한 예측의 변동성은 '접힘'데이터로 계산 된 예측, 즉 학습 및 예측에 동일한 데이터가 사용되는 경우보다 훨씬 클 수 있습니다.
2. 접을 수없는 예측 열은 모델이 전체 학습 세트에서 만들었을 수있는 이상 값과 오류를 찾는 데 좋은 방법입니다. K-fold는 각 관측 값이 정확히 한 번만 수행된다는 점에서 좋습니다. 따라서 모든 행에 대해 out-of-fold 예측이 있습니다.
삼. 접을 수없는 예측 열은 다른 좋은 모델에서 생성 된 유사한 열로 앙상블하는 데 사용할 수 있습니다. 이는 단순 평균화 또는 "스태킹"이라고하는 기술에서 두 번째 수준 모델의 새로운 예측 자로 접는 열을 사용하여 수행 할 수 있습니다. 두 번째 수준 모델은 일반적으로 첫 번째 수준 모델보다 간단합니다. 예를 들어 Generalized Regression의 올가미 모델 또는 깊이가 더 얕은 다른 XGBoost 모델도 있습니다. 누적 앙상블 모델은 첫 번째 수준 모델보다 더 나은 예측 성능을 갖는 경향이 있습니다.
제안하는 간단한 학습 기반 예측을 얻으려면 유효성 검사 열이 지정되지 않은 새 XGBoost 모델을 맞추는 것이 좋은 방법 중 하나입니다. 또 다른 관련 방법은 데이터 테이블의 복사본을 만들고 모든 Y 값을 결 측값으로 설정 한 다음 원본 데이터에 연결하는 것입니다. 이 경우 Y가 누락 된 행에 대한 예측은 "배깅 (bagging)"이라고하는 기술인 모든 피팅 된 모델에 대한 예측의 평균이됩니다.
마지막으로, 표시하는 복잡한 수식은 모든 경우를 포괄 한 결과라고 언급하고 싶었습니다. 예를 들어 원본 데이터의 행에 누락 된 Y가있는 경우 모든 모델에 대해 배깅 된 예측을 사용하려고합니다.