중첩 교차 검증에서 하이퍼 파라미터를 얻는 방법은 무엇입니까?


17

중첩 교차 유효성 검사에 대한 다음 게시물을 읽었으며 여전히 중첩 교차 유효성 검사를 사용하여 모델 선택과 관련하여 100 % 확실하지 않습니다.

혼란을 설명하기 위해 중첩 교차 검증 방법을 사용하여 모델 선택을 단계별로 살펴 보겠습니다.

  1. K-Fold를 사용하여 외부 CV 루프를 만듭니다. 이것은 각각의 내부 CV 루프를 "이득"한 하이퍼 파라미터의 성능을 추정하는 데 사용됩니다.
  2. GridSearchCV를 사용하여 각 내부 루프에서 GSCV는 가능한 모든 매개 변수 공간 조합을 거쳐 최상의 매개 변수 집합을 생성하는 내부 CV 루프를 만듭니다.
  3. GSCV가 내부 루프에서 최상의 매개 변수를 찾은 후에는 성능 추정을 위해 외부 루프의 테스트 세트로 테스트됩니다.
  4. 그런 다음 외부 루프는 테스트 세트로 나머지는 훈련 세트로 다음 접기로 업데이트되고 1-3이 반복됩니다. 가능한 총 "승리"매개 변수는 외부 루프에 지정된 접기 수입니다. 외부 루프는 5 개 주름이다 그래서 경우에, 당신은과 알고리즘의 성능을 평가해야합니다 5 개 가지 세트 하이퍼 매개 변수, NOT 하이퍼 매개 변수 중 하나 개 특정 세트의 성능을.

이 방법은 SKLearn의 예제 페이지에 설명되어 있습니다. http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html

질문 : 4. 이후에 어떤 하이퍼 매개 변수가 가장 효과가 좋은지 어떻게 알 수 있습니까? 마지막에 COMPLETE 데이터 세트를 사용하여 알고리즘 (예 : 로지스틱 회귀, 랜덤 포레스트 등)을 학습하고 싶다는 것을 이해합니다. 그러나 중첩 교차 검증에서 어떤 하이퍼 매개 변수가 가장 효과가 좋은지 어떻게 알 수 있습니까? 내 각 루프마다 다른 하이퍼 매개 변수 집합이 이길 것입니다. 그리고 외부 루프의 경우 GridSearchCV 성능을 추정하지만 특정 하이퍼 매개 변수 세트를 얻지 못합니다. 따라서 최종 모델 작성에서 어떤 하이퍼 매개 변수를 사용해야하는지 어떻게 알 수 있습니까? 그것은 다른 발판에서 이해하기 어려운 논리입니다.

특히 @Dikran Marsupial 및 @cbeleites가 차임 할 수있는 경우 팁에 대해 미리 감사드립니다!

편집 : 가능 하면 "알고리즘"및 "하이퍼 매개 변수"와 같은 용어를 사용하십시오. 사람들이 "모델"또는 "모델 선택"이라는 용어를 사용할 때 혼란 스러울 수 있다고 생각합니다. 어떤 알고리즘을 사용할 것인지 또는 어떤 하이퍼 파라미터를 사용할 것인지 선택하는 것에 대해 혼란스러워합니다.

편집 2 : 중첩 교차 유효성 검사를 수행하는 두 가지 방법을 보여주는 노트북 을 만들었습니다 . 첫 번째 방법은 SKLearn 예제에 표시된 방법이며, 더 긴 방법은 내가 쓴 방법입니다. SKLearn에 표시된 방식은 "승리 된"하이퍼 파라미터를 노출시키지 않지만 제 방법은 더 깁니다. 그러나 질문은 동일합니다. 하이퍼 파라미터가 노출 된 경우에도 중첩 교차 검증을 완료 한 후 지금 무엇을해야합니까? 노트북 끝의 하이퍼 파라미터에서 볼 수 있듯이, 상당히 다양합니다.


