머신러닝 알고리즘을 평가할 때 적합한 테스트 옵션을 선택하는 법

머신러닝 알고리즘을 평가할때 사용하는 테스트 옵션은 과도한 학습, 평범한 결과 또는 최상의 결과와의 차이를 의미 할 수 있습니다. 이 게시물에서는 알고리즘 평가 테스트 프로그램에서 사용할 수 있는 표준 테스트 옵션과 다음에 올바른 옵션을 선택하는 방법을 알아봅니다.


임의성

올바른 테스트 옵션을 선택하는 데 어려움의 원인은 임의성입니다. 대부분의(거의 모든) 머신러닝 알고리즘은 어떤 식으로든 임의성을 사용합니다. 임의성은 알고리즘에서 명시적일 수도 있고, 알고리즘을 훈련시키기 위해 선택된 데이터의 샘플에 있을 수도 있습니다.

이것은 알고리즘이 임의의 결과를 생성한다는 것을 의미하는 것이 아니라 약간의 노이즈 또는 분산이 있는 결과를 생성한다는 것을 의미합니다. 우리는 이러한 유형의 제한된 분산, 확률론적 및 이를 이용하는 알고리즘을 확률론적 알고리즘이라고 합니다.


동일한 데이터에 대한 학습 및 테스트

데이터 집합이 있는 경우 데이터 집합에서 모델을 학습한 다음 해당 데이터 집합에서 모델의 결과를 보고할 수 있습니다. 

알고리즘을 평가하는 이 접근 방식의 문제점은 실제로 데이터 세트에 대한 알고리즘의 성능을 알 수 있지만 모델이 훈련되지 않은 데이터 (소위 보이지 않는 데이터)에서 알고리즘이 어떻게 수행되는지에 대한 표시가 없다는 것입니다.

이는 모델을 사용하여 보이지 않는 데이터에 대한 예측을 수행하려는 경우에만 중요합니다.


분할 테스트

하나의 데이터 세트를 사용하여 보이지 않는 데이터에 대한 알고리즘의 성능을 학습하고 예측하는 간단한 방법은 데이터 세트를 분할하는 것입니다. 데이터 세트를 가져와서 학습 데이터 세트와 테스트 데이터 세트로 분할합니다. 예를 들어 훈련할 인스턴스의 66%를 임의로 선택하고 나머지 34%를 테스트 데이터 세트로 사용합니다.

알고리즘은 학습 데이터 세트에서 실행되고 테스트 데이터 세트에서 모델이 생성 및 평가되며 성능 정확도(예: 87%)를 얻을 수 있습니다.

스핏 테스트는 데이터가 많거나 모델 학습에 비용이 많이 드는 경우(리소스 또는 시간) 빠르고 유용합니다. 매우 큰 데이터 세트에 대한 분할 테스트는 알고리즘의 실제 성능에 대한 정확한 추정치를 생성할 수 있습니다.

데이터에 대한 알고리즘은 얼마나 좋은가요? 87%의 정확도를 달성할 수 있다고 자신 있게 말할 수 있습니까?

문제는 훈련 데이터 세트를 다른 66%/34% 분할로 다시 반환하면 알고리즘과 다른 결과를 얻을 수 있다는 것입니다. 이를 모델 분산이라고 합니다.


다중 분할 테스트

데이터 세트의 다른 분할에서 다른 결과를 얻는 분할 테스트 문제에 대한 해결책은 무작위 프로세스의 분산을 줄이고 여러 번 수행하는 것입니다. 상당한 수의 실행 (예 : 10)에서 결과를 수집하고 평균을 취할 수 있습니다.

예를 들어 데이터 세트를 66%/34% 분할하고 알고리즘을 실행하여 정확도를 얻었으며 10개의 다른 분할로 10번 수행했다고 가정해 보겠습니다. 정확도 점수는 87, 87, 88, 89, 88, 86, 88, 87, 88, 87과 같이 10개일 수 있습니다.

우리 모델의 평균 성능은 87.5이고 표준 편차는 약 0.85입니다.

여러 분할 테스트의 문제점은 일부 데이터 인스턴스가 학습 또는 테스트에 포함되지 않고 다른 데이터 인스턴스가 여러 번 선택될 수 있다는 것입니다. 그 결과 결과가 왜곡될 수 있으며 알고리즘의 정확성에 대한 의미 있는 아이디어를 제공하지 못할 수 있습니다.


교차 검증

정확도 점수의 분산을 줄이면서 각 인스턴스가 동일한 횟수만큼 훈련 및 테스트에 사용되도록 하는 문제에 대한 해결책은교차 검증을 사용하는 것입니다. 특히 k-폴드 교차 검증, 여기서 k는 데이터 세트에서 만들 분할 수입니다.

예를 들어 k=10(매우 일반적) 값을 선택해 보겠습니다. 이렇게 하면 데이터 세트가 10개 부분(10겹)으로 분할되고 알고리즘이 10번 실행됩니다. 알고리즘이 실행될 때마다 데이터의 90%에 대해 학습되고 10%에서 테스트되며, 알고리즘을 실행할 때마다 알고리즘이 테스트되는 데이터의 10%가 변경됩니다.

