다시 오신 것을 환영합니다! 우리는 이제 이 강의의 더 흥미로운 부분에 도달했습니다. 이 비디오에서는 부트스트랩 방법을 사용한 경험적 신뢰 구간에 초점을 맞춥니다. 빠른 요약으로 우리는 이전에 배깅 방법에 대해 이야기할 때 부트스트랩 방법에 대해 논의했습니다. 배깅에서는 훈련 세트에서 부트스트랩 샘플을 추출했습니다. 그런데 왜 이것이 '부트스트랩' 방식이라고 불리는지 궁금한 적이 있습니까?
부트스트랩(bootstrap)이라는 용어는 '부트스트랩으로 자신을 끌어올리다'라는 말에서 유래했는데, 이는 불가능한 일을 비유적으로 표현한 것입니다. 부트스트랩 방법은 단일 샘플에서 샘플링 분포를 추정하는 것과 관련되므로 실제로 어려운 기술입니다. 그래서 어떻게 보면 우리는 은유적으로 이 어려운 작업을 시도함으로써 부트스트랩으로 스스로를 끌어올리려고 합니다.
시간이 지남에 따라 '부트스트랩'의 의미는 엄격하고 독립적인 노력을 통해 자신을 향상시키는 개념을 포함하도록 확장되었습니다. 그러나 부트스트랩 방법의 맥락에서 우리는 '자신의 부트스트랩으로 자신을 끌어올리는 것'과 관련된 정치적 의미가 아니라 기술 자체에만 초점을 맞추고 있습니다.
이제 부트스트랩 방법과 이를 통해 샘플링 분포와 성능 추정치의 불확실성을 추정할 수 있는 방법을 살펴보겠습니다. 1979년 Bradley Efron이 처음 도입한 부트스트랩 방법은 단일 데이터 세트에만 액세스할 수 있을 때 샘플링 분포를 추정하는 데 사용되는 리샘플링 기술입니다.
개념을 이해하기 위해 데이터 세트가 하나뿐이고 이를 사용하여 다양한 샘플 통계를 추정한다고 가정합니다. 이러한 통계는 표본 평균, 표준 편차, R-제곱 또는 상관 관계와 같은 관심 대상일 수 있습니다. 부트스트랩 방법을 사용하면 모집단에서 샘플을 추출하는 프로세스를 시뮬레이션하여 원래 데이터 세트에서 반복적으로 샘플링하여 새 데이터 세트를 생성할 수 있습니다. 교체 없이 샘플링하는 반복 홀드아웃 방법과 달리 샘플링은 교체와 함께 수행된다는 점에 유의하는 것이 중요합니다.
이러한 부트스트랩 표본을 그리고 표본 평균과 같은 원하는 표본 통계를 계산하면 표본 평균의 분포가 정규 분포를 따른다는 것을 관찰할 수 있습니다. 평균의 표준 오차로 알려진 이 분포의 표준 편차는 표본 표준 편차를 표본 크기의 제곱근으로 나눈 값에서 추정할 수 있습니다.
부트스트랩 방법을 사용하면 표준 편차를 추정하고 이를 사용하여 성능 추정과 관련된 불확실성을 결정함으로써 신뢰 구간을 구성할 수 있습니다. 신뢰구간은 실제 모집단 모수에 대한 타당한 값의 범위를 제공합니다. 부트스트랩 방법의 경우 표준편차를 경험적으로 계산하여 신뢰구간 계산에 활용한다.
이제 부트스트랩 절차와 관련된 단계를 이해하겠습니다. 먼저 원본 데이터 세트에서 대체하여 샘플을 그립니다. 다음으로 이 부트스트랩 샘플을 사용하여 원하는 샘플 통계를 계산합니다. 샘플 통계의 분포를 얻기 위해 이 두 단계를 여러 번 반복하며 일반적으로 약 200회 이상을 권장합니다. 이 분포의 표준 편차는 표본 통계의 표준 오차 추정치 역할을 합니다. 마지막으로 표준 오차를 사용하여 신뢰 구간을 계산할 수 있으며 이는 성능 추정치에 대한 불확실성 측정을 제공합니다.
부트스트랩 방법을 사용하여 분류기의 성능을 평가할 때 접근 방식을 약간 수정할 수 있습니다. 크기 n의 데이터 세트를 고려하십시오. 이 경우 p 부트스트랩 라운드를 수행하며 각 라운드에서 원본 데이터 세트에서 부트스트랩 샘플을 그립니다. 그런 다음 각 부트스트랩 샘플에 모델을 맞추고 부트스트랩 샘플에 포함되지 않은 샘플인 out-of-bag 샘플에 대한 정확도를 계산합니다. 모든 부트스트랩 라운드에 대한 정확도를 평균화하여 부트스트랩 정확도를 얻습니다. 이 접근 방식은 교육에 사용되는 샘플이 아닌 보이지 않는 데이터에 대해 모델을 평가하여 과적합 문제를 해결합니다. 또한 부트스트랩 정확도는 모델의 성능 가변성을 측정합니다.
부트스트랩 방법을 사용하여 분류기의 성능을 평가하는 단계를 요약하면 다음과 같습니다.
원본 데이터 세트에서 크기 n(대체 포함)의 부트스트랩 샘플을 임의로 선택합니다.
부트스트랩 샘플에서 분류기를 훈련합니다.
가방 외부 샘플(부트스트랩 샘플에 포함되지 않은 샘플)에서 훈련된 분류기를 평가하고 정확도를 계산합니다.
다수의 부트스트랩 라운드(p회)에 대해 1-3단계를 반복합니다.
모든 부트스트랩 라운드에서 평균 정확도를 계산하여 부트스트랩 정확도를 얻습니다.
부트스트랩 정확도는 본 적이 없는 데이터에 대한 분류기 성능의 추정치 역할을 할 수 있으며 성능 추정치와 관련된 불확실성의 척도를 제공합니다. 또한 분류기의 안정성과 견고성을 평가하는 데 도움이 될 수 있습니다.
부트스트랩 방법을 활용하여 모델의 성능에 대한 귀중한 통찰력을 얻고 성능 추정과 관련된 불확실성을 추정할 수 있습니다. 이 기술은 데이터가 제한되어 있고 사용 가능한 데이터 세트를 최대한 활용하려는 경우에 특히 유용합니다. 부트스트랩 방법을 사용하면 샘플링 분포를 근사화하고 신뢰 구간을 구성하며 분류기의 성능을 효과적으로 평가할 수 있습니다.
결론적으로 부트스트랩 방법은 단일 데이터 세트를 사용하여 샘플링 분포를 추정하고 성능 추정의 불확실성을 평가할 수 있는 강력한 리샘플링 기술입니다. 다양한 통계 문제를 해결하기 위한 실용적인 접근 방식을 제공하며 기계 학습, 통계 및 데이터 분석을 포함한 광범위한 분야에서 응용 프로그램을 찾았습니다. 부트스트랩 방법을 이해하고 구현함으로써 정보에 입각한 결정을 내리고 제한된 데이터에서 신뢰할 수 있는 결론을 도출하는 능력을 향상시킬 수 있습니다.
이 비디오에서는 이전 비디오에서 논의된 주제를 더 깊이 파고들 것입니다. 이전 비디오에서는 경험적 신뢰 구간을 구성하는 데 사용되는 부트스트랩 방법, 특히 가방 외부 부트스트랩을 다루었습니다. 이 비디오에서는 0.632 부트스트랩과 0.632+ 부트스트랩이라는 두 가지 고급 부트스트래핑 기술을 살펴봅니다. 이러한 기술은 관련이 있으며 그 기원은 이 비디오에서 자세히 설명합니다.
부트스트랩 절차를 간략하게 요약하기 위해 데이터 세트로 시작하여 대체 샘플링을 통해 부트스트랩 샘플을 생성합니다. 각 부트스트랩 샘플에 대해 모델을 피팅하고 외부 샘플에 대한 성능을 평가합니다. 이전 비디오에서는 객체 지향 접근 방식을 사용하여 Python에서 이 절차를 구현하는 방법도 시연했습니다.
현재 비디오에서 발표자는 프로세스를 단순화하는 코드 구현을 소개합니다. 그들은 부트스트랩 라운드 수와 랜덤 시드를 입력으로 사용하는 "BootstrapOutOfBag"라는 클래스를 만들었습니다. 이 클래스는 데이터 세트를 교육 및 테스트 하위 집합으로 나누는 "분할"이라는 메서드를 제공합니다. 교육 하위 집합은 부트스트랩 샘플에 해당하고 테스트 하위 집합은 외부 샘플을 나타냅니다. 발표자는 이러한 분할을 반복하여 부트스트랩 절차를 수행하고 모델의 성능을 평가하는 방법을 보여줍니다.
그런 다음 발표자는 "bootstrap_0.632_score"라는 또 다른 구현을 소개합니다. 이 구현을 통해 사용자는 가방 외부 또는 부트스트랩 점수를 편리하게 계산할 수 있습니다. 분류기, 훈련 세트, 분할 수 및 임의 시드를 제공함으로써 사용자는 백분위수 방법을 사용하여 평균 정확도를 계산하고 신뢰 구간을 얻을 수 있습니다.
다음으로 비디오는 비관적 편향으로 알려진 out-of-bag 부트스트랩 방법의 단점을 다룹니다. Bradley Efron은 이 편향을 해결하는 방법으로 0.632 추정치를 제안했습니다. 비관적 편향은 부트스트랩 샘플에 원래 데이터 세트에 비해 고유한 데이터 포인트가 적기 때문에 발생합니다. 실제로 부트스트랩 샘플의 데이터 포인트 중 63.2%만이 고유합니다. 발표자는 이 그림 뒤에 있는 확률 계산을 설명하고 다양한 샘플 크기에 대해 어떻게 작동하는지 설명하기 위해 시각화를 제공합니다.
비관적 편견을 극복하기 위해 비디오는 0.632 부트스트랩 방법을 소개합니다. 이 방법은 각 라운드에서 out-of-bag 샘플과 부트스트랩 샘플의 정확도를 결합합니다. 각 라운드의 정확도는 아웃오브백 정확도와 재대체 정확도라는 두 용어의 합으로 계산됩니다. Out-of-bag 정확도는 부트스트랩 샘플에 포함되지 않은 샘플에 대한 성능을 나타내는 반면, 재대입 정확도는 모델을 적합시키기 위해 사용된 동일한 데이터에 대한 성능을 측정합니다.
이 두 항을 결합하여 0.632 부트스트랩 방법은 모델 성능에 대한 편향이 적은 추정치를 제공하는 것을 목표로 합니다. 이 방법은 out-of-bag 정확도를 통합하여 재대입 정확도의 지나치게 낙관적인 특성을 해결합니다.
결론적으로 이 비디오는 고급 부트스트래핑 기술인 0.632 부트스트랩 및 0.632+ 부트스트랩을 도입하여 이전 비디오에서 설명한 개념을 기반으로 합니다. 이러한 방법은 가방 외부 및 부트스트랩 샘플 정확도를 모두 고려하여 가방 외부 부트스트랩의 비관적 편향을 완화하는 것을 목표로 합니다. 비디오는 이러한 기술의 이해와 적용을 용이하게 하는 코드 구현 및 설명을 제공합니다.
여러분, 안녕하세요! 지난 주에 우리는 모델 평가의 중요한 주제에 대해 깊이 파고들었습니다. 여기에서 모델 성능 평가 및 신뢰 구간 구성과 같은 다양한 측면에 대해 논의했습니다. 그러나 모델 평가에 대한 탐색은 아직 완료되지 않았습니다. 다루어야 할 다른 필수 개념이 있기 때문입니다. 실제로는 특정 모델을 평가하는 것만이 아닙니다. 또한 평가할 수 있는 좋은 모델을 먼저 찾아야 합니다.
이 강의에서는 하이퍼파라미터를 조정하고 서로 다른 하이퍼파라미터 설정으로 인한 모델을 비교하는 방법을 포함하는 교차 검증 기술에 중점을 둘 것입니다. 이 프로세스를 모델 선택이라고 합니다. 오늘 우리의 주요 강조점은 교차 검증입니다.
이번 주에 다룰 주제가 많지만 걱정하지 마세요. 각 주제는 비교적 짧습니다. 이번 강의와 다음 강의에서 논의할 내용에 대한 개요를 제공하겠습니다.
모델 평가를 위한 교차 검증 기법: 모델 성능을 평가하기 위한 K-겹 교차 검증 및 기타 관련 기법을 살펴보겠습니다. Python과 scikit-learn을 사용하여 코드 예제를 시연합니다.
모델 선택을 위한 교차 검증: 하이퍼파라미터 튜닝을 포함하여 최상의 모델을 선택하기 위해 교차 검증을 사용하는 방법에 대해 논의합니다. scikit-learn에서 그리드 검색과 무작위 검색을 사용하여 모델 선택을 수행하는 방법을 보여 드리겠습니다.
절약의 법칙: 우리는 K-겹 교차 검증의 아이디어와 모델을 단순하게 유지하는 원칙을 결합한 단일 표준 오류 방법의 개념을 탐구할 것입니다. 또한 이전 강의에서 설명한 반복 홀드아웃 방법과 유사한 하나의 표준 오류 방법과 반복 K-겹 교차 검증에 대한 코드 예제를 제공합니다.
교차 검증을 살펴보기 전에 하이퍼파라미터를 빠르게 다시 소개하고 모델 파라미터와의 차이점을 명확히 합시다. 그런 다음 모델 평가 및 기타 관련 기술을 위한 K-겹 교차 검증에 대해 논의할 것입니다. Python과 scikit-learn을 사용하여 이러한 기술을 실제로 구현하는 방법을 살펴보겠습니다. 마지막으로 모델 평가와 모델 선택의 차이점을 강조하면서 모델 선택을 위한 교차 검증으로 논의를 확장할 것입니다.
또한 광범위한 연구와 독서를 바탕으로 특정 작업과 문제에 따라 다양한 기술을 분류하여 개요를 준비했습니다. 이 분류는 서로 다른 기술을 탐색하고 각 기술을 언제 사용해야 하는지 이해하는 데 도움이 됩니다. 개요에 제공된 권장 사항은 향후 강의에서 다룰 추가 논의의 대상이라는 점에 유의하는 것이 중요합니다.
강의 개요를 요약한 것입니다. 이제 하이퍼파라미터를 다시 소개하고 교차 검증에 대해 자세히 살펴보겠습니다.
교차 검증에 대해 알아보기 전에 잠시 하이퍼파라미터에 대해 논의해 봅시다. 이미 개념에 익숙할 수 있지만 그렇지 않은 경우 유용한 요약이 될 것입니다. 하이퍼 매개변수는 모델이나 알고리즘의 조정 매개변수 또는 설정으로 생각할 수 있습니다. 모델의 성능을 최적화하기 위해 수동으로 조정하는 옵션입니다. 이를 설명하기 위해 비모수적 모델인 K-최근접 이웃 분류기를 살펴보겠습니다.
비모수 모델은 매개변수 모델과 달리 미리 정의된 구조가 없습니다. 대신 모델의 구조를 정의하기 위해 훈련 세트에 의존합니다. 예를 들어, K-최근접 이웃에서 모델의 매개변수는 기본적으로 훈련 예제 자체입니다. 따라서 예를 추가하거나 제거하는 등 훈련 세트를 변경하면 모델 구조에 상당한 영향을 미칠 수 있습니다. 비모수적 모델의 또 다른 예는 트리의 분할 수가 미리 정의된 구조가 아니라 훈련 예제에 따라 결정되는 의사결정 트리입니다.
이제 K-최근접 이웃 알고리즘의 하이퍼파라미터에 대해 구체적으로 살펴보겠습니다. 이러한 하이퍼파라미터에는 이웃 수(K) 및 사용된 거리 메트릭(예: 맨해튼 또는 유클리드 거리)과 같은 옵션이 포함됩니다. 이러한 옵션은 모델을 실행하기 전에 설정해야 하며 데이터에서 학습되지 않습니다. 이 과정에서는 하이퍼파라미터 조정을 지원하는 그리드 검색 또는 무작위 검색과 같은 기술을 살펴봅니다. 그러나 하이퍼파라미터에 대해 다른 값을 시도하는 것은 데이터에 맞추는 과정이 아니라 최상의 설정을 찾기 위한 반복 실험이라는 점에 유의해야 합니다.
더 많은 예를 제공하기 위해 scikit-learn의 하이퍼 매개변수 정의를 참조해 보겠습니다. 결정 트리 분류기를 초기화할 때 하이퍼파라미터에는 불순도 측정(예: 지니 또는 엔트로피), 사전 가지치기를 위한 트리의 깊이, 잎당 최소 샘플 수 등이 포함될 수 있습니다. 이들은 모두 하이퍼파라미터로 간주됩니다.
특히 모든 옵션이 하이퍼파라미터는 아니지만 모든 하이퍼파라미터는 옵션입니다. 예를 들어, 모델에서 임의성을 결정하는 임의 상태 또는 임의 시드는 하이퍼 매개변수가 아닙니다. 더 나은 성능을 위해 무작위 시드를 변경하는 것은 불공평한 것으로 간주되므로 모델을 개선하기 위해 조작해서는 안 됩니다.
이제 모델 매개변수와 하이퍼 매개변수를 대조해 보겠습니다. 예를 들어, 선형 모델로 볼 수 있고 고전적인 기계 학습과 딥 러닝 모두에 대한 소개 역할을 하는 로지스틱 회귀를 간략하게 살펴보겠습니다. 로지스틱 회귀에서 입력은 바이어스를 설명하기 위한 절편 항을 포함하는 기능입니다. 특징 수에 따라 결정되는 모델 가중치는 모델의 구조를 형성합니다. 처음에 이러한 가중치는 0 또는 작은 임의 값으로 설정할 수 있으며, 그런 다음 손실 함수(예: 선형 회귀의 평균 제곱 오차)를 최소화하기 위해 반복적으로 업데이트됩니다.
로지스틱 회귀에서는 일반적으로 로지스틱 함수 또는 시그모이드 함수인 비선형 함수가 순 입력(입력의 가중 합계)에 적용되어 0과 1 사이의 범위로 스쿼시됩니다. 이 출력은 이진 분류에서 클래스 소속 확률로 해석될 수 있습니다. 가중치는 예측 클래스 소속 확률을 실제 클래스 레이블(0 또는 1)과 비교하여 계산되는 손실을 최소화하도록 조정됩니다. 로지스틱 회귀는 또한 L1 또는 L2 정규화와 같은 정규화 기술을 사용하여 과적합을 방지하기 위해 가중치 크기에 따라 페널티 항을 추가합니다. 정규화 강도(람다)는 사용자가 설정해야 하는 하이퍼파라미터입니다.
요약하면 로지스틱 회귀의 가중치(W)와 같은 모델 매개변수는 훈련 데이터에서 학습되는 반면 정규화 강도(lambda)와 같은 하이퍼 매개변수는 사용자가 결정하며 데이터에서 학습되지 않습니다. 모델 매개변수는 성능을 최적화하기 위해 학습 프로세스 중에 업데이트되는 모델의 내부 변수인 반면 하이퍼 매개변수는 모델의 동작을 제어하고 학습 전에 설정해야 하는 외부 설정입니다.
하이퍼파라미터의 최적 값을 찾는 프로세스를 하이퍼파라미터 튜닝이라고 합니다. 모델의 성능에 큰 영향을 미칠 수 있으므로 기계 학습에서 중요한 단계입니다. 그러나 최상의 하이퍼파라미터 값을 찾는 것은 간단한 작업이 아니며 다양한 조합을 실험하고 평가해야 하는 경우가 많습니다.
하이퍼파라미터 튜닝에 대한 일반적인 접근 방식 중 하나는 그리드 검색으로, 각 하이퍼파라미터에 대해 미리 정의된 값 집합이 지정되고 가능한 모든 조합이 교차 검증을 사용하여 평가됩니다. 교차 유효성 검사는 데이터를 여러 하위 집합(폴드)으로 분할하고 일부 폴드에서 모델을 교육하고 나머지 폴드에서 평가하여 모델의 성능을 평가하는 데 사용되는 기술입니다. 이는 본 적이 없는 데이터에 대한 모델의 성능을 추정하고 과적합의 위험을 줄이는 데 도움이 됩니다.
또 다른 접근 방식은 무작위 검색으로, 하이퍼 매개변수 값의 무작위 조합이 지정된 분포에서 샘플링됩니다. 이는 가능한 모든 조합을 철저하게 평가하지 않고도 더 넓은 범위의 값을 탐색할 수 있으므로 하이퍼 매개변수의 검색 공간이 클 때 유용할 수 있습니다.
그리드 검색 및 무작위 검색 외에도 확률 모델을 사용하여 검색 프로세스를 안내하는 베이지안 최적화, 자연 선택 프로세스를 모방하여 최적의 집합을 진화시키는 유전 알고리즘과 같은 하이퍼 매개변수 튜닝을 위한 고급 기술이 있습니다. 하이퍼파라미터.
특히 복잡한 모델이나 대규모 데이터 세트의 경우 하이퍼파라미터 튜닝이 계산 비용이 많이 들 수 있다는 점은 주목할 가치가 있습니다. 따라서 사용 가능한 데이터를 가장 효율적으로 사용하기 위해 교차 유효성 검사와 같은 기술과 함께 수행되는 경우가 많습니다.
하이퍼파라미터는 훈련 전에 설정해야 하는 모델의 설정 또는 옵션이며, 모델 매개변수는 훈련 중에 데이터에서 학습되는 내부 변수입니다. 하이퍼파라미터 튜닝은 이러한 설정에 대한 최상의 값을 찾는 프로세스이며 모델 성능을 최적화하는 데 중요합니다. 하이퍼파라미터 튜닝에는 그리드 검색, 무작위 검색, 베이지안 최적화 및 유전자 알고리즘과 같은 기술이 일반적으로 사용됩니다.
이 비디오에서는 모델 평가를 위한 교차 검증 주제에 대해 자세히 설명합니다. 교차 검증은 일반적으로 하이퍼파라미터 튜닝 및 모델 선택과 함께 사용됩니다. 그러나 이해를 돕기 위해 모델 선택에 대한 적용을 논의하기 전에 먼저 모델 평가의 맥락에서 k-겹 교차 검증이 어떻게 작동하는지 살펴보겠습니다.
시작하려면 모델 평가를 위한 k-폴드 교차 검증에는 데이터 세트를 검증 폴드로 분할하고 훈련을 위한 나머지 데이터 세그먼트가 포함됩니다. 일반적인 예에서 5중 교차 검증을 고려해 보겠습니다. 데이터 세트는 검증 접기(파란색으로 표시됨)와 4개의 훈련 접기(다른 색상으로 표시됨)로 나뉩니다. 모델은 훈련 접기에서 훈련되고 검증 접기에서 평가되어 성능 메트릭이 생성됩니다. 하나의 유효성 검사 세트만 사용하는 홀드아웃 방법과 달리 k-겹 교차 유효성 검사에서는 유효성 검사 접기가 데이터의 다른 세그먼트를 통해 회전됩니다. 이렇게 하면 모든 데이터 포인트가 평가에 활용됩니다. 5겹 교차 검증의 경우 5개의 별개의 검증 접기가 있으며 5번의 반복이 수행됩니다. 반복할 때마다 성능 측정값이 생성됩니다. 전체 성능을 보고할 때 일반적인 접근 방식은 모든 반복의 성능 값을 평균화하는 것입니다.
이 논의에서 하이퍼파라미터 튜닝을 고려하지 않고 모델 평가를 위한 k-겹 교차 검증에 초점을 맞추고 있다는 점에 유의하는 것이 중요합니다. 이 시나리오에서 교차 검증을 통해 얻은 성능 추정치는 모델의 일반화 성능에 대한 추정치로 간주할 수 있습니다. 고정된 하이퍼파라미터를 사용하여 전체 데이터 세트에 대해 새 모델을 교육함으로써 실제 사용을 위한 최종 모델을 얻을 수 있습니다. 독립적인 테스트 세트를 사용하여 모델의 성능을 추가로 평가할 수 있지만 교차 검증 성능이 이미 신뢰할 수 있는 일반화 성능 추정치를 제공하기 때문에 하이퍼파라미터 튜닝이 관련되지 않은 경우 종종 불필요합니다.
이제 k-겹 교차 검증의 몇 가지 주요 속성을 살펴보겠습니다. 유효성 검사 접기는 겹치지 않습니다. 즉, 서로 다른 반복에서 유효성 검사 접기의 데이터 포인트 간에 겹치는 부분이 없습니다. 모든 데이터 포인트는 테스트에 활용되어 포괄적인 평가를 보장합니다. 일부 연구자는 유효성 검사 접기를 테스트 접기로 지칭할 수 있습니다. 이 용어는 서로 바꿔서 사용할 수 있기 때문입니다.
반면 훈련 주름은 중첩되어 서로 독립적이지 않습니다. 주어진 반복에서 훈련 데이터는 다른 반복의 훈련 데이터와 겹치는 샘플을 가질 수 있습니다. 이 특성으로 인해 모델의 성능 가변성을 이해하는 데 중요한 다양한 훈련 세트를 기반으로 분산을 추정하기가 어렵습니다.
또 다른 주목할 만한 측면은 k(접기 수) 값을 줄이면 성능 추정치가 더 비관적이라는 것입니다. 이는 각 접기에서 훈련에 사용할 수 있는 데이터 포인트가 적기 때문에 모델의 피팅 기능이 제한되기 때문입니다. 성과 비관론에 대한 이전 설명에서 논의한 바와 같이 보류된 데이터로 인해 성과 추정치는 더욱 비관적입니다.
k-겹 교차 검증의 두 가지 특별한 경우를 살펴보겠습니다. k가 2일 때 홀드아웃 방법과는 다른 이중 교차 검증이 있습니다. 2중 교차 검증에서 데이터 세트는 정확히 절반으로 분할되고 각각의 절반은 다른 반복에서 훈련에 사용됩니다. 대조적으로, 홀드아웃 방법은 임의의 분할 비율을 허용하고 반복 사이의 회전을 포함하지 않습니다. 그러나 k-겹 교차 검증의 각 라운드는 홀드아웃 방법의 특수한 경우로 간주할 수 있습니다. 여기서 데이터 세트는 정확히 두 부분으로 나뉩니다.
또 다른 특수한 경우는 k가 n일 때 LOOCV(leave-one-out cross-validation)가 발생하는 경우입니다. LOOCV에서 각 반복에는 유효성 검사 세트로 하나의 데이터 포인트를 남기고 나머지 n-1 데이터 포인트는 훈련에 사용됩니다. 이 접근 방식은 LOOCV라고도 하며 유효성 검사 세트는 하나의 데이터 포인트로만 구성됩니다.
Hawkins 등이 실시한 연구. (2003)은 LOOCV(leave-one-out cross-validation)를 포함한 다양한 모델 평가 방법의 성능을 조사한 결과 LOOCV가 다른 교차 검증 방법에 비해 분산이 큰 경향이 있음을 발견했습니다. 이 높은 분산은 LOOCV의 각 유효성 검사 접기가 하나의 데이터 포인트로만 구성되어 평가를 위한 샘플 크기가 제한된다는 사실에 기인할 수 있습니다. 결과적으로 LOOCV에서 얻은 성능 추정치는 각 반복에서 검증을 위해 선택한 특정 데이터 포인트에 매우 민감할 수 있습니다.
높은 분산에도 불구하고 LOOCV에는 몇 가지 장점이 있습니다. 각 반복에는 n-1 데이터 포인트에 대한 교육이 포함되므로(여기서 n은 데이터 포인트의 총 수) LOOCV는 모델 성능에 대한 편향되지 않은 추정치를 제공하는 경향이 있습니다. 또한 LOOCV는 교육에 사용 가능한 모든 데이터를 활용하므로 데이터 세트가 작거나 보다 정확한 성능 추정이 필요할 때 유용할 수 있습니다.
그러나 계산 복잡성으로 인해 LOOCV는 대규모 데이터 세트에 적합하지 않을 수 있습니다. 학습 프로세스를 n번 반복해야 하므로 상당한 계산 부담이 발생합니다. 이러한 경우 k의 적당한 값을 사용하는 k-겹 교차 검증이 종종 선호됩니다.
이제 모델 평가를 위한 k-겹 교차 검증을 살펴보았으므로 모델 선택에 적용하는 방법에 대해 간략하게 살펴보겠습니다. 모델 선택의 맥락에서 목표는 일반적으로 서로 다른 하이퍼파라미터 설정을 사용하여 일련의 후보 모델에서 최상의 모델을 식별하는 것입니다. 교차 검증을 사용하여 각 모델의 성능을 추정하고 선택 프로세스를 용이하게 할 수 있습니다.
일반적인 접근 방식은 각 모델에 대해 k-겹 교차 검증을 수행하고 모든 반복에서 평균 성능을 계산하고 결과를 비교하는 것입니다. 평균 성능이 가장 높은 모델이 최선의 선택으로 간주됩니다. 이 접근 방식은 데이터 가변성의 영향을 완화하는 데 도움이 되며 모델에 대한 보다 강력한 평가를 제공합니다.
요약하면 교차 검증은 모델 평가 및 선택을 위한 유용한 기술입니다. 데이터의 다른 세그먼트를 통해 유효성 검사 접기를 체계적으로 회전함으로써 포괄적인 평가가 가능하고 모델 성능의 추정치를 제공합니다. 모델 평가에만 사용하든 모델 선택과 함께 사용하든 교차 검증은 연구자와 실무자가 모델의 일반화 기능에 대해 정보에 입각한 결정을 내리는 데 도움이 됩니다.
이전 비디오에서는 기계 학습 모델을 평가하는 방법으로 k-겹 교차 검증에 대해 논의했습니다. 이 비디오에서는 scikit-learn 라이브러리를 사용하여 Python에서 k-겹 교차 검증을 구현하는 방법을 살펴봅니다. GitHub에 코드 노트북을 업로드했으며 여기에서 링크를 찾을 수 있습니다.
필요한 라이브러리를 로드하고 해당 버전을 확인하는 것으로 시작하겠습니다. 우리는 일반적으로 사용되는 라이브러리인 NumPy와 matplotlib를 가져올 것입니다. 다음으로 scikit-learn의 모델 선택 하위 모듈에서 k-폴드 클래스를 사용하여 k-폴드 교차 검증의 사용을 시연합니다.
재현성을 보장하기 위해 난수 생성기 개체를 사용하여 난수 시드를 설정합니다. 그런 다음 Class Zero의 레이블 5개와 Class One의 레이블 5개로 간단한 데이터 세트를 만듭니다. 또한 10개의 입력과 4개의 기능이 있는 임의의 데이터 세트를 생성합니다. 이것은 설명을 위한 임의의 데이터 세트일 뿐이며 iris 데이터 세트와 같이 원하는 모든 데이터 세트를 사용할 수 있습니다.
다음으로 cv(cross-validation의 줄임말)라는 k-fold 객체를 초기화합니다. 분할 수 n_splits를 5로 설정하여 5겹 교차 검증을 수행할 것임을 나타냅니다. split 메서드를 사용하여 이 k-fold 개체의 동작을 살펴보겠습니다. 이 메서드를 실행하면 각각 두 개의 배열을 포함하는 튜플로 구성된 5개의 결과를 얻습니다. 첫 번째 배열은 훈련 접기를 나타내고 두 번째 배열은 유효성 검사 접기를 나타냅니다.
이러한 배열 내의 숫자는 데이터 세트의 샘플 인덱스에 해당합니다. 예를 들어 첫 번째 접기의 훈련 세트에 해당하는 실제 레이블을 얻으려면 이 인덱스를 인덱스 배열로 사용하여 레이블을 선택할 수 있습니다. 마찬가지로 해당 기능을 선택할 수 있습니다. 이 경우에서 관찰한 것처럼 훈련 및 검증 접기의 레이블이 불균형할 수 있다는 점에 유의하는 것이 중요합니다.
이 문제를 해결하려면 k-겹 교차 검증을 수행하기 전에 데이터 세트를 섞는 것이 좋습니다. 초기화 중에 k-fold 개체 내에서 직접 데이터 세트를 섞음으로써 이를 달성할 수 있습니다. 무작위 상태를 설정하고 섞음으로써 훈련 및 검증 접기에서 더 나은 레이블 조합을 얻습니다.
또한 일반적으로 분할을 계층화하여 클래스 레이블의 비율이 각 폴드에서 일관되게 유지되도록 하는 것이 좋습니다. 일반 k-폴드 클래스 대신 계층화된 k-폴드 클래스를 사용하여 이를 달성할 수 있습니다. 계층화된 k-폴드를 사용하면 각 폴드의 레이블 비율이 원래 데이터 세트의 비율과 일치합니다.
k-fold 및 계층화된 k-fold 개체의 일반적인 동작에 대해 논의한 후 이를 실제로 적용하는 방법을 살펴보겠습니다. 의사 결정 트리 분류기와 홍채 데이터 세트를 예로 사용합니다. 먼저 층화 분할을 보장하는 train_test_split 메서드를 사용하여 홍채 데이터 세트를 85% 훈련 데이터와 15% 테스트 데이터로 분할합니다.
다음으로 Ron Kohavi의 실용적인 가이드에 대한 교차 유효성 검사에 대한 논문에서 권장하는 대로 k=10으로 층화된 k-폴드 객체를 초기화합니다. 그런 다음 분할 방법을 사용하여 교육 및 검증 인덱스를 반복하여 k-겹 교차 검증을 수행하는 수동 접근 방식을 사용합니다. 각 반복 내에서 훈련 접기를 사용하여 새로운 결정 트리 분류기를 적합하고 검증 접기의 레이블을 예측합니다. 각 반복에 대한 정확도를 계산하고 결과를 자리 표시자 변수에 저장합니다.
모든 폴드를 반복한 후 정확도의 합을 반복 횟수로 나누어 평균 k-폴드 교차 검증 정확도를 계산합니다. 마지막으로 보이지 않는 데이터에 대한 모델을 평가하기 위해 모든 훈련 데이터를 사용하여 새로운 결정 트리 분류기를 적합하고 테스트 세트에서 정확도를 계산합니다.
이 경우 95.3%의 k-겹 교차 검증 정확도와 95%의 테스트 세트 정확도를 얻었습니다. 이러한 결과는 우리 모델이 교차 검증 폴드와 보이지 않는 테스트 데이터 모두에서 잘 수행됨을 시사합니다.
그러나 접힌 부분을 수동으로 반복하고 모델을 피팅하는 것은 약간 번거로울 수 있습니다. 다행스럽게도 scikit-learn은 cross_val_score 함수를 사용하여 k-겹 교차 검증을 수행하는 보다 편리한 방법을 제공합니다. 이 함수는 모델, 데이터 세트 및 폴드 수를 입력으로 사용하고 자동으로 k-폴드 교차 검증을 수행하여 각 폴드에 대한 점수를 반환합니다.
이것이 실제로 어떻게 수행되는지 봅시다. 필요한 라이브러리를 가져오고 홍채 데이터 세트를 로드하는 것으로 시작합니다. 다음으로 의사 결정 트리 분류기의 인스턴스를 생성하고 k=10으로 계층화된 k-겹 개체를 초기화합니다.
그런 다음 cross_val_score 함수를 사용하여 분류자, 데이터 세트 및 k-fold 개체를 전달합니다. 이 함수는 자동으로 k-폴드 교차 검증을 수행하고 모델을 적합하며 각 폴드에 대한 점수를 계산합니다. 기본적으로 cross_val_score 함수는 정확도 메트릭을 사용하지만 원하는 경우 다른 메트릭을 지정할 수 있습니다.
마지막으로 각 접기에 대한 교차 유효성 검사 점수를 인쇄하고 평균 점수를 계산합니다. 이 경우 평균 교차 검증 정확도 95.3%를 얻었으며 이는 수동으로 얻은 정확도와 일치합니다.
cross_val_score를 사용하면 전체 프로세스를 자동으로 처리하므로 k-겹 교차 검증을 수행하는 보다 간결하고 효율적인 방법입니다. 또한 코드를 크게 수정하지 않고도 접기 수를 쉽게 변경하거나 다른 모델로 전환할 수 있습니다.
이전 두 동영상에서 모델 평가를 위한 k-겹 교차 검증에 대해 논의하고 몇 가지 코드 예제를 살펴보았습니다. 이제 모델 선택을 위한 k-겹 교차 검증에 초점을 맞출 것입니다. 모델 선택은 하이퍼파라미터를 조정하고 최고 성능의 하이퍼파라미터 설정을 선택할 수 있기 때문에 종종 k-겹 교차 검증의 일반적인 사용 사례입니다.
전체 프로세스는 다섯 단계로 요약할 수 있습니다. 그러나 슬라이드의 공간이 제한되어 있으므로 다음 슬라이드의 각 단계를 확대하여 자세한 내용을 제공하겠습니다. 5단계는 이전에 논의한 모델 선택을 위한 3중 홀드아웃 방법과 유사합니다.
1단계: 데이터를 교육 및 테스트 세트로 분할합니다. 이 단계는 이전과 동일하며 데이터 세트를 훈련용과 테스트용으로 두 부분으로 나눕니다. 지금은 훈련 세트에 초점을 맞출 것입니다.
2단계: k-폴드 교차 검증을 사용하여 다양한 하이퍼파라미터 설정으로 학습 알고리즘을 적용합니다. 결정 트리 알고리즘의 최대 깊이와 같은 각 하이퍼파라미터 설정은 k-겹 교차 검증을 사용하여 평가됩니다. 예를 들어 Ron Kohavi가 권장하는 대로 k=10인 k-겹 교차 검증을 사용할 수 있습니다. 이 단계에서는 각 하이퍼파라미터 설정에 대해 서로 다른 성능 추정치를 제공합니다.
3단계: 가장 성능이 좋은 모델을 선택합니다. k-폴드 교차 검증에서 얻은 성능 추정치를 기반으로 최상의 성능을 발휘하는 하이퍼파라미터 설정을 식별할 수 있습니다. 예를 들어 최대 깊이 5가 테스트된 값 중에서 가장 잘 수행된다는 것을 알 수 있습니다. 이 하이퍼파라미터 설정을 최고로 선택합니다.
4단계: 최상의 하이퍼파라미터 값을 가진 모델을 교육 데이터에 맞춥니다. 최상의 하이퍼파라미터 설정을 식별한 후 전체 훈련 데이터 세트와 선택한 하이퍼파라미터를 사용하여 모델을 재훈련합니다. 이를 통해 최상의 하이퍼파라미터 값을 가진 단일 모델을 확보할 수 있습니다.
5단계: 독립적인 테스트 세트에서 모델을 평가합니다. 모델의 일반화 성능을 추정하기 위해 학습 또는 하이퍼파라미터 선택 프로세스 중에 사용되지 않은 별도의 테스트 세트에서 모델을 평가합니다. 이는 모델 성능에 대한 편견 없는 평가를 제공합니다.
선택적으로 전체 데이터 세트에서 최상의 하이퍼파라미터 값으로 모델을 맞추는 추가 단계를 수행할 수 있습니다. 이 단계는 모델이 더 많은 데이터에 대해 훈련될 때 더 잘 수행될 수 있다는 가정을 기반으로 합니다.
선택 편향을 피하려면 독립적인 테스트 세트를 갖는 것이 중요합니다. 때로는 하이퍼파라미터 설정이 우연히 k-겹 교차 검증에서 잘 수행되어 지나치게 낙관적인 추정으로 이어질 수 있습니다. 독립적인 테스트 세트를 사용하면 모델 성능에 대한 보다 신뢰할 수 있는 평가를 얻을 수 있습니다.
이 절차는 모델 선택을 위한 k-겹 교차 검증을 요약합니다. 이제 모델 선택 또는 하이퍼파라미터 조정 단계에서 하이퍼파라미터를 선택하는 몇 가지 기술을 살펴보겠습니다.
일반적인 방법 중 하나는 널리 사용되는 그리드 검색입니다. 그리드 검색은 고려할 하이퍼파라미터 값 목록을 정의하는 철저한 검색 방법입니다. 예를 들어 k-최근접 이웃의 경우 3, 5, 6, 7, 8, 9와 같은 값 목록을 지정하여 k의 값을 조정할 수 있습니다. 그리드 검색은 각각에 대한 모델의 성능을 평가합니다. k-겹 교차 검증을 사용한 하이퍼파라미터 조합.
그리드 검색을 병렬로 수행할 수 있으므로 여러 하이퍼파라미터 조합을 동시에 평가할 수 있습니다. 그러나 모든 관련 하이퍼파라미터 값이 미리 정의된 그리드에 포함되지 않으면 적용 범위가 좋지 않을 수 있습니다. 이는 연속 하이퍼파라미터 또는 특정 값을 건너뛸 때 특히 문제가 됩니다.
적용 범위 문제를 해결하기 위해 무작위 검색은 분포에서 하이퍼파라미터 값을 샘플링하는 대체 접근 방식입니다. 고정 그리드를 지정하는 대신 균일, 정규, 지수, 베타 또는 이항 분포와 같은 분포를 정의하여 하이퍼파라미터 값을 샘플링할 수 있습니다. 무작위 검색은 하이퍼 매개변수 공간 탐색에 더 많은 유연성을 제공하며 잠재적으로 더 넓은 범위의 값을 포괄할 수 있습니다. 분포에서 샘플링하여 무작위 검색을 통해 하이퍼 매개변수 공간을 보다 효율적으로 탐색할 수 있습니다.
그리드 검색과 비교할 때 무작위 검색은 가능한 모든 조합을 평가하지 않기 때문에 계산적으로 더 효율적인 경우가 많습니다. 대신 하이퍼파라미터 값의 하위 집합을 무작위로 샘플링하고 k-겹 교차 검증을 사용하여 평가합니다. 반복 또는 샘플 수를 미리 지정할 수 있습니다.
무작위 검색의 장점은 특히 일부 하이퍼파라미터가 다른 하이퍼파라미터보다 덜 중요할 때 큰 하이퍼파라미터 공간을 효율적으로 검색할 수 있다는 것입니다. 또한 특정 그리드를 정의할 필요 없이 연속적이고 불연속적인 하이퍼파라미터를 처리할 수 있습니다.
그리드 검색과 무작위 검색 모두 장단점이 있습니다. 그리드 검색은 정의된 그리드 내의 모든 조합을 보장하지만 계산 비용이 많이 들고 대형 하이퍼파라미터 공간에는 적합하지 않을 수 있습니다. 반면에 무작위 검색은 더 효율적이지만 전체 범위를 보장하지는 않습니다.
실제로 그리드 검색과 무작위 검색 사이의 선택은 하이퍼 매개변수 공간의 크기, 사용 가능한 계산 리소스 및 당면한 특정 문제에 따라 달라집니다.
하이퍼파라미터 튜닝을 위한 또 다른 기술은 베이지안 최적화입니다. 베이지안 최적화는 하이퍼파라미터와 목적 함수(예: 모델 성능) 사이의 관계를 모델링하기 위해 확률 모델을 사용합니다. Gaussian Processes와 같은 대리 모델을 사용하여 목적 함수를 근사화하고 획득 함수를 사용하여 평가할 다음 하이퍼파라미터 값을 결정합니다.
베이지안 최적화는 대리 모델을 기반으로 하이퍼파라미터 값을 반복적으로 샘플링하고 평가된 성능을 기반으로 모델을 업데이트합니다. 하이퍼파라미터 공간의 유망한 영역에 대한 검색에 집중하여 보다 효율적인 탐색으로 이어집니다.
베이지안 최적화의 장점은 비볼록 및 비선형 목적 함수뿐만 아니라 연속 및 불연속 하이퍼파라미터를 모두 처리할 수 있다는 것입니다. 관찰된 성능에 적응하고 평가할 다음 하이퍼파라미터 값을 지능적으로 선택하여 잠재적으로 그리드 검색 또는 무작위 검색에 비해 더 적은 평가로 최적의 솔루션으로 수렴합니다.
그러나 베이지안 최적화는 특히 대규모 데이터 세트 또는 복잡한 모델의 경우 계산 비용이 더 높을 수 있습니다. 대리 모델을 업데이트하고 평가할 다음 하이퍼파라미터 값을 결정하려면 목적 함수를 여러 번 평가해야 합니다.
전반적으로 베이지안 최적화는 특히 하이퍼파라미터 공간이 복잡하고 목적 함수를 평가하는 데 비용이 많이 드는 경우 하이퍼파라미터 튜닝을 위한 강력한 기술입니다.
요약하면 k-겹 교차 검증은 모델 평가와 모델 선택 모두에 유용한 도구입니다. 이를 통해 다양한 모델의 성능을 추정하고 최상의 하이퍼파라미터 설정을 선택할 수 있습니다. 그리드 검색, 무작위 검색, 베이지안 최적화와 같은 기술을 사용하여 하이퍼파라미터를 조정하고 모델 성능을 향상시킬 수 있습니다. 방법의 선택은 하이퍼파라미터 공간의 크기, 계산 리소스 및 당면한 특정 문제와 같은 요인에 따라 달라집니다.
예, 모델 평가를 위한 k-겹 교차 검증에 대해 이야기했던 지난번과 같습니다. 이제 k-겹 교차 검증에 대한 몇 가지 코드 예제를 자세히 살펴보고 이번에는 모델 선택에 대해 살펴보겠습니다. GitHub에서 찾을 수 있는 몇 가지 코드 예제를 제공하겠습니다. 또한 코드 노트북을 다운로드하고 나중에 실험할 수 있도록 Piazza 및 Canvas에 링크를 포함할 것입니다.
자, 코드 노트북으로 들어가 봅시다. 평소와 같이 사용 중인 패키지의 버전 번호를 확인하기 위해 워터마크부터 시작합니다. 이 노트북에서는 하이퍼파라미터 튜닝 및 모델 선택에 정말 유용한 그리드 검색에 중점을 둘 것입니다. 이 데모에서는 홍채 데이터 세트에 의사 결정 트리 분류기를 사용합니다. iris 데이터셋이 가장 흥미롭지는 않을 수 있지만 이를 통해 작업을 단순하게 유지할 수 있습니다. 또한 더 복잡한 데이터 세트로 작업할 수업 프로젝트를 시작하기 전에 좋은 연습이 될 것입니다.
데이터 세트를 교육 및 테스트 세트로 분할하는 것으로 시작합니다. 데이터의 85%는 훈련에, 15%는 테스트에 사용합니다. 그리드 검색으로 이동하여 최대 깊이와 기준이라는 두 가지 하이퍼파라미터 옵션을 정의합니다. 최대 깊이는 의사 결정 트리의 최대 깊이를 나타내며 1, 2, 3, 4, 5 또는 없음(최대 깊이에 대한 제한 없음)으로 설정합니다. 기준은 분할의 품질을 측정하는 기능을 나타내며 "지니"와 "엔트로피"를 모두 평가합니다. 실제로 지니와 엔트로피 사이의 선택은 거의 차이가 없지만 데모 목적으로 포함합니다.
다음으로 하이퍼파라미터와 해당 값을 지정하는 파라미터 그리드를 생성합니다. 목록을 사용하는 대신 사전을 사용하여 다른 시나리오를 지정할 수도 있습니다. 예를 들어 다른 하이퍼파라미터의 모든 값을 탐색하면서 한 하이퍼파라미터의 특정 값을 하드코딩할 수 있습니다. 이 접근 방식은 충돌하는 매개변수 선택을 처리할 때 유용할 수 있습니다. 그러나 이 경우에는 충돌이 없으므로 목록으로 충분합니다.
교차 검증 접기(CV)의 수를 10으로 설정하여 10겹 교차 검증을 수행하려고 함을 나타냅니다. 계층화된 k-겹 교차 검증은 분류기에 사용되어 레이블의 비율이 각 접기에서 일정하게 유지되도록 합니다. 최상의 하이퍼파라미터 설정을 선택하는 데 사용되는 스코어링 메트릭은 분류자의 정확도와 회귀자의 R-제곱 점수입니다. 또한 실행할 병렬 작업 수를 -1로 설정하여 여러 작업을 병렬로 수행할 수 있습니다.
필요한 세부 정보를 모두 지정한 후 그리드 검색 개체를 데이터에 맞춥니다. 매개변수 그리드에 대한 철저한 검색을 수행하고 교차 검증을 사용하여 각 하이퍼 매개변수 조합의 성능을 평가합니다. 그리드 검색이 완료되면 각각 best_score_ 및 best_params_ 속성을 사용하여 최고 점수 및 해당 매개변수에 액세스할 수 있습니다. 이 경우 최고의 모델은 최대 깊이가 3이고 기준 "gini"가 있어 유효성 검사 접기에서 평균 96%의 정확도를 달성합니다.
관심이 있는 경우 모든 정보가 포함된 사전에 저장된 결과를 수동으로 검사할 수 있습니다. 여기서는 각 하이퍼파라미터 설정에 대한 유효성 검사 접기에 대한 평균 성능을 나타내는 평균 테스트 점수에 중점을 둡니다. 더 나은 가독성을 위해 매개 변수 설정과 함께 점수를 인쇄합니다.
선택적으로 ML 범위 라이브러리의 함수를 사용하여 결과를 히트맵으로 요약할 수 있습니다. 히트맵은 다양한 하이퍼파라미터 설정에 대한 성능을 시각적으로 보여줍니다. 이 경우 유사한 점수에서 알 수 있듯이 "지니"와 "엔트로피" 사이의 선택은 성능에 거의 영향을 미치지 않습니다. 최상의 성능은 최대 깊이 3과 기준 "gini"에서 달성됩니다.
최상의 하이퍼파라미터 설정을 얻은 후 이를 사용하여 전체 교육 데이터 세트에서 최종 모델을 교육할 수 있습니다. 이렇게 하면 모델 교육에 사용 가능한 모든 데이터를 활용할 수 있습니다. 우리는 새로운 결정 트리 분류기 개체를 만들고, 그리드 검색 중에 찾은 최상의 값으로 하이퍼 매개 변수를 설정하고, 모델을 교육 데이터에 맞춥니다.
모델이 훈련되면 테스트 데이터 세트에 대한 예측을 수행하고 성능을 평가할 수 있습니다. 이 예에서는 올바르게 분류된 인스턴스의 비율을 측정하는 정확도 점수를 계산합니다. 정확도 점수를 인쇄하고 이 경우 테스트 세트에서 93%의 정확도를 달성합니다.
전반적으로 그리드 검색을 통해 다양한 하이퍼파라미터 조합을 체계적으로 탐색하고 모델에 가장 적합한 구성을 선택할 수 있습니다. 하이퍼파라미터 튜닝 프로세스를 자동화하고 성능 향상을 위한 최적의 설정을 찾는 데 도움을 줍니다.
이것이 모델 선택 및 하이퍼파라미터 튜닝에 그리드 검색을 사용하는 기본 아이디어입니다. 물론 이것은 하나의 접근 방식일 뿐이며 무작위 검색, 베이지안 최적화 등과 같은 다른 기술을 사용할 수 있습니다. 방법의 선택은 특정 문제와 사용 가능한 리소스에 따라 다릅니다.
이전 논의에서 그리드 검색을 사용한 k-겹 교차 검증 및 모델 선택의 개념을 다루었습니다. 그러나 고려해야 할 또 다른 중요한 주제가 있습니다. 하나의 표준 오류 방법입니다. 이 방법은 여러 하이퍼파라미터 설정이 똑같이 잘 수행되는 상황에 직면하고 가장 적절한 것을 선택해야 하는 경우에 적합합니다.
유사하거나 동일한 성능을 가진 여러 하이퍼파라미터 설정이 있는 경우 선택할 항목을 결정하는 것이 중요해집니다. 기본적으로 scikit-learn은 동점이 있는 경우 목록에서 첫 번째 설정을 선택합니다. 그러나 하나의 표준 오차 방법은 절약의 원칙 또는 Occam의 면도날에 기반한 대체 접근 방식을 제공합니다. Occam의 면도날에 따르면 경쟁 가설이 똑같이 잘 수행되면 가정이 가장 적은 가설이 선호되어야 합니다.
하나의 표준 오차 방법을 적용하기 위해 수치적으로 최적인 추정치와 표준 오차를 고려합니다. k-겹 교차 검증을 통해 모델 선택을 수행한 후 다양한 하이퍼파라미터 설정에 대한 성능 추정치를 얻습니다. 이러한 설정 중에서 성능이 이전 단계에서 얻은 최고 성능 모델의 표준 오차 이내인 모델을 선택합니다.
이 방법을 설명하기 위해 scikit-learn으로 생성된 사각형과 삼각형으로 구성된 이진 분류 데이터 세트를 고려해 보겠습니다. 단순화를 위해 RBF 커널 SVM(Support Vector Machine)에 중점을 둘 것입니다. SVM에는 감마라는 하이퍼파라미터가 있어 각 훈련 예제의 영향을 제어합니다. 다양한 감마 값이 60%에서 90% 범위의 정확도를 가져오고 일부 설정은 유사한 성능을 나타냅니다.
SVM의 경우 결정 경계의 복잡도는 감마 값에 따라 달라집니다. 감마가 높을수록 결정 경계가 더 복잡해지고 감마가 낮을수록 결정 경계가 더 단순해집니다. 다른 감마 값에 대한 결정 경계를 플로팅하여 이를 관찰할 수 있습니다. 더 간단한 모델은 선형에 가까운 결정 경계를 갖는 반면, 더 복잡한 모델은 더 복잡한 모양을 나타냅니다.
그러나 여러 하이퍼파라미터 설정이 유사한 정확도를 산출할 때 가장 성능이 좋은 모델의 하나의 표준 오차 내에서 가장 간단한 모델을 선택하려고 합니다. 예를 들어, 가장 성능이 좋은 모델의 감마 값이 0.1인 경우 하나의 표준 오차가 0.1 이내인 감마 값을 가진 모델을 고려하고 복잡성이 가장 낮은 모델을 선택합니다.
하나의 표준 오류 방법에 항상 해당 논문이나 출판물이 있는 것은 아니라는 점은 주목할 가치가 있습니다. 단순성의 원칙에 기반한 실용적인 접근 방식이며 실무자들이 널리 채택했습니다. 이 방법에 대한 출판된 연구나 논문이 있다면 그 효과와 의미를 더 탐구하는 데 귀중한 추가 자료가 될 것입니다.
다음 비디오에서는 실제로 하나의 표준 오류 메서드를 구현하는 방법을 보여주는 코드 예제를 자세히 살펴보겠습니다.
이번 영상에서는 이전 영상에서 다뤘던 표준오차 방법 하나를 어떻게 구현했는지 자세히 설명드리겠습니다. 코드 예제를 따라가려면 이 링크에서 찾을 수 있습니다. 쉽게 액세스할 수 있도록 Canvas에도 게시할 예정입니다.
노트북을 함께 살펴봅시다. 첫째, 일반적으로 사용되는 재래식 수입품이 있습니다. 그런 다음 scikit-learn 라이브러리의 make_circles 함수를 사용하여 나만의 장난감 데이터 세트를 생성합니다. 이 기능을 사용하면 데이터 세트의 예 수와 노이즈 양을 지정할 수 있습니다. 그런 다음 생성된 데이터 세트는 교육 및 테스트 세트로 나뉩니다. 이 접근 방식은 임의의 대규모 데이터 세트에 대한 시뮬레이션 연구를 수행하여 다양한 학습 곡선과 모델 동작이 노이즈 및 교육 예제 수와 같은 다양한 매개 변수에 따라 어떻게 달라지는지 관찰하는 데 탁월합니다. 실험을 위한 유용한 테스트베드 역할을 합니다.
다음으로 SVM(Support Vector Machine)을 예로 사용합니다. 이 데모에서 SVM이 작동하는 방식을 완전히 이해할 필요는 없습니다. 나는 단순히 명확한 예로 그것을 선택했습니다. 다음 단계에는 하이퍼파라미터 설정 목록을 정의하고 이러한 값을 반복하는 수동 접근 방식이 포함됩니다. 그러나 더 복잡한 설정이 있는 경우 이전 비디오에서 논의된 ParamSampler를 사용할 수 있습니다.
이 데모에서는 단일 하이퍼파라미터를 사용하므로 목록과 for 루프를 사용하는 수동 접근 방식이면 충분합니다. 매개변수 목록을 초기화한 다음 각 값을 반복합니다. 반복할 때마다 선택한 하이퍼파라미터 설정으로 SVM 모델을 초기화합니다. 그런 다음 모델의 정확도를 평가하기 위해 k-겹 교차 검증을 수행합니다. 정확도 값이 수집되고 평균, 표준 편차 및 표준 오류가 계산됩니다. 표준 편차를 샘플 크기의 제곱근으로 나누어 표준 오차를 계산하는 데 사용하는 순진한 접근 방식은 k-겹 교차 검증의 라운드가 완전히 독립적이지 않기 때문에 최선의 방법이 아닐 수 있습니다. 그러나 서로 다른 방법을 비교하기 위해 유사성 또는 오차 막대의 일부 척도를 얻기 위해 이 접근 방식으로 충분합니다.
정확도 값을 수집한 후 샘플링이 기하급수적으로 이루어지기 때문에 로그 스케일로 플롯합니다. 결과 플롯은 다양한 하이퍼파라미터 설정에 대한 SVM 모델의 성능을 표시합니다. 이것은 우리가 강의 슬라이드에서 본 것과 일치합니다.
이 방법을 다른 분류기에 적용할 수 있음을 보여주기 위해 홍채 데이터 세트에 대한 의사 결정 트리 분류 코드도 제공합니다. 이 경우 의사 결정 트리의 최대 깊이 매개 변수를 1에서 10으로 변경합니다. 유사한 단계를 따릅니다. 하이퍼 매개 변수 설정으로 모델 초기화, 모델 피팅, 예측 만들기, k-폴드 교차 검증 점수 수집, 표준 오류 등. 서로 다른 최대 깊이에 대한 결정 경계를 분석하여 모델 복잡성과 성능 사이의 균형을 관찰할 수 있습니다. 이 특정 예에서는 하나의 표준 오류 방법을 사용하여 최대 깊이가 3인 의사 결정 트리를 선택합니다.
마지막으로 알고리즘 선택을 위한 교차 검증, 통계 테스트, 평가 지표 등 다음 강의에서 다룰 주제에 대해 간략하게 언급합니다. 이러한 주제는 이전 강의에서 논의된 개념과 밀접하게 관련되어 있습니다.
9.6 부트스트랩 신뢰 구간(L09 모델 평가 2: 신뢰 구간)
9.6 부트스트랩 신뢰 구간(L09 모델 평가 2: 신뢰 구간)
다시 오신 것을 환영합니다! 우리는 이제 이 강의의 더 흥미로운 부분에 도달했습니다. 이 비디오에서는 부트스트랩 방법을 사용한 경험적 신뢰 구간에 초점을 맞춥니다. 빠른 요약으로 우리는 이전에 배깅 방법에 대해 이야기할 때 부트스트랩 방법에 대해 논의했습니다. 배깅에서는 훈련 세트에서 부트스트랩 샘플을 추출했습니다. 그런데 왜 이것이 '부트스트랩' 방식이라고 불리는지 궁금한 적이 있습니까?
부트스트랩(bootstrap)이라는 용어는 '부트스트랩으로 자신을 끌어올리다'라는 말에서 유래했는데, 이는 불가능한 일을 비유적으로 표현한 것입니다. 부트스트랩 방법은 단일 샘플에서 샘플링 분포를 추정하는 것과 관련되므로 실제로 어려운 기술입니다. 그래서 어떻게 보면 우리는 은유적으로 이 어려운 작업을 시도함으로써 부트스트랩으로 스스로를 끌어올리려고 합니다.
시간이 지남에 따라 '부트스트랩'의 의미는 엄격하고 독립적인 노력을 통해 자신을 향상시키는 개념을 포함하도록 확장되었습니다. 그러나 부트스트랩 방법의 맥락에서 우리는 '자신의 부트스트랩으로 자신을 끌어올리는 것'과 관련된 정치적 의미가 아니라 기술 자체에만 초점을 맞추고 있습니다.
이제 부트스트랩 방법과 이를 통해 샘플링 분포와 성능 추정치의 불확실성을 추정할 수 있는 방법을 살펴보겠습니다. 1979년 Bradley Efron이 처음 도입한 부트스트랩 방법은 단일 데이터 세트에만 액세스할 수 있을 때 샘플링 분포를 추정하는 데 사용되는 리샘플링 기술입니다.
개념을 이해하기 위해 데이터 세트가 하나뿐이고 이를 사용하여 다양한 샘플 통계를 추정한다고 가정합니다. 이러한 통계는 표본 평균, 표준 편차, R-제곱 또는 상관 관계와 같은 관심 대상일 수 있습니다. 부트스트랩 방법을 사용하면 모집단에서 샘플을 추출하는 프로세스를 시뮬레이션하여 원래 데이터 세트에서 반복적으로 샘플링하여 새 데이터 세트를 생성할 수 있습니다. 교체 없이 샘플링하는 반복 홀드아웃 방법과 달리 샘플링은 교체와 함께 수행된다는 점에 유의하는 것이 중요합니다.
이러한 부트스트랩 표본을 그리고 표본 평균과 같은 원하는 표본 통계를 계산하면 표본 평균의 분포가 정규 분포를 따른다는 것을 관찰할 수 있습니다. 평균의 표준 오차로 알려진 이 분포의 표준 편차는 표본 표준 편차를 표본 크기의 제곱근으로 나눈 값에서 추정할 수 있습니다.
부트스트랩 방법을 사용하면 표준 편차를 추정하고 이를 사용하여 성능 추정과 관련된 불확실성을 결정함으로써 신뢰 구간을 구성할 수 있습니다. 신뢰구간은 실제 모집단 모수에 대한 타당한 값의 범위를 제공합니다. 부트스트랩 방법의 경우 표준편차를 경험적으로 계산하여 신뢰구간 계산에 활용한다.
이제 부트스트랩 절차와 관련된 단계를 이해하겠습니다. 먼저 원본 데이터 세트에서 대체하여 샘플을 그립니다. 다음으로 이 부트스트랩 샘플을 사용하여 원하는 샘플 통계를 계산합니다. 샘플 통계의 분포를 얻기 위해 이 두 단계를 여러 번 반복하며 일반적으로 약 200회 이상을 권장합니다. 이 분포의 표준 편차는 표본 통계의 표준 오차 추정치 역할을 합니다. 마지막으로 표준 오차를 사용하여 신뢰 구간을 계산할 수 있으며 이는 성능 추정치에 대한 불확실성 측정을 제공합니다.
부트스트랩 방법을 사용하여 분류기의 성능을 평가할 때 접근 방식을 약간 수정할 수 있습니다. 크기 n의 데이터 세트를 고려하십시오. 이 경우 p 부트스트랩 라운드를 수행하며 각 라운드에서 원본 데이터 세트에서 부트스트랩 샘플을 그립니다. 그런 다음 각 부트스트랩 샘플에 모델을 맞추고 부트스트랩 샘플에 포함되지 않은 샘플인 out-of-bag 샘플에 대한 정확도를 계산합니다. 모든 부트스트랩 라운드에 대한 정확도를 평균화하여 부트스트랩 정확도를 얻습니다. 이 접근 방식은 교육에 사용되는 샘플이 아닌 보이지 않는 데이터에 대해 모델을 평가하여 과적합 문제를 해결합니다. 또한 부트스트랩 정확도는 모델의 성능 가변성을 측정합니다.
부트스트랩 방법을 사용하여 분류기의 성능을 평가하는 단계를 요약하면 다음과 같습니다.
부트스트랩 정확도는 본 적이 없는 데이터에 대한 분류기 성능의 추정치 역할을 할 수 있으며 성능 추정치와 관련된 불확실성의 척도를 제공합니다. 또한 분류기의 안정성과 견고성을 평가하는 데 도움이 될 수 있습니다.
부트스트랩 방법을 활용하여 모델의 성능에 대한 귀중한 통찰력을 얻고 성능 추정과 관련된 불확실성을 추정할 수 있습니다. 이 기술은 데이터가 제한되어 있고 사용 가능한 데이터 세트를 최대한 활용하려는 경우에 특히 유용합니다. 부트스트랩 방법을 사용하면 샘플링 분포를 근사화하고 신뢰 구간을 구성하며 분류기의 성능을 효과적으로 평가할 수 있습니다.
결론적으로 부트스트랩 방법은 단일 데이터 세트를 사용하여 샘플링 분포를 추정하고 성능 추정의 불확실성을 평가할 수 있는 강력한 리샘플링 기술입니다. 다양한 통계 문제를 해결하기 위한 실용적인 접근 방식을 제공하며 기계 학습, 통계 및 데이터 분석을 포함한 광범위한 분야에서 응용 프로그램을 찾았습니다. 부트스트랩 방법을 이해하고 구현함으로써 정보에 입각한 결정을 내리고 제한된 데이터에서 신뢰할 수 있는 결론을 도출하는 능력을 향상시킬 수 있습니다.
9.7 .632 및 .632+ 부트스트랩 방법(L09 모델 평가 2: 신뢰 구간)
9.7 .632 및 .632+ 부트스트랩 방법(L09 모델 평가 2: 신뢰 구간)
이 비디오에서는 이전 비디오에서 논의된 주제를 더 깊이 파고들 것입니다. 이전 비디오에서는 경험적 신뢰 구간을 구성하는 데 사용되는 부트스트랩 방법, 특히 가방 외부 부트스트랩을 다루었습니다. 이 비디오에서는 0.632 부트스트랩과 0.632+ 부트스트랩이라는 두 가지 고급 부트스트래핑 기술을 살펴봅니다. 이러한 기술은 관련이 있으며 그 기원은 이 비디오에서 자세히 설명합니다.
부트스트랩 절차를 간략하게 요약하기 위해 데이터 세트로 시작하여 대체 샘플링을 통해 부트스트랩 샘플을 생성합니다. 각 부트스트랩 샘플에 대해 모델을 피팅하고 외부 샘플에 대한 성능을 평가합니다. 이전 비디오에서는 객체 지향 접근 방식을 사용하여 Python에서 이 절차를 구현하는 방법도 시연했습니다.
현재 비디오에서 발표자는 프로세스를 단순화하는 코드 구현을 소개합니다. 그들은 부트스트랩 라운드 수와 랜덤 시드를 입력으로 사용하는 "BootstrapOutOfBag"라는 클래스를 만들었습니다. 이 클래스는 데이터 세트를 교육 및 테스트 하위 집합으로 나누는 "분할"이라는 메서드를 제공합니다. 교육 하위 집합은 부트스트랩 샘플에 해당하고 테스트 하위 집합은 외부 샘플을 나타냅니다. 발표자는 이러한 분할을 반복하여 부트스트랩 절차를 수행하고 모델의 성능을 평가하는 방법을 보여줍니다.
그런 다음 발표자는 "bootstrap_0.632_score"라는 또 다른 구현을 소개합니다. 이 구현을 통해 사용자는 가방 외부 또는 부트스트랩 점수를 편리하게 계산할 수 있습니다. 분류기, 훈련 세트, 분할 수 및 임의 시드를 제공함으로써 사용자는 백분위수 방법을 사용하여 평균 정확도를 계산하고 신뢰 구간을 얻을 수 있습니다.
다음으로 비디오는 비관적 편향으로 알려진 out-of-bag 부트스트랩 방법의 단점을 다룹니다. Bradley Efron은 이 편향을 해결하는 방법으로 0.632 추정치를 제안했습니다. 비관적 편향은 부트스트랩 샘플에 원래 데이터 세트에 비해 고유한 데이터 포인트가 적기 때문에 발생합니다. 실제로 부트스트랩 샘플의 데이터 포인트 중 63.2%만이 고유합니다. 발표자는 이 그림 뒤에 있는 확률 계산을 설명하고 다양한 샘플 크기에 대해 어떻게 작동하는지 설명하기 위해 시각화를 제공합니다.
비관적 편견을 극복하기 위해 비디오는 0.632 부트스트랩 방법을 소개합니다. 이 방법은 각 라운드에서 out-of-bag 샘플과 부트스트랩 샘플의 정확도를 결합합니다. 각 라운드의 정확도는 아웃오브백 정확도와 재대체 정확도라는 두 용어의 합으로 계산됩니다. Out-of-bag 정확도는 부트스트랩 샘플에 포함되지 않은 샘플에 대한 성능을 나타내는 반면, 재대입 정확도는 모델을 적합시키기 위해 사용된 동일한 데이터에 대한 성능을 측정합니다.
이 두 항을 결합하여 0.632 부트스트랩 방법은 모델 성능에 대한 편향이 적은 추정치를 제공하는 것을 목표로 합니다. 이 방법은 out-of-bag 정확도를 통합하여 재대입 정확도의 지나치게 낙관적인 특성을 해결합니다.
결론적으로 이 비디오는 고급 부트스트래핑 기술인 0.632 부트스트랩 및 0.632+ 부트스트랩을 도입하여 이전 비디오에서 설명한 개념을 기반으로 합니다. 이러한 방법은 가방 외부 및 부트스트랩 샘플 정확도를 모두 고려하여 가방 외부 부트스트랩의 비관적 편향을 완화하는 것을 목표로 합니다. 비디오는 이러한 기술의 이해와 적용을 용이하게 하는 코드 구현 및 설명을 제공합니다.
10.1 교차 검증 강의 개요(L10: 모델 평가 3)
10.1 교차 검증 강의 개요(L10: 모델 평가 3)
여러분, 안녕하세요! 지난 주에 우리는 모델 평가의 중요한 주제에 대해 깊이 파고들었습니다. 여기에서 모델 성능 평가 및 신뢰 구간 구성과 같은 다양한 측면에 대해 논의했습니다. 그러나 모델 평가에 대한 탐색은 아직 완료되지 않았습니다. 다루어야 할 다른 필수 개념이 있기 때문입니다. 실제로는 특정 모델을 평가하는 것만이 아닙니다. 또한 평가할 수 있는 좋은 모델을 먼저 찾아야 합니다.
이 강의에서는 하이퍼파라미터를 조정하고 서로 다른 하이퍼파라미터 설정으로 인한 모델을 비교하는 방법을 포함하는 교차 검증 기술에 중점을 둘 것입니다. 이 프로세스를 모델 선택이라고 합니다. 오늘 우리의 주요 강조점은 교차 검증입니다.
이번 주에 다룰 주제가 많지만 걱정하지 마세요. 각 주제는 비교적 짧습니다. 이번 강의와 다음 강의에서 논의할 내용에 대한 개요를 제공하겠습니다.
모델 평가를 위한 교차 검증 기법: 모델 성능을 평가하기 위한 K-겹 교차 검증 및 기타 관련 기법을 살펴보겠습니다. Python과 scikit-learn을 사용하여 코드 예제를 시연합니다.
모델 선택을 위한 교차 검증: 하이퍼파라미터 튜닝을 포함하여 최상의 모델을 선택하기 위해 교차 검증을 사용하는 방법에 대해 논의합니다. scikit-learn에서 그리드 검색과 무작위 검색을 사용하여 모델 선택을 수행하는 방법을 보여 드리겠습니다.
절약의 법칙: 우리는 K-겹 교차 검증의 아이디어와 모델을 단순하게 유지하는 원칙을 결합한 단일 표준 오류 방법의 개념을 탐구할 것입니다. 또한 이전 강의에서 설명한 반복 홀드아웃 방법과 유사한 하나의 표준 오류 방법과 반복 K-겹 교차 검증에 대한 코드 예제를 제공합니다.
교차 검증을 살펴보기 전에 하이퍼파라미터를 빠르게 다시 소개하고 모델 파라미터와의 차이점을 명확히 합시다. 그런 다음 모델 평가 및 기타 관련 기술을 위한 K-겹 교차 검증에 대해 논의할 것입니다. Python과 scikit-learn을 사용하여 이러한 기술을 실제로 구현하는 방법을 살펴보겠습니다. 마지막으로 모델 평가와 모델 선택의 차이점을 강조하면서 모델 선택을 위한 교차 검증으로 논의를 확장할 것입니다.
또한 광범위한 연구와 독서를 바탕으로 특정 작업과 문제에 따라 다양한 기술을 분류하여 개요를 준비했습니다. 이 분류는 서로 다른 기술을 탐색하고 각 기술을 언제 사용해야 하는지 이해하는 데 도움이 됩니다. 개요에 제공된 권장 사항은 향후 강의에서 다룰 추가 논의의 대상이라는 점에 유의하는 것이 중요합니다.
강의 개요를 요약한 것입니다. 이제 하이퍼파라미터를 다시 소개하고 교차 검증에 대해 자세히 살펴보겠습니다.
10.2 하이퍼파라미터(L10: 모델 평가 3)
10.2 하이퍼파라미터(L10: 모델 평가 3)
교차 검증에 대해 알아보기 전에 잠시 하이퍼파라미터에 대해 논의해 봅시다. 이미 개념에 익숙할 수 있지만 그렇지 않은 경우 유용한 요약이 될 것입니다. 하이퍼 매개변수는 모델이나 알고리즘의 조정 매개변수 또는 설정으로 생각할 수 있습니다. 모델의 성능을 최적화하기 위해 수동으로 조정하는 옵션입니다. 이를 설명하기 위해 비모수적 모델인 K-최근접 이웃 분류기를 살펴보겠습니다.
비모수 모델은 매개변수 모델과 달리 미리 정의된 구조가 없습니다. 대신 모델의 구조를 정의하기 위해 훈련 세트에 의존합니다. 예를 들어, K-최근접 이웃에서 모델의 매개변수는 기본적으로 훈련 예제 자체입니다. 따라서 예를 추가하거나 제거하는 등 훈련 세트를 변경하면 모델 구조에 상당한 영향을 미칠 수 있습니다. 비모수적 모델의 또 다른 예는 트리의 분할 수가 미리 정의된 구조가 아니라 훈련 예제에 따라 결정되는 의사결정 트리입니다.
이제 K-최근접 이웃 알고리즘의 하이퍼파라미터에 대해 구체적으로 살펴보겠습니다. 이러한 하이퍼파라미터에는 이웃 수(K) 및 사용된 거리 메트릭(예: 맨해튼 또는 유클리드 거리)과 같은 옵션이 포함됩니다. 이러한 옵션은 모델을 실행하기 전에 설정해야 하며 데이터에서 학습되지 않습니다. 이 과정에서는 하이퍼파라미터 조정을 지원하는 그리드 검색 또는 무작위 검색과 같은 기술을 살펴봅니다. 그러나 하이퍼파라미터에 대해 다른 값을 시도하는 것은 데이터에 맞추는 과정이 아니라 최상의 설정을 찾기 위한 반복 실험이라는 점에 유의해야 합니다.
더 많은 예를 제공하기 위해 scikit-learn의 하이퍼 매개변수 정의를 참조해 보겠습니다. 결정 트리 분류기를 초기화할 때 하이퍼파라미터에는 불순도 측정(예: 지니 또는 엔트로피), 사전 가지치기를 위한 트리의 깊이, 잎당 최소 샘플 수 등이 포함될 수 있습니다. 이들은 모두 하이퍼파라미터로 간주됩니다.
특히 모든 옵션이 하이퍼파라미터는 아니지만 모든 하이퍼파라미터는 옵션입니다. 예를 들어, 모델에서 임의성을 결정하는 임의 상태 또는 임의 시드는 하이퍼 매개변수가 아닙니다. 더 나은 성능을 위해 무작위 시드를 변경하는 것은 불공평한 것으로 간주되므로 모델을 개선하기 위해 조작해서는 안 됩니다.
이제 모델 매개변수와 하이퍼 매개변수를 대조해 보겠습니다. 예를 들어, 선형 모델로 볼 수 있고 고전적인 기계 학습과 딥 러닝 모두에 대한 소개 역할을 하는 로지스틱 회귀를 간략하게 살펴보겠습니다. 로지스틱 회귀에서 입력은 바이어스를 설명하기 위한 절편 항을 포함하는 기능입니다. 특징 수에 따라 결정되는 모델 가중치는 모델의 구조를 형성합니다. 처음에 이러한 가중치는 0 또는 작은 임의 값으로 설정할 수 있으며, 그런 다음 손실 함수(예: 선형 회귀의 평균 제곱 오차)를 최소화하기 위해 반복적으로 업데이트됩니다.
로지스틱 회귀에서는 일반적으로 로지스틱 함수 또는 시그모이드 함수인 비선형 함수가 순 입력(입력의 가중 합계)에 적용되어 0과 1 사이의 범위로 스쿼시됩니다. 이 출력은 이진 분류에서 클래스 소속 확률로 해석될 수 있습니다. 가중치는 예측 클래스 소속 확률을 실제 클래스 레이블(0 또는 1)과 비교하여 계산되는 손실을 최소화하도록 조정됩니다. 로지스틱 회귀는 또한 L1 또는 L2 정규화와 같은 정규화 기술을 사용하여 과적합을 방지하기 위해 가중치 크기에 따라 페널티 항을 추가합니다. 정규화 강도(람다)는 사용자가 설정해야 하는 하이퍼파라미터입니다.
요약하면 로지스틱 회귀의 가중치(W)와 같은 모델 매개변수는 훈련 데이터에서 학습되는 반면 정규화 강도(lambda)와 같은 하이퍼 매개변수는 사용자가 결정하며 데이터에서 학습되지 않습니다. 모델 매개변수는 성능을 최적화하기 위해 학습 프로세스 중에 업데이트되는 모델의 내부 변수인 반면 하이퍼 매개변수는 모델의 동작을 제어하고 학습 전에 설정해야 하는 외부 설정입니다.
하이퍼파라미터의 최적 값을 찾는 프로세스를 하이퍼파라미터 튜닝이라고 합니다. 모델의 성능에 큰 영향을 미칠 수 있으므로 기계 학습에서 중요한 단계입니다. 그러나 최상의 하이퍼파라미터 값을 찾는 것은 간단한 작업이 아니며 다양한 조합을 실험하고 평가해야 하는 경우가 많습니다.
하이퍼파라미터 튜닝에 대한 일반적인 접근 방식 중 하나는 그리드 검색으로, 각 하이퍼파라미터에 대해 미리 정의된 값 집합이 지정되고 가능한 모든 조합이 교차 검증을 사용하여 평가됩니다. 교차 유효성 검사는 데이터를 여러 하위 집합(폴드)으로 분할하고 일부 폴드에서 모델을 교육하고 나머지 폴드에서 평가하여 모델의 성능을 평가하는 데 사용되는 기술입니다. 이는 본 적이 없는 데이터에 대한 모델의 성능을 추정하고 과적합의 위험을 줄이는 데 도움이 됩니다.
또 다른 접근 방식은 무작위 검색으로, 하이퍼 매개변수 값의 무작위 조합이 지정된 분포에서 샘플링됩니다. 이는 가능한 모든 조합을 철저하게 평가하지 않고도 더 넓은 범위의 값을 탐색할 수 있으므로 하이퍼 매개변수의 검색 공간이 클 때 유용할 수 있습니다.
그리드 검색 및 무작위 검색 외에도 확률 모델을 사용하여 검색 프로세스를 안내하는 베이지안 최적화, 자연 선택 프로세스를 모방하여 최적의 집합을 진화시키는 유전 알고리즘과 같은 하이퍼 매개변수 튜닝을 위한 고급 기술이 있습니다. 하이퍼파라미터.
특히 복잡한 모델이나 대규모 데이터 세트의 경우 하이퍼파라미터 튜닝이 계산 비용이 많이 들 수 있다는 점은 주목할 가치가 있습니다. 따라서 사용 가능한 데이터를 가장 효율적으로 사용하기 위해 교차 유효성 검사와 같은 기술과 함께 수행되는 경우가 많습니다.
하이퍼파라미터는 훈련 전에 설정해야 하는 모델의 설정 또는 옵션이며, 모델 매개변수는 훈련 중에 데이터에서 학습되는 내부 변수입니다. 하이퍼파라미터 튜닝은 이러한 설정에 대한 최상의 값을 찾는 프로세스이며 모델 성능을 최적화하는 데 중요합니다. 하이퍼파라미터 튜닝에는 그리드 검색, 무작위 검색, 베이지안 최적화 및 유전자 알고리즘과 같은 기술이 일반적으로 사용됩니다.
10.3 모델 평가를 위한 K-폴드 CV(L10: 모델 평가 3)
10.3 모델 평가를 위한 K-폴드 CV(L10: 모델 평가 3)
이 비디오에서는 모델 평가를 위한 교차 검증 주제에 대해 자세히 설명합니다. 교차 검증은 일반적으로 하이퍼파라미터 튜닝 및 모델 선택과 함께 사용됩니다. 그러나 이해를 돕기 위해 모델 선택에 대한 적용을 논의하기 전에 먼저 모델 평가의 맥락에서 k-겹 교차 검증이 어떻게 작동하는지 살펴보겠습니다.
시작하려면 모델 평가를 위한 k-폴드 교차 검증에는 데이터 세트를 검증 폴드로 분할하고 훈련을 위한 나머지 데이터 세그먼트가 포함됩니다. 일반적인 예에서 5중 교차 검증을 고려해 보겠습니다. 데이터 세트는 검증 접기(파란색으로 표시됨)와 4개의 훈련 접기(다른 색상으로 표시됨)로 나뉩니다. 모델은 훈련 접기에서 훈련되고 검증 접기에서 평가되어 성능 메트릭이 생성됩니다. 하나의 유효성 검사 세트만 사용하는 홀드아웃 방법과 달리 k-겹 교차 유효성 검사에서는 유효성 검사 접기가 데이터의 다른 세그먼트를 통해 회전됩니다. 이렇게 하면 모든 데이터 포인트가 평가에 활용됩니다. 5겹 교차 검증의 경우 5개의 별개의 검증 접기가 있으며 5번의 반복이 수행됩니다. 반복할 때마다 성능 측정값이 생성됩니다. 전체 성능을 보고할 때 일반적인 접근 방식은 모든 반복의 성능 값을 평균화하는 것입니다.
이 논의에서 하이퍼파라미터 튜닝을 고려하지 않고 모델 평가를 위한 k-겹 교차 검증에 초점을 맞추고 있다는 점에 유의하는 것이 중요합니다. 이 시나리오에서 교차 검증을 통해 얻은 성능 추정치는 모델의 일반화 성능에 대한 추정치로 간주할 수 있습니다. 고정된 하이퍼파라미터를 사용하여 전체 데이터 세트에 대해 새 모델을 교육함으로써 실제 사용을 위한 최종 모델을 얻을 수 있습니다. 독립적인 테스트 세트를 사용하여 모델의 성능을 추가로 평가할 수 있지만 교차 검증 성능이 이미 신뢰할 수 있는 일반화 성능 추정치를 제공하기 때문에 하이퍼파라미터 튜닝이 관련되지 않은 경우 종종 불필요합니다.
이제 k-겹 교차 검증의 몇 가지 주요 속성을 살펴보겠습니다. 유효성 검사 접기는 겹치지 않습니다. 즉, 서로 다른 반복에서 유효성 검사 접기의 데이터 포인트 간에 겹치는 부분이 없습니다. 모든 데이터 포인트는 테스트에 활용되어 포괄적인 평가를 보장합니다. 일부 연구자는 유효성 검사 접기를 테스트 접기로 지칭할 수 있습니다. 이 용어는 서로 바꿔서 사용할 수 있기 때문입니다.
반면 훈련 주름은 중첩되어 서로 독립적이지 않습니다. 주어진 반복에서 훈련 데이터는 다른 반복의 훈련 데이터와 겹치는 샘플을 가질 수 있습니다. 이 특성으로 인해 모델의 성능 가변성을 이해하는 데 중요한 다양한 훈련 세트를 기반으로 분산을 추정하기가 어렵습니다.
또 다른 주목할 만한 측면은 k(접기 수) 값을 줄이면 성능 추정치가 더 비관적이라는 것입니다. 이는 각 접기에서 훈련에 사용할 수 있는 데이터 포인트가 적기 때문에 모델의 피팅 기능이 제한되기 때문입니다. 성과 비관론에 대한 이전 설명에서 논의한 바와 같이 보류된 데이터로 인해 성과 추정치는 더욱 비관적입니다.
k-겹 교차 검증의 두 가지 특별한 경우를 살펴보겠습니다. k가 2일 때 홀드아웃 방법과는 다른 이중 교차 검증이 있습니다. 2중 교차 검증에서 데이터 세트는 정확히 절반으로 분할되고 각각의 절반은 다른 반복에서 훈련에 사용됩니다. 대조적으로, 홀드아웃 방법은 임의의 분할 비율을 허용하고 반복 사이의 회전을 포함하지 않습니다. 그러나 k-겹 교차 검증의 각 라운드는 홀드아웃 방법의 특수한 경우로 간주할 수 있습니다. 여기서 데이터 세트는 정확히 두 부분으로 나뉩니다.
또 다른 특수한 경우는 k가 n일 때 LOOCV(leave-one-out cross-validation)가 발생하는 경우입니다. LOOCV에서 각 반복에는 유효성 검사 세트로 하나의 데이터 포인트를 남기고 나머지 n-1 데이터 포인트는 훈련에 사용됩니다. 이 접근 방식은 LOOCV라고도 하며 유효성 검사 세트는 하나의 데이터 포인트로만 구성됩니다.
Hawkins 등이 실시한 연구. (2003)은 LOOCV(leave-one-out cross-validation)를 포함한 다양한 모델 평가 방법의 성능을 조사한 결과 LOOCV가 다른 교차 검증 방법에 비해 분산이 큰 경향이 있음을 발견했습니다. 이 높은 분산은 LOOCV의 각 유효성 검사 접기가 하나의 데이터 포인트로만 구성되어 평가를 위한 샘플 크기가 제한된다는 사실에 기인할 수 있습니다. 결과적으로 LOOCV에서 얻은 성능 추정치는 각 반복에서 검증을 위해 선택한 특정 데이터 포인트에 매우 민감할 수 있습니다.
높은 분산에도 불구하고 LOOCV에는 몇 가지 장점이 있습니다. 각 반복에는 n-1 데이터 포인트에 대한 교육이 포함되므로(여기서 n은 데이터 포인트의 총 수) LOOCV는 모델 성능에 대한 편향되지 않은 추정치를 제공하는 경향이 있습니다. 또한 LOOCV는 교육에 사용 가능한 모든 데이터를 활용하므로 데이터 세트가 작거나 보다 정확한 성능 추정이 필요할 때 유용할 수 있습니다.
그러나 계산 복잡성으로 인해 LOOCV는 대규모 데이터 세트에 적합하지 않을 수 있습니다. 학습 프로세스를 n번 반복해야 하므로 상당한 계산 부담이 발생합니다. 이러한 경우 k의 적당한 값을 사용하는 k-겹 교차 검증이 종종 선호됩니다.
이제 모델 평가를 위한 k-겹 교차 검증을 살펴보았으므로 모델 선택에 적용하는 방법에 대해 간략하게 살펴보겠습니다. 모델 선택의 맥락에서 목표는 일반적으로 서로 다른 하이퍼파라미터 설정을 사용하여 일련의 후보 모델에서 최상의 모델을 식별하는 것입니다. 교차 검증을 사용하여 각 모델의 성능을 추정하고 선택 프로세스를 용이하게 할 수 있습니다.
일반적인 접근 방식은 각 모델에 대해 k-겹 교차 검증을 수행하고 모든 반복에서 평균 성능을 계산하고 결과를 비교하는 것입니다. 평균 성능이 가장 높은 모델이 최선의 선택으로 간주됩니다. 이 접근 방식은 데이터 가변성의 영향을 완화하는 데 도움이 되며 모델에 대한 보다 강력한 평가를 제공합니다.
요약하면 교차 검증은 모델 평가 및 선택을 위한 유용한 기술입니다. 데이터의 다른 세그먼트를 통해 유효성 검사 접기를 체계적으로 회전함으로써 포괄적인 평가가 가능하고 모델 성능의 추정치를 제공합니다. 모델 평가에만 사용하든 모델 선택과 함께 사용하든 교차 검증은 연구자와 실무자가 모델의 일반화 기능에 대해 정보에 입각한 결정을 내리는 데 도움이 됩니다.
10.4 모델 평가를 위한 K-폴드 CV -- 코드 예제(L10: 모델 평가 3)
10.4 모델 평가를 위한 K-폴드 CV -- 코드 예제(L10: 모델 평가 3)
이전 비디오에서는 기계 학습 모델을 평가하는 방법으로 k-겹 교차 검증에 대해 논의했습니다. 이 비디오에서는 scikit-learn 라이브러리를 사용하여 Python에서 k-겹 교차 검증을 구현하는 방법을 살펴봅니다. GitHub에 코드 노트북을 업로드했으며 여기에서 링크를 찾을 수 있습니다.
필요한 라이브러리를 로드하고 해당 버전을 확인하는 것으로 시작하겠습니다. 우리는 일반적으로 사용되는 라이브러리인 NumPy와 matplotlib를 가져올 것입니다. 다음으로 scikit-learn의 모델 선택 하위 모듈에서 k-폴드 클래스를 사용하여 k-폴드 교차 검증의 사용을 시연합니다.
재현성을 보장하기 위해 난수 생성기 개체를 사용하여 난수 시드를 설정합니다. 그런 다음 Class Zero의 레이블 5개와 Class One의 레이블 5개로 간단한 데이터 세트를 만듭니다. 또한 10개의 입력과 4개의 기능이 있는 임의의 데이터 세트를 생성합니다. 이것은 설명을 위한 임의의 데이터 세트일 뿐이며 iris 데이터 세트와 같이 원하는 모든 데이터 세트를 사용할 수 있습니다.
다음으로 cv(cross-validation의 줄임말)라는 k-fold 객체를 초기화합니다. 분할 수 n_splits를 5로 설정하여 5겹 교차 검증을 수행할 것임을 나타냅니다. split 메서드를 사용하여 이 k-fold 개체의 동작을 살펴보겠습니다. 이 메서드를 실행하면 각각 두 개의 배열을 포함하는 튜플로 구성된 5개의 결과를 얻습니다. 첫 번째 배열은 훈련 접기를 나타내고 두 번째 배열은 유효성 검사 접기를 나타냅니다.
이러한 배열 내의 숫자는 데이터 세트의 샘플 인덱스에 해당합니다. 예를 들어 첫 번째 접기의 훈련 세트에 해당하는 실제 레이블을 얻으려면 이 인덱스를 인덱스 배열로 사용하여 레이블을 선택할 수 있습니다. 마찬가지로 해당 기능을 선택할 수 있습니다. 이 경우에서 관찰한 것처럼 훈련 및 검증 접기의 레이블이 불균형할 수 있다는 점에 유의하는 것이 중요합니다.
이 문제를 해결하려면 k-겹 교차 검증을 수행하기 전에 데이터 세트를 섞는 것이 좋습니다. 초기화 중에 k-fold 개체 내에서 직접 데이터 세트를 섞음으로써 이를 달성할 수 있습니다. 무작위 상태를 설정하고 섞음으로써 훈련 및 검증 접기에서 더 나은 레이블 조합을 얻습니다.
또한 일반적으로 분할을 계층화하여 클래스 레이블의 비율이 각 폴드에서 일관되게 유지되도록 하는 것이 좋습니다. 일반 k-폴드 클래스 대신 계층화된 k-폴드 클래스를 사용하여 이를 달성할 수 있습니다. 계층화된 k-폴드를 사용하면 각 폴드의 레이블 비율이 원래 데이터 세트의 비율과 일치합니다.
k-fold 및 계층화된 k-fold 개체의 일반적인 동작에 대해 논의한 후 이를 실제로 적용하는 방법을 살펴보겠습니다. 의사 결정 트리 분류기와 홍채 데이터 세트를 예로 사용합니다. 먼저 층화 분할을 보장하는 train_test_split 메서드를 사용하여 홍채 데이터 세트를 85% 훈련 데이터와 15% 테스트 데이터로 분할합니다.
다음으로 Ron Kohavi의 실용적인 가이드에 대한 교차 유효성 검사에 대한 논문에서 권장하는 대로 k=10으로 층화된 k-폴드 객체를 초기화합니다. 그런 다음 분할 방법을 사용하여 교육 및 검증 인덱스를 반복하여 k-겹 교차 검증을 수행하는 수동 접근 방식을 사용합니다. 각 반복 내에서 훈련 접기를 사용하여 새로운 결정 트리 분류기를 적합하고 검증 접기의 레이블을 예측합니다. 각 반복에 대한 정확도를 계산하고 결과를 자리 표시자 변수에 저장합니다.
모든 폴드를 반복한 후 정확도의 합을 반복 횟수로 나누어 평균 k-폴드 교차 검증 정확도를 계산합니다. 마지막으로 보이지 않는 데이터에 대한 모델을 평가하기 위해 모든 훈련 데이터를 사용하여 새로운 결정 트리 분류기를 적합하고 테스트 세트에서 정확도를 계산합니다.
이 경우 95.3%의 k-겹 교차 검증 정확도와 95%의 테스트 세트 정확도를 얻었습니다. 이러한 결과는 우리 모델이 교차 검증 폴드와 보이지 않는 테스트 데이터 모두에서 잘 수행됨을 시사합니다.
그러나 접힌 부분을 수동으로 반복하고 모델을 피팅하는 것은 약간 번거로울 수 있습니다. 다행스럽게도 scikit-learn은 cross_val_score 함수를 사용하여 k-겹 교차 검증을 수행하는 보다 편리한 방법을 제공합니다. 이 함수는 모델, 데이터 세트 및 폴드 수를 입력으로 사용하고 자동으로 k-폴드 교차 검증을 수행하여 각 폴드에 대한 점수를 반환합니다.
이것이 실제로 어떻게 수행되는지 봅시다. 필요한 라이브러리를 가져오고 홍채 데이터 세트를 로드하는 것으로 시작합니다. 다음으로 의사 결정 트리 분류기의 인스턴스를 생성하고 k=10으로 계층화된 k-겹 개체를 초기화합니다.
그런 다음 cross_val_score 함수를 사용하여 분류자, 데이터 세트 및 k-fold 개체를 전달합니다. 이 함수는 자동으로 k-폴드 교차 검증을 수행하고 모델을 적합하며 각 폴드에 대한 점수를 계산합니다. 기본적으로 cross_val_score 함수는 정확도 메트릭을 사용하지만 원하는 경우 다른 메트릭을 지정할 수 있습니다.
마지막으로 각 접기에 대한 교차 유효성 검사 점수를 인쇄하고 평균 점수를 계산합니다. 이 경우 평균 교차 검증 정확도 95.3%를 얻었으며 이는 수동으로 얻은 정확도와 일치합니다.
cross_val_score를 사용하면 전체 프로세스를 자동으로 처리하므로 k-겹 교차 검증을 수행하는 보다 간결하고 효율적인 방법입니다. 또한 코드를 크게 수정하지 않고도 접기 수를 쉽게 변경하거나 다른 모델로 전환할 수 있습니다.
10.5 모델 선택을 위한 K-fold CV(L10: 모델 평가 3)
10.5 모델 선택을 위한 K-fold CV(L10: 모델 평가 3)
이전 두 동영상에서 모델 평가를 위한 k-겹 교차 검증에 대해 논의하고 몇 가지 코드 예제를 살펴보았습니다. 이제 모델 선택을 위한 k-겹 교차 검증에 초점을 맞출 것입니다. 모델 선택은 하이퍼파라미터를 조정하고 최고 성능의 하이퍼파라미터 설정을 선택할 수 있기 때문에 종종 k-겹 교차 검증의 일반적인 사용 사례입니다.
전체 프로세스는 다섯 단계로 요약할 수 있습니다. 그러나 슬라이드의 공간이 제한되어 있으므로 다음 슬라이드의 각 단계를 확대하여 자세한 내용을 제공하겠습니다. 5단계는 이전에 논의한 모델 선택을 위한 3중 홀드아웃 방법과 유사합니다.
1단계: 데이터를 교육 및 테스트 세트로 분할합니다. 이 단계는 이전과 동일하며 데이터 세트를 훈련용과 테스트용으로 두 부분으로 나눕니다. 지금은 훈련 세트에 초점을 맞출 것입니다.
2단계: k-폴드 교차 검증을 사용하여 다양한 하이퍼파라미터 설정으로 학습 알고리즘을 적용합니다. 결정 트리 알고리즘의 최대 깊이와 같은 각 하이퍼파라미터 설정은 k-겹 교차 검증을 사용하여 평가됩니다. 예를 들어 Ron Kohavi가 권장하는 대로 k=10인 k-겹 교차 검증을 사용할 수 있습니다. 이 단계에서는 각 하이퍼파라미터 설정에 대해 서로 다른 성능 추정치를 제공합니다.
3단계: 가장 성능이 좋은 모델을 선택합니다. k-폴드 교차 검증에서 얻은 성능 추정치를 기반으로 최상의 성능을 발휘하는 하이퍼파라미터 설정을 식별할 수 있습니다. 예를 들어 최대 깊이 5가 테스트된 값 중에서 가장 잘 수행된다는 것을 알 수 있습니다. 이 하이퍼파라미터 설정을 최고로 선택합니다.
4단계: 최상의 하이퍼파라미터 값을 가진 모델을 교육 데이터에 맞춥니다. 최상의 하이퍼파라미터 설정을 식별한 후 전체 훈련 데이터 세트와 선택한 하이퍼파라미터를 사용하여 모델을 재훈련합니다. 이를 통해 최상의 하이퍼파라미터 값을 가진 단일 모델을 확보할 수 있습니다.
5단계: 독립적인 테스트 세트에서 모델을 평가합니다. 모델의 일반화 성능을 추정하기 위해 학습 또는 하이퍼파라미터 선택 프로세스 중에 사용되지 않은 별도의 테스트 세트에서 모델을 평가합니다. 이는 모델 성능에 대한 편견 없는 평가를 제공합니다.
선택적으로 전체 데이터 세트에서 최상의 하이퍼파라미터 값으로 모델을 맞추는 추가 단계를 수행할 수 있습니다. 이 단계는 모델이 더 많은 데이터에 대해 훈련될 때 더 잘 수행될 수 있다는 가정을 기반으로 합니다.
선택 편향을 피하려면 독립적인 테스트 세트를 갖는 것이 중요합니다. 때로는 하이퍼파라미터 설정이 우연히 k-겹 교차 검증에서 잘 수행되어 지나치게 낙관적인 추정으로 이어질 수 있습니다. 독립적인 테스트 세트를 사용하면 모델 성능에 대한 보다 신뢰할 수 있는 평가를 얻을 수 있습니다.
이 절차는 모델 선택을 위한 k-겹 교차 검증을 요약합니다. 이제 모델 선택 또는 하이퍼파라미터 조정 단계에서 하이퍼파라미터를 선택하는 몇 가지 기술을 살펴보겠습니다.
일반적인 방법 중 하나는 널리 사용되는 그리드 검색입니다. 그리드 검색은 고려할 하이퍼파라미터 값 목록을 정의하는 철저한 검색 방법입니다. 예를 들어 k-최근접 이웃의 경우 3, 5, 6, 7, 8, 9와 같은 값 목록을 지정하여 k의 값을 조정할 수 있습니다. 그리드 검색은 각각에 대한 모델의 성능을 평가합니다. k-겹 교차 검증을 사용한 하이퍼파라미터 조합.
그리드 검색을 병렬로 수행할 수 있으므로 여러 하이퍼파라미터 조합을 동시에 평가할 수 있습니다. 그러나 모든 관련 하이퍼파라미터 값이 미리 정의된 그리드에 포함되지 않으면 적용 범위가 좋지 않을 수 있습니다. 이는 연속 하이퍼파라미터 또는 특정 값을 건너뛸 때 특히 문제가 됩니다.
적용 범위 문제를 해결하기 위해 무작위 검색은 분포에서 하이퍼파라미터 값을 샘플링하는 대체 접근 방식입니다. 고정 그리드를 지정하는 대신 균일, 정규, 지수, 베타 또는 이항 분포와 같은 분포를 정의하여 하이퍼파라미터 값을 샘플링할 수 있습니다. 무작위 검색은 하이퍼 매개변수 공간 탐색에 더 많은 유연성을 제공하며 잠재적으로 더 넓은 범위의 값을 포괄할 수 있습니다. 분포에서 샘플링하여 무작위 검색을 통해 하이퍼 매개변수 공간을 보다 효율적으로 탐색할 수 있습니다.
그리드 검색과 비교할 때 무작위 검색은 가능한 모든 조합을 평가하지 않기 때문에 계산적으로 더 효율적인 경우가 많습니다. 대신 하이퍼파라미터 값의 하위 집합을 무작위로 샘플링하고 k-겹 교차 검증을 사용하여 평가합니다. 반복 또는 샘플 수를 미리 지정할 수 있습니다.
무작위 검색의 장점은 특히 일부 하이퍼파라미터가 다른 하이퍼파라미터보다 덜 중요할 때 큰 하이퍼파라미터 공간을 효율적으로 검색할 수 있다는 것입니다. 또한 특정 그리드를 정의할 필요 없이 연속적이고 불연속적인 하이퍼파라미터를 처리할 수 있습니다.
그리드 검색과 무작위 검색 모두 장단점이 있습니다. 그리드 검색은 정의된 그리드 내의 모든 조합을 보장하지만 계산 비용이 많이 들고 대형 하이퍼파라미터 공간에는 적합하지 않을 수 있습니다. 반면에 무작위 검색은 더 효율적이지만 전체 범위를 보장하지는 않습니다.
실제로 그리드 검색과 무작위 검색 사이의 선택은 하이퍼 매개변수 공간의 크기, 사용 가능한 계산 리소스 및 당면한 특정 문제에 따라 달라집니다.
하이퍼파라미터 튜닝을 위한 또 다른 기술은 베이지안 최적화입니다. 베이지안 최적화는 하이퍼파라미터와 목적 함수(예: 모델 성능) 사이의 관계를 모델링하기 위해 확률 모델을 사용합니다. Gaussian Processes와 같은 대리 모델을 사용하여 목적 함수를 근사화하고 획득 함수를 사용하여 평가할 다음 하이퍼파라미터 값을 결정합니다.
베이지안 최적화는 대리 모델을 기반으로 하이퍼파라미터 값을 반복적으로 샘플링하고 평가된 성능을 기반으로 모델을 업데이트합니다. 하이퍼파라미터 공간의 유망한 영역에 대한 검색에 집중하여 보다 효율적인 탐색으로 이어집니다.
베이지안 최적화의 장점은 비볼록 및 비선형 목적 함수뿐만 아니라 연속 및 불연속 하이퍼파라미터를 모두 처리할 수 있다는 것입니다. 관찰된 성능에 적응하고 평가할 다음 하이퍼파라미터 값을 지능적으로 선택하여 잠재적으로 그리드 검색 또는 무작위 검색에 비해 더 적은 평가로 최적의 솔루션으로 수렴합니다.
그러나 베이지안 최적화는 특히 대규모 데이터 세트 또는 복잡한 모델의 경우 계산 비용이 더 높을 수 있습니다. 대리 모델을 업데이트하고 평가할 다음 하이퍼파라미터 값을 결정하려면 목적 함수를 여러 번 평가해야 합니다.
전반적으로 베이지안 최적화는 특히 하이퍼파라미터 공간이 복잡하고 목적 함수를 평가하는 데 비용이 많이 드는 경우 하이퍼파라미터 튜닝을 위한 강력한 기술입니다.
요약하면 k-겹 교차 검증은 모델 평가와 모델 선택 모두에 유용한 도구입니다. 이를 통해 다양한 모델의 성능을 추정하고 최상의 하이퍼파라미터 설정을 선택할 수 있습니다. 그리드 검색, 무작위 검색, 베이지안 최적화와 같은 기술을 사용하여 하이퍼파라미터를 조정하고 모델 성능을 향상시킬 수 있습니다. 방법의 선택은 하이퍼파라미터 공간의 크기, 계산 리소스 및 당면한 특정 문제와 같은 요인에 따라 달라집니다.
10.6 모델 평가를 위한 K-폴드 CV -- 코드 예제(L10: 모델 평가 3)
10.6 모델 평가를 위한 K-폴드 CV -- 코드 예제(L10: 모델 평가 3)
예, 모델 평가를 위한 k-겹 교차 검증에 대해 이야기했던 지난번과 같습니다. 이제 k-겹 교차 검증에 대한 몇 가지 코드 예제를 자세히 살펴보고 이번에는 모델 선택에 대해 살펴보겠습니다. GitHub에서 찾을 수 있는 몇 가지 코드 예제를 제공하겠습니다. 또한 코드 노트북을 다운로드하고 나중에 실험할 수 있도록 Piazza 및 Canvas에 링크를 포함할 것입니다.
자, 코드 노트북으로 들어가 봅시다. 평소와 같이 사용 중인 패키지의 버전 번호를 확인하기 위해 워터마크부터 시작합니다. 이 노트북에서는 하이퍼파라미터 튜닝 및 모델 선택에 정말 유용한 그리드 검색에 중점을 둘 것입니다. 이 데모에서는 홍채 데이터 세트에 의사 결정 트리 분류기를 사용합니다. iris 데이터셋이 가장 흥미롭지는 않을 수 있지만 이를 통해 작업을 단순하게 유지할 수 있습니다. 또한 더 복잡한 데이터 세트로 작업할 수업 프로젝트를 시작하기 전에 좋은 연습이 될 것입니다.
데이터 세트를 교육 및 테스트 세트로 분할하는 것으로 시작합니다. 데이터의 85%는 훈련에, 15%는 테스트에 사용합니다. 그리드 검색으로 이동하여 최대 깊이와 기준이라는 두 가지 하이퍼파라미터 옵션을 정의합니다. 최대 깊이는 의사 결정 트리의 최대 깊이를 나타내며 1, 2, 3, 4, 5 또는 없음(최대 깊이에 대한 제한 없음)으로 설정합니다. 기준은 분할의 품질을 측정하는 기능을 나타내며 "지니"와 "엔트로피"를 모두 평가합니다. 실제로 지니와 엔트로피 사이의 선택은 거의 차이가 없지만 데모 목적으로 포함합니다.
다음으로 하이퍼파라미터와 해당 값을 지정하는 파라미터 그리드를 생성합니다. 목록을 사용하는 대신 사전을 사용하여 다른 시나리오를 지정할 수도 있습니다. 예를 들어 다른 하이퍼파라미터의 모든 값을 탐색하면서 한 하이퍼파라미터의 특정 값을 하드코딩할 수 있습니다. 이 접근 방식은 충돌하는 매개변수 선택을 처리할 때 유용할 수 있습니다. 그러나 이 경우에는 충돌이 없으므로 목록으로 충분합니다.
교차 검증 접기(CV)의 수를 10으로 설정하여 10겹 교차 검증을 수행하려고 함을 나타냅니다. 계층화된 k-겹 교차 검증은 분류기에 사용되어 레이블의 비율이 각 접기에서 일정하게 유지되도록 합니다. 최상의 하이퍼파라미터 설정을 선택하는 데 사용되는 스코어링 메트릭은 분류자의 정확도와 회귀자의 R-제곱 점수입니다. 또한 실행할 병렬 작업 수를 -1로 설정하여 여러 작업을 병렬로 수행할 수 있습니다.
필요한 세부 정보를 모두 지정한 후 그리드 검색 개체를 데이터에 맞춥니다. 매개변수 그리드에 대한 철저한 검색을 수행하고 교차 검증을 사용하여 각 하이퍼 매개변수 조합의 성능을 평가합니다. 그리드 검색이 완료되면 각각 best_score_ 및 best_params_ 속성을 사용하여 최고 점수 및 해당 매개변수에 액세스할 수 있습니다. 이 경우 최고의 모델은 최대 깊이가 3이고 기준 "gini"가 있어 유효성 검사 접기에서 평균 96%의 정확도를 달성합니다.
관심이 있는 경우 모든 정보가 포함된 사전에 저장된 결과를 수동으로 검사할 수 있습니다. 여기서는 각 하이퍼파라미터 설정에 대한 유효성 검사 접기에 대한 평균 성능을 나타내는 평균 테스트 점수에 중점을 둡니다. 더 나은 가독성을 위해 매개 변수 설정과 함께 점수를 인쇄합니다.
선택적으로 ML 범위 라이브러리의 함수를 사용하여 결과를 히트맵으로 요약할 수 있습니다. 히트맵은 다양한 하이퍼파라미터 설정에 대한 성능을 시각적으로 보여줍니다. 이 경우 유사한 점수에서 알 수 있듯이 "지니"와 "엔트로피" 사이의 선택은 성능에 거의 영향을 미치지 않습니다. 최상의 성능은 최대 깊이 3과 기준 "gini"에서 달성됩니다.
최상의 하이퍼파라미터 설정을 얻은 후 이를 사용하여 전체 교육 데이터 세트에서 최종 모델을 교육할 수 있습니다. 이렇게 하면 모델 교육에 사용 가능한 모든 데이터를 활용할 수 있습니다. 우리는 새로운 결정 트리 분류기 개체를 만들고, 그리드 검색 중에 찾은 최상의 값으로 하이퍼 매개 변수를 설정하고, 모델을 교육 데이터에 맞춥니다.
모델이 훈련되면 테스트 데이터 세트에 대한 예측을 수행하고 성능을 평가할 수 있습니다. 이 예에서는 올바르게 분류된 인스턴스의 비율을 측정하는 정확도 점수를 계산합니다. 정확도 점수를 인쇄하고 이 경우 테스트 세트에서 93%의 정확도를 달성합니다.
전반적으로 그리드 검색을 통해 다양한 하이퍼파라미터 조합을 체계적으로 탐색하고 모델에 가장 적합한 구성을 선택할 수 있습니다. 하이퍼파라미터 튜닝 프로세스를 자동화하고 성능 향상을 위한 최적의 설정을 찾는 데 도움을 줍니다.
이것이 모델 선택 및 하이퍼파라미터 튜닝에 그리드 검색을 사용하는 기본 아이디어입니다. 물론 이것은 하나의 접근 방식일 뿐이며 무작위 검색, 베이지안 최적화 등과 같은 다른 기술을 사용할 수 있습니다. 방법의 선택은 특정 문제와 사용 가능한 리소스에 따라 다릅니다.
10.7 K-폴드 CV 1-표준 오차 방법(L10: 모델 평가 3)
10.7 K-폴드 CV 1-표준 오차 방법(L10: 모델 평가 3)
이전 논의에서 그리드 검색을 사용한 k-겹 교차 검증 및 모델 선택의 개념을 다루었습니다. 그러나 고려해야 할 또 다른 중요한 주제가 있습니다. 하나의 표준 오류 방법입니다. 이 방법은 여러 하이퍼파라미터 설정이 똑같이 잘 수행되는 상황에 직면하고 가장 적절한 것을 선택해야 하는 경우에 적합합니다.
유사하거나 동일한 성능을 가진 여러 하이퍼파라미터 설정이 있는 경우 선택할 항목을 결정하는 것이 중요해집니다. 기본적으로 scikit-learn은 동점이 있는 경우 목록에서 첫 번째 설정을 선택합니다. 그러나 하나의 표준 오차 방법은 절약의 원칙 또는 Occam의 면도날에 기반한 대체 접근 방식을 제공합니다. Occam의 면도날에 따르면 경쟁 가설이 똑같이 잘 수행되면 가정이 가장 적은 가설이 선호되어야 합니다.
하나의 표준 오차 방법을 적용하기 위해 수치적으로 최적인 추정치와 표준 오차를 고려합니다. k-겹 교차 검증을 통해 모델 선택을 수행한 후 다양한 하이퍼파라미터 설정에 대한 성능 추정치를 얻습니다. 이러한 설정 중에서 성능이 이전 단계에서 얻은 최고 성능 모델의 표준 오차 이내인 모델을 선택합니다.
이 방법을 설명하기 위해 scikit-learn으로 생성된 사각형과 삼각형으로 구성된 이진 분류 데이터 세트를 고려해 보겠습니다. 단순화를 위해 RBF 커널 SVM(Support Vector Machine)에 중점을 둘 것입니다. SVM에는 감마라는 하이퍼파라미터가 있어 각 훈련 예제의 영향을 제어합니다. 다양한 감마 값이 60%에서 90% 범위의 정확도를 가져오고 일부 설정은 유사한 성능을 나타냅니다.
SVM의 경우 결정 경계의 복잡도는 감마 값에 따라 달라집니다. 감마가 높을수록 결정 경계가 더 복잡해지고 감마가 낮을수록 결정 경계가 더 단순해집니다. 다른 감마 값에 대한 결정 경계를 플로팅하여 이를 관찰할 수 있습니다. 더 간단한 모델은 선형에 가까운 결정 경계를 갖는 반면, 더 복잡한 모델은 더 복잡한 모양을 나타냅니다.
그러나 여러 하이퍼파라미터 설정이 유사한 정확도를 산출할 때 가장 성능이 좋은 모델의 하나의 표준 오차 내에서 가장 간단한 모델을 선택하려고 합니다. 예를 들어, 가장 성능이 좋은 모델의 감마 값이 0.1인 경우 하나의 표준 오차가 0.1 이내인 감마 값을 가진 모델을 고려하고 복잡성이 가장 낮은 모델을 선택합니다.
하나의 표준 오류 방법에 항상 해당 논문이나 출판물이 있는 것은 아니라는 점은 주목할 가치가 있습니다. 단순성의 원칙에 기반한 실용적인 접근 방식이며 실무자들이 널리 채택했습니다. 이 방법에 대한 출판된 연구나 논문이 있다면 그 효과와 의미를 더 탐구하는 데 귀중한 추가 자료가 될 것입니다.
다음 비디오에서는 실제로 하나의 표준 오류 메서드를 구현하는 방법을 보여주는 코드 예제를 자세히 살펴보겠습니다.
10.8 K-폴드 CV 1-표준 오차 방법 -- 코드 예(L10: 모델 평가 3)
10.8 K-폴드 CV 1-표준 오차 방법 -- 코드 예(L10: 모델 평가 3)
이번 영상에서는 이전 영상에서 다뤘던 표준오차 방법 하나를 어떻게 구현했는지 자세히 설명드리겠습니다. 코드 예제를 따라가려면 이 링크에서 찾을 수 있습니다. 쉽게 액세스할 수 있도록 Canvas에도 게시할 예정입니다.
노트북을 함께 살펴봅시다. 첫째, 일반적으로 사용되는 재래식 수입품이 있습니다. 그런 다음 scikit-learn 라이브러리의 make_circles 함수를 사용하여 나만의 장난감 데이터 세트를 생성합니다. 이 기능을 사용하면 데이터 세트의 예 수와 노이즈 양을 지정할 수 있습니다. 그런 다음 생성된 데이터 세트는 교육 및 테스트 세트로 나뉩니다. 이 접근 방식은 임의의 대규모 데이터 세트에 대한 시뮬레이션 연구를 수행하여 다양한 학습 곡선과 모델 동작이 노이즈 및 교육 예제 수와 같은 다양한 매개 변수에 따라 어떻게 달라지는지 관찰하는 데 탁월합니다. 실험을 위한 유용한 테스트베드 역할을 합니다.
다음으로 SVM(Support Vector Machine)을 예로 사용합니다. 이 데모에서 SVM이 작동하는 방식을 완전히 이해할 필요는 없습니다. 나는 단순히 명확한 예로 그것을 선택했습니다. 다음 단계에는 하이퍼파라미터 설정 목록을 정의하고 이러한 값을 반복하는 수동 접근 방식이 포함됩니다. 그러나 더 복잡한 설정이 있는 경우 이전 비디오에서 논의된 ParamSampler를 사용할 수 있습니다.
이 데모에서는 단일 하이퍼파라미터를 사용하므로 목록과 for 루프를 사용하는 수동 접근 방식이면 충분합니다. 매개변수 목록을 초기화한 다음 각 값을 반복합니다. 반복할 때마다 선택한 하이퍼파라미터 설정으로 SVM 모델을 초기화합니다. 그런 다음 모델의 정확도를 평가하기 위해 k-겹 교차 검증을 수행합니다. 정확도 값이 수집되고 평균, 표준 편차 및 표준 오류가 계산됩니다. 표준 편차를 샘플 크기의 제곱근으로 나누어 표준 오차를 계산하는 데 사용하는 순진한 접근 방식은 k-겹 교차 검증의 라운드가 완전히 독립적이지 않기 때문에 최선의 방법이 아닐 수 있습니다. 그러나 서로 다른 방법을 비교하기 위해 유사성 또는 오차 막대의 일부 척도를 얻기 위해 이 접근 방식으로 충분합니다.
정확도 값을 수집한 후 샘플링이 기하급수적으로 이루어지기 때문에 로그 스케일로 플롯합니다. 결과 플롯은 다양한 하이퍼파라미터 설정에 대한 SVM 모델의 성능을 표시합니다. 이것은 우리가 강의 슬라이드에서 본 것과 일치합니다.
이 방법을 다른 분류기에 적용할 수 있음을 보여주기 위해 홍채 데이터 세트에 대한 의사 결정 트리 분류 코드도 제공합니다. 이 경우 의사 결정 트리의 최대 깊이 매개 변수를 1에서 10으로 변경합니다. 유사한 단계를 따릅니다. 하이퍼 매개 변수 설정으로 모델 초기화, 모델 피팅, 예측 만들기, k-폴드 교차 검증 점수 수집, 표준 오류 등. 서로 다른 최대 깊이에 대한 결정 경계를 분석하여 모델 복잡성과 성능 사이의 균형을 관찰할 수 있습니다. 이 특정 예에서는 하나의 표준 오류 방법을 사용하여 최대 깊이가 3인 의사 결정 트리를 선택합니다.
마지막으로 알고리즘 선택을 위한 교차 검증, 통계 테스트, 평가 지표 등 다음 강의에서 다룰 주제에 대해 간략하게 언급합니다. 이러한 주제는 이전 강의에서 논의된 개념과 밀접하게 관련되어 있습니다.
이 설명이 도움이 되셨기를 바랍니다. 좋은 주말 보내세요!