1
노트북 +1 이 질문은 나에게도 관심이 있으며 후속 조치를 취할 것입니다.
아놀드 클라인

답변:


6

(나는 이미 대부분의 답변에 이것을 썼다고 확신하지만 지금은 그것을 찾을 수 없습니다. 누군가 그 답변을 우연히 발견하면 연결하십시오). 나는 여기에 두 가지 약간 다른 접근법을 보았습니다.

그러나 먼저 몇 가지 용어 :

  • 적용 분야에서 나에게 맞는 (적합한 / 훈련 된) 모델 은 바로 사용할 수 있습니다. 즉, 모델에는 새 데이터에 대한 예측을 생성하는 데 필요한 모든 정보가 포함 됩니다. 따라서 모델에는 하이퍼 파라미터포함 됩니다. 보다시피,이 관점은 아래의 접근법 2와 밀접한 관련이 있습니다.
  • OTOH, 내 경험에 대한 훈련 알고리즘 은 다음과 같은 의미로 잘 정의되어 있지 않습니다. 하이퍼 파라미터도 수정해야합니다. 내 응용 프로그램 관점에서 보면 매개 변수와 하이퍼 매개 변수 사이에는 큰 차이가 없습니다. 둘 다 모델의 일부이며 훈련 중에 추정 / 결정해야합니다.
    그들 사이의 차이점은 일반적으로 몇 가지 조향 매개 변수 ( 하이퍼 매개 변수와 함께 훈련 알고리즘 클래스를 설명하는 새로운 훈련 알고리즘을 개발하는 사람의 차이와 관련이 있다고 생각합니다.)는 애플리케이션 / 도메인 지식없이 수정 (또는 적어도 결정 / 추정 방법을 수정)하기 어렵거나 불가능합니다.

접근법 1 : 안정적인 최적화 결과 필요

이 접근 방식에서 "모델 교육"은 "일반"모델 매개 변수에 적합하며 하이퍼 파라미터 가 제공됩니다. 내부 교차 검증은 하이퍼 파라미터 최적화를 처리합니다.

하이퍼 파라미터 세트를 선택해야하는 딜레마를 해결하기위한 여기서 중요한 단계 / 가정 은 최적화가 안정적 이어야한다는 것 입니다. 유효성 검증을위한 교차 검증은 모든 대리 모델이 최종 모델과 동일하게 (최종 모델뿐만 아니라) 동일하게 취급 할 수 있도록 최종 모델 (전체 데이터 세트에 적용되는 동일한 훈련 알고리즘에 의해 획득 됨) 과 충분히 유사하다고 가정합니다 . 이 가정이 무너지면

  1. 대리 모델은 여전히 ​​동일하지만 최종 모델과 동일하지는 않지만 교차 검증의 잘 알려진 비관적 편향에 대해 이야기하고 있습니다.

  2. 대리 모델도 서로 같거나 같지 않으면 불안정성에 문제가 있습니다 .

내부 루프의 최적화 결과 는 최적화가 안정적인 경우 하이퍼 파라미터를 선택할 때 충돌이 없음을 의미합니다 . 그리고 상당한 변화가 내부 교차 검증 결과를 통해 관찰되는 경우, 최적화가 안정되지이다 . 불안정한 훈련 상황은 하이퍼 파라미터 중 어떤 것을 선택해야하는지 결정하는 것보다 훨씬 더 심각한 문제가 있으며,이 경우에는 물러나서 모델링 프로세스를 시작하는 것이 좋습니다.

그러나 여기에는 예외가 있습니다. 최적화에는 실제 목적에 대해 동일한 성능을 제공하는 몇 가지 로컬 최소값이있을 수 있습니다. 그들 중 안정적인 선택을 요구하는 것은 불필요 한 강력한 요구 사항 일 수 있지만이 딜레마에서 벗어날 수있는 방법을 모르겠습니다.

