CNN (Convolutional Neural Networks)을 통해 불균형 데이터 세트를 분류하는 방법은 무엇입니까?


10

이진 분류 작업에서 불균형 데이터 세트가 있습니다. 양수 양 대 음수 양은 0.3 % 대 99.7 %입니다. 긍정과 부정 사이의 격차가 큽니다. MNIST 문제에 사용 된 구조로 CNN을 훈련하면 테스트 결과에서 높은 음수 비율이 나타납니다. 또한 훈련 오류 곡선은 처음에 몇 개의 에포크에서 빠르게 내려가지만 다음 에포크에서 동일한 값을 유지합니다.

이 문제를 처리하는 방법을 알려주시겠습니까? 감사!

답변:


10

이것은 미니 배치를 취할 때 미니 배치에 양성 샘플이 포함될 가능성이 매우 적기 때문에 발생합니다. 그래서 그것은 부정적인 클래스의 패턴을 배우게 될 것이고, 몇 번의 에포크 후에 모든 것이 부정적인 클래스로 분류됩니다.

이러한 상황을 처리 할 수있는 두 가지 방법이 있습니다.

  1. 0.3 % ~ 99.7 %의 비율을 감안할 때 이는 매우 치우친 데이터 세트입니다. 1000 개의 샘플마다 3 개의 긍정적 인 클래스 샘플은 거의 없습니다. 더 긍정적 인 클래스를 가져 와서 데이터 세트의 균형을 유지해야한다고 말하고 싶습니다. 가서 가능한 많은 긍정적 인 샘플을 얻으십시오. 그런 다음보다 균형 잡힌 데이터 세트를 사용할 수 있습니다. 예를 들어 1000 개의 양수 샘플을 얻은 다음 임의의 1000 개의 음수 샘플 세트를 선택하고 분류기를 만들 수 있습니다. 이제 두 수업을 모두 배울 수 있어야합니다.

  2. 미니 배치 후 가중치를 업데이트 할 때는 가중치 오류 측정을 사용하십시오. 가중치는 미니 배치 동안 양성 및 음성 클래스의 샘플 수에 비례하여 업데이트됩니다. 현재 비율이 3 : 1000으로 주어진 현재 상황에서는이 트릭조차도 작동하지 않을 수 있습니다. 따라서 297 개의 양성 샘플을 얻고 1000 개의 음성 샘플과 결합하여 300 : 1000과 같은 비율을 얻을 수 있습니다. 그런 다음 300 : 1000 비율을 사용하면 각 클래스의 샘플 수를 기반으로 미니 배치 중에 오류에 가중치를 부여해야합니다. 이 작동합니다.


여기에 최적의 비율이 무엇인지 아십니까? 3:10입니까 아니면 다른 것입니까?
Christopher

4

여기서 CNN을 사용하고 싶은 이유는 무엇입니까? 실제로 불균형 데이터를 처리하는 다른 모델을 고려 했습니까?

예를 들어 다음 두 가지 기술이 실제로 효과가 있다는 것을 알았습니다.

  • SMOTE Boosting이 포함 된 Random Forests : SMOTE대다수 클래스를 언더 샘플링하고 소수 클래스를 조정 가능한 백분율로 오버 샘플링 하는 하이브리드 를 사용하십시오 . 훈련 세트에서 반응 변수의 분포에 따라이 백분율을 선택하십시오. 이 데이터를 RF 모델에 공급하십시오. RF에 대한 최상의 파라미터 설정을 찾으려면 항상 교차 검색을 수행하고 그리드 검색을 수행하십시오.

  • 하이퍼 파라미터 최적화를 통한 XGBoost : 모델에 가장 적합한 파라미터 설정을 찾기 위해 교차 검증 또는 거드 검색을 수행합니다. 또한을 xgboost사용하여 양수 및 음수 클래스의 균형을 맞출 수 있습니다 scale_pos_weight. 전체 목록 은 매개 변수 설명서 를 참조하십시오 .

또한 작업 한 데이터 세트의 기울기 비율이 동일하고을 사용하여 감도 점수 0.941과 특이도 0.71을 얻을 수 있음을 추가해야합니다 xgboost. 이는 모델이 진정한 긍정적 인 결과를 매우 정확하게 예측하고 있음을 의미합니다 나를 위해 잘.

(죄송합니다. 의견을 남길 수 없으며 평판이 충분하지 않으며 CNN을 선택한 이유를 알고 싶었습니다.)


1

불균형 데이터 세트는 모든 분야에서 공통적 인 문제이며 특히 컴퓨터 비전 및 CNN (Convolutional Neural Networks)에서 처리 한 문제와 관련이 없습니다.

이 문제를 해결하려면 소수 표본을 오버 샘플링하거나 다수 표본을 과소 표본 추출 (또는 둘 다)하여 데이터 집합의 균형을 조정해야합니다. 아마도 위에서 언급 한 것처럼 SMOTE (Synthetic Minority Over-sampling Technique) 알고리즘을 선택하는 것이 좋습니다. 여기 에서 서로 다른 오버 샘플링 알고리즘을 비교할 수 있습니다. Python 사용자 인 경우 imbalanced-learn 은 데이터 세트의 균형을 맞추기위한 많은 유용한 기술을 구현하는 훌륭한 라이브러리입니다.

반면에 이미지를 분류하려는 경우 데이터 세트 크기를 늘리는 좋은 방법은 데이터 세트 크기를 늘리는 것입니다 (예 : 유사한 이미지를 만들지 만 유사한 이미지는 있지만 원래 이미지와 관련하여 조금씩 회전 / 이동). 더 나은 균형을 이루기 위해 소수 계급을 늘리는 것이 유용한 경우가 있습니다. Keras ImageDataGenerator 클래스는이 목적을위한 좋은 도구입니다.

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