이 예제에서 각 데이터 인스턴스는 학습 인스턴스로 정확히 9번, 테스트 인스턴스로 1번 사용됩니다. 정확도는 평균과 표준 편차가 아니라 얼마나 많은 올바른 예측이 이루어졌는지에 대한 정확한 정확도 점수가 됩니다.

k-fold 교차 검증 방법은 데이터 세트에서 알고리즘의 성능을 평가하기 위한 이동 방법입니다. 알고리즘에 적합한 크기의 훈련 및 테스트 데이터 세트를 제공하는 k-값을 선택하려고 합니다. 너무 불균형하지 않습니다 (훈련 또는 테스트를 위해 너무 크거나 작음). 데이터가 많은 경우 데이터를 샘플링하거나 분할 테스트로 되돌려야 할 수 있습니다.

교차 검증은 보이지 않는 데이터에 대한 알고리즘 성능에 대한 편향되지 않은 추정치를 제공하지만 알고리즘 자체가 임의성을 사용하는 경우에는 어떻게 될까요? 알고리즘은 다른 난수 시드(의사 임의성 시퀀스의 시작)로 훈련될 때마다 동일한 훈련 데이터에 대해 다른 결과를 생성합니다. 교차 검증은 알고리즘 예측의 분산을 고려하지 않습니다.

또 다른 우려 사항은 교차 유효성 검사 자체가 임의성을 사용하여 데이터 세트를 k 겹으로 분할하는 방법을 결정한다는 것입니다. 교차 검증은 알고리즘이 서로 다른 접기 집합으로 수행되는 방식을 추정하지 않습니다.

이는 데이터 세트에서 알고리즘이 얼마나 강력한지 이해하려는 경우에만 중요합니다.


다중 교차 검증

알고리즘 자체의 분산을 설명하는 방법은 교차 검증을 여러 번 실행하고 각 실행에서 알고리즘 정확도의 평균과 표준 편차를 취하는 것입니다.

이렇게 하면 데이터 세트에 대한 알고리즘의 성능을 추정하고 성능이 얼마나 강력한지(표준 편차의 크기)를 추정할 수 있습니다.

알고리즘 A에 대한 하나의 평균 및 표준 편차와 알고리즘 B에 대한 다른 평균 및 표준 편차가 있고 서로 다른 경우(예: 알고리즘 A의 정확도가 더 높음) 차이가 의미가 있는지 어떻게 알 수 있습니까?

이는 알고리즘 간의 결과를 비교하려는 경우에만 중요합니다.


통계적 유의성

k-폴드 교차 검증을 여러 번 사용할 때 알고리즘 성능 측정값을 비교하는 솔루션은 통계적 유의성 테스트(예:스튜던트 t-검정)를 사용하는 것입니다.

k-폴드 교차 검증을 여러 번 실행한 결과는 숫자 목록입니다. 우리는 평균과 표준 편차를 사용하여 이러한 숫자를 요약하고 싶습니다. 이 숫자는 기본 모집단의 표본으로 생각할 수 있습니다. 통계적 유의성 검정은 질문에 답합니다: 동일한 모집단에서 두 표본을 추출합니까? (차이 없음). 대답이 “예”이면 평균과 표준 편차가 다르더라도 그 차이는 통계적으로 유의하지 않다고 할 수 있습니다.

통계적 유의성 테스트를 사용하여 여러 실행을 사용할 때 알고리즘 결과 간의 차이(또는 부족)에 의미를 부여할 수 있습니다(예: 서로 다른 난수 시드를 사용한 k-fold 교차 유효성 검사의 다중 실행). 결과에 대한 정확한 주장을 원할 때 가능합니다 (알고리즘 A가 알고리즘 B보다 우수하고 차이가 통계적으로 유의했습니다).

서로 다른 통계적 유의성 검정(모수 및 비모수적)과 해당 검정에 대한 매개변수(p-값)가 있기 때문에 이야기의 끝이 아닙니다. 여기까지 저를 팔로우했다면 이제 엄격한(게시 가능한!) 결과를 생성하기 위해 테스트 옵션을 선택하는 방법에 대해 충분히 알고 있기 때문에 여기에 선을 그을 것입니다.


요약

이 게시물에서는 머신러닝 알고리즘을 평가하기 위해 테스트 프로그램을 설계할 때 사용할 수 있는 기본 테스트 옵션의 차이점을 발견했습니다.

특히, 다음과 같은 유틸리티와 문제점을 배웠습니다.

  • 동일한 데이터 세트에 대한 학습 및 테스트
  • 분할 테스트
  • 다중 분할 테스트
  • 교차 검증
  • 다중 교차 검증
  • 통계적 유의성


확실하지 않은 경우 k-폴드 교차 검증(k=10)을 사용하고 데이터 세트의 알고리즘을 의미 있게 비교하려는 경우 통계적 유의성 테스트와 함께 여러 번의 k-폴드 교차 검증을 사용합니다.

네피리티
No Comments

Sorry, the comment form is closed at this time.