모든 모델이 동일한 승률 매개 변수 세트를 생성하지 않는 경우 일반 루프 오류로 외부 루프 추정값을 사용해서는 안됩니다.


  • 그러나 모든 스플릿이 동일한 파라미터를 생성 할 때 의사 결정이 없으면 외부 루프에서 독립성이 깨집니다. 각 스플릿의 테스트 데이터는 다른 모든 스 플리트에서 데이터를 학습하여 사용 된 파라미터 세트가 이미 결정된 결정에 이미 들어갔습니다. 매개 변수를 최적화합니다.

접근법 2 : 하이퍼 파라미터 튜닝을 모델 교육의 일부로 취급

이 방법은 "훈련 알고리즘 개발자"의 관점과 훈련 알고리즘의 응용 사용자를 연결합니다.

교육 알고리즘 개발자는 "나이키"교육 알고리즘을 제공 model = train_naked (trainingdata, hyperparameters)합니다. 적용되는 사용자의 요구에 tunedmodel = train_tuned (trainingdata)따라 하이퍼 파라미터를 수정해야합니다.

train_tuned네이 키드 트레이닝 알고리즘 주위에 교차 검증 기반 옵티 마이저를 래핑하여 구현할 수 있습니다 train_naked.

train_tuned그런 다음 하이퍼 파라미터 입력을 필요로하지 않는 다른 교육 알고리즘과 같이 사용할 tunedmodel수 있습니다. 예를 들어, 출력 을 교차 검증 할 수 있습니다. 이제 교차 검증의 평가의 일부로 "정상"파라미터가 안정성을 확인해야하는 것처럼 하이퍼 파라미터가 안정성을 확인합니다.

개별 매개 변수 세트에 관계없이 모든 우승 모델의 평균 성능을내는 경우 중첩 교차 검증에서 실제로 수행하는 작업입니다.


차이점이 뭐야?

우리는 아마도 두 가지 접근법을 취하는 다른 최종 모델로 끝날 수 있습니다.

  • 접근법 1의 최종 모델은 train_naked (all data, hyperparameters from optimization)
  • 반면 접근 방식 2는 train_tuned (all data)더 큰 데이터 세트에서 하이퍼 파라미터 최적화를 다시 실행하므로 다른 하이퍼 파라미터 세트로 끝날 수 있습니다.

그러나 동일한 논리가 적용됩니다. 최종 모델이 교차 검증 대리 모델과 실질적으로 다른 매개 변수를 갖는 경우, 이는 가정 1이 위반되는 증상입니다. 따라서 IMHO는 다시 우리는 갈등이 아니라 오히려 (내재적 인) 가정이 정당화되는지 점검합니다. 그리고 그렇지 않다면, 우리는 어쨌든 최종 모델의 성능을 제대로 평가하는 데 너무 많은 돈을 걸지 않아야합니다.


많은 사람들이 접근법 1을 수행하는 중첩 교차 검증에 대해 생각하는 인상 (여기 CV에서 비슷한 질문 / 혼란의 수를 보았 음)을 보았습니다. 그러나 일반화 오류는 일반적으로 접근법 2에 따라 추정됩니다. 최종 모델.


아이리스 예

요약 : 최적화는 기본적으로 의미가 없습니다. 사용 가능한 샘플 크기는 여기서 매개 변수 세트의 성능을 구별 할 수 없습니다.

그러나 적용 관점에서, 결론은 4 가지 매개 변수 세트 중 어느 것이 든 중요하지 않다는 것입니다. 이는 나쁜 소식이 아닙니다. 다음은 조정 된 모델에 대한 적절한 내포 검증의 이점을 제공합니다. 모델이 최적의 모델이라고 주장 할 수는 없지만 접근 방식 2를 사용하여 전체 데이터를 기반으로 구축 한 모델이 가지고 있다고 주장 할 수는 있습니다. 약 97 % 정확도 (150 개의 테스트 사례 중 145 개에 대한 95 % 신뢰 구간 : 92-99 %)

접근법 1도 그다지 멀지 않은 점에 유의하십시오-아래를 참조하십시오 : 최적화로 인해 넥타이 때문에 상대적으로 명확한 "우승자"를 실수로 놓쳤습니다 (실제로 샘플 크기 문제의 또 다른 매우 심각한 증상입니다).

C = 1이 여기에서 좋은 선택이 될 것임을 "볼"정도로 SVM에 충분히 깊이 익숙하지는 않지만 더 제한적인 선형 커널을 사용합니다. 또한 최적화 를 수행 한 것처럼 모든 매개 변수 세트가 실질적으로 동일한 성능을 제공한다는 사실을 알고 있더라도 당첨 매개 변수 세트를 선택하는 데 아무런 문제가 없습니다.

그러나 미래에는 경험이 기대할 수있는 성능에 대한 대략적인 추측과 어떤 모델이 좋은 선택이 될지에 대해 고려하십시오. 그런 다음 수동으로 고정 된 하이퍼 파라미터를 사용하여 해당 모델을 빌드하고 성능에 대한 신뢰 구간을 계산하십시오. 이를 사용하여 최적화 시도가 합리적인지 여부를 결정하십시오. (독립적 인 표본 크기가 큰 현장에있는 경우 상황이 훨씬 나아 보인다면 10 개의 독립 사례를 얻는 것이 쉽지 않은 데이터를 주로 사용하고 있다고 덧붙일 수 있습니다.)

긴 버전 :

예를 들어 iris데이터 세트 에 대한 결과 입니다. iris150 개의 경우, 2 x 2 매개 변수의 그리드 (2 개의 커널, 2 개의 페널티에 대한 페널티 C) 를 갖는 SVM 이 고려됩니다.

내부 루프는 129 (2x) 및 132 (6x)로 분할됩니다. "최고"파라미터 세트는 C로 둘 = 1 단 내부 테스트의 정확도는 선형 또는 RBF 커널 간의 미정 모두 98.5 % 관측 정밀도 - (94) 내에서 (항상 잃어버린 C = 10을 포함). 분할 중 하나에서 가장 큰 차이는 r = 1의 C = 1 대 10의 rbf에 대한 3 대 8 오류입니다.

이것이 중요한 차이점은 없습니다. CV에서 개별 사례에 대한 예측을 추출하는 방법을 모르지만 3 오류가 공유되고 C = 10 모델이 5 오류를 추가로 가정한다고 가정합니다.

> table (rbf1, rbf10)
         rbf10
rbf1      correct wrong
  correct     124     5
  wrong         0     3

> mcnemar.exact(rbf1, rbf10)

    Exact McNemar test (with central confidence intervals)

data:  rbf1 and rbf10
b = 5, c = 0, p-value = 0.0625
alternative hypothesis: true odds ratio is not equal to 1

2 x 2 그리드에는 6 쌍의 비교가 있으므로 여러 비교도 수정해야합니다.


접근법 1

rbf가 선형 커널에서 "원"인 4 개의 외부 스플릿 중 3 개에서 실제로 동일한 추정 정확도를 가졌습니다.

그리드를 params = {'kernel':['linear', 'rbf'],'C':[1,10]} 수확량으로 변경

({'kernel': 'linear', 'C': 1}, 0.95238095238095233, 0.97674418604651159)
({'kernel': 'rbf', 'C': 1}, 0.95238095238095233, 0.98449612403100772)
({'kernel': 'linear', 'C': 1}, 1.0, 0.97727272727272729)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.96212121212121215)

접근법 2 :

여기에, clf최종 모델입니다. 를 사용하면 random_state = 2C = 1 인 rbf가 이깁니다.

In [310]: clf.grid_scores_
[...snip warning...]
Out[310]: 
[mean: 0.97333, std: 0.00897, params: {'kernel': 'linear', 'C': 1},
 mean: 0.98000, std: 0.02773, params: {'kernel': 'rbf', 'C': 1},
 mean: 0.96000, std: 0.03202, params: {'kernel': 'linear', 'C': 10},
 mean: 0.95333, std: 0.01791, params: {'kernel': 'rbf', 'C': 10}]

(5 회, 1 6 회에 1에 대해 발생 linearrbfC = 1순위 1에 연결되어 있습니다)


4
@cbeleites 감사합니다! 다른 스레드에서도 귀하의 답변을 읽었으며 귀하가 내 질문에 대답하기를 바랍니다. 귀하의 답변은 매우 깊이 있지만 내 질문에 실제로 초점을 둔 것은 중첩 된 CV의 결과를 분석하는 방법입니다. "네스트 CV를 수행 한 후 수행 할 작업"에 대해서는 여전히 불분명합니다. 내가 작성한 노트 (내 게시물 끝 근처)를 살펴보고 평신도의 용어로 중첩 된 CV에서 두 개의 서로 다른 하이퍼 매개 변수 세트가 최적으로 식별되었으므로 어떻게 해야하는지 설명 할 수 있습니까? 매우 짧은 공책입니다. 약속합니다!
심한 호흡

@HeavyBreathing 나는 대답을 읽었으며 여전히 '네스트 CV를 수행 한 후해야 할 일'에 대해 명확하지 않습니다. 분명히 알아 냈습니까?
stackunderflow

0

귀하의 질문과 답변을 2 번 (3 개월 전 1 회) 읽었습니다. 관심이 있고 데이터에 대한 교차 유효성 검사를 수행하는 절대적인 적절한 방법을 찾고 싶습니다. 많은 생각과 독서를 한 후에, 나는 구멍을 발견하고 여기에 내 해결책이있는 것 같습니다.

혼란을 설명하기 위해 중첩 교차 검증 방법을 사용하여 모델 선택을 단계별로 살펴 보겠습니다.

  1. K-Fold를 사용하여 외부 CV 루프를 만듭니다. 이것은 각각의 내부 CV 루프를 "이득"한 하이퍼 파라미터의 성능을 추정하는 데 사용됩니다.
  2. GridSearchCV를 사용하여 각 내부 루프에서 GSCV는 가능한 모든 매개 변수 공간 조합을 거쳐 최상의 매개 변수 집합을 생성하는 내부 CV 루프를 만듭니다. (참고 : 여기에서는 가정합니다 : 내부 루프에 대한 데이터 = 외부 루프에 대한 훈련 데이터. 당신은 물어볼 수 있습니다 : 왜? 대답 : https : //.com/questions/42228735/scikit-learn-gridsearchcv-with-multiple-repetitions/ 42230764 # 42230764 는 Vivek Kumar 4 단계에서 답변 섹션을 읽습니다.
  3. GSCV가 내부 루프에서 "최상의 매개 변수"를 찾은 후 (내부 승자라고 함) 성능 추정을 위해 외부 루프의 테스트 세트로 테스트합니다 (outer_fold_score1이라고 함).
  4. 그런 다음 외부 루프는 테스트 세트로 다음 폴드로 업데이트되고 나머지는 트레이닝 세트로 업데이트됩니다 (외부 루프에서 "내부 우승자"를 평가하기 위해) "내부 우승자"는 새로운 테스트 세트 (outer_fold_score2)로 다시 테스트됩니다. 그런 다음 루프가 완료 될 때까지 다시 외부 루프가 다음 접기로 업데이트됩니다. 각 폴드 (outer_fold_score 1,2 ..)의 점수는 평균적으로 외부 루프 (outer_score)에 대한 "내부 승자"의 점수를 얻습니다.
  5. 그런 다음 외부 루프는 테스트 세트로 다음 폴드로 업데이트되고 나머지는 트레이닝 세트로 업데이트됩니다 (다음 "내부 우승자"찾기 및 1-4 반복) (1을 반복하면 새로운 K-를 만들지 않습니다. 매번 동일한 외부 Kfold를 사용합니다 . ) 1 ~ 4 사이클마다, outer_score 와 함께 "최고의 매개 변수"(또는 "내부 승자")를 얻습니다. 승자

추리:

  • 기본적으로 귀하의 질문은 외부 루프에 대한 많은 "우승 매개 변수"가 있다는 것입니다. 문제는 "외부 승자"를 평가하고 찾기 위해 외부 루프를 완료하지 않았기 때문입니다. 네 번째 단계는 외부 루프에서 1 배로 "내부 승자"만 평가하지만, "루프"하지는 않았습니다. 따라서 나는 그것을 네 번째 단계로 대체해야합니다-외부 루프에서 평가 단계를 "루프"하고 외부 점수를 얻습니다 (평균화)
  • 다섯 번째 단계는 외부 루프에서 "루핑"작업을 수행했지만 다른 "내부 승자"를 구축하기위한 것입니다. 외부 루프에서이 "내부 승자"의 "평가"를 반복하지 않았습니다.

이것이 실제로 질문에 대답합니까?
Michael R. Chernick 2016 년

0

중첩 된 교차 검증을 사용 하여 알고리즘 의 하이퍼 매개 변수를 선택 하지 않습니다 .이 방법은 모델 작성 프로 시저 의 일반화 오류를 추정하는 데 사용됩니다 . 모델 구축 절차에 따라 적용한 모든 단계를 현장에서 사용할 최종 모델에 도달하려고합니다. 데이터에 적용 할 사전 처리, 사용할 기능 및 사용할 하이퍼 매개 변수를 결정하기 위해 적용한 규칙
으로 모델 구축 절차를 구성 할 수 있습니다 . 이것을 특정 데이터 세트 를 입력으로 수신 하는 일종의 "메타 알고리즘"으로 생각하십시오. 전처리 변환, 기능 및 최종적으로 하이퍼 파라미터 값 세트.

엑스,와이
엑스엑스와이

엑스',와이'엑스,와이

사용할 기능을 선택하기 위해 모든 데이터 . 따라서 2 단계에서 교차 유효성 검사를 수행하더라도 기능은 이미 교차 유효성 검사 실행마다 테스트 폴더에 존재하는 일부 정보를보고 기억합니다. 결과는 테스트 오류에 대해 지나치게 낙관적 인 추정치이며 기능 선택 바이어스 라고 합니다 . 이를 추정에 설명하기 위해 2 단계의 교차 검증 루프 안에 기능 선택 단계를 배치해야합니다
. 루프 내부의 기능 선택 단계에서 교차 검증에서 발견 된 가장 좋은 오류가 일반화 오류의 공정한 추정치입니까?
이론적으로 대답은 여전히 ​​아니다문제는 처분 할 때 특정 데이터 세트 에 대한 교차 검증 오류를 최소화하기 위해 하이퍼 매개 변수를 선택 했기 때문에 특정 의미에서 하이퍼 매개 변수를 데이터에 과도하게 맞출 위험이 있음을 의미합니다. 모델 선택 바이어스 라고 합니다 . 그러나 이것이 실제로 관심사인가? 특정 응용 프로그램에 따라 다릅니다. 데이터 집합이 적고 튜닝 할 하이퍼 매개 변수 수가 상대적으로 많을 때 훈련에 과적 합하여 더 심해질 있습니다. 일반화 오류를 추정 할 때이를 설명하기 위해 설명 된대로 중첩 교차 검증을 적용하면 일반화 오류의 정확한 추정치가 제공됩니다.
마지막으로 중첩 된 교차 검증으로 "모델 구축 절차"일반화 오류를 공정하게 추정 한 후 마지막 질문에 대답하기 위해 전체 세트에 프로 시저 (1 + 2 단계)를 적용하여 고정 세트가있는 모델을 얻습니다. 이 매개 변수 값을 설정하고 하이퍼 매개 변수 값을 설정하지만 보이지 않는 데이터에 대해이 모델이 가질 것으로 예상되는 오류는 중첩 교차 검증 추정치 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.