답변:
이것은 미니 배치를 취할 때 미니 배치에 양성 샘플이 포함될 가능성이 매우 적기 때문에 발생합니다. 그래서 그것은 부정적인 클래스의 패턴을 배우게 될 것이고, 몇 번의 에포크 후에 모든 것이 부정적인 클래스로 분류됩니다.
이러한 상황을 처리 할 수있는 두 가지 방법이 있습니다.
0.3 % ~ 99.7 %의 비율을 감안할 때 이는 매우 치우친 데이터 세트입니다. 1000 개의 샘플마다 3 개의 긍정적 인 클래스 샘플은 거의 없습니다. 더 긍정적 인 클래스를 가져 와서 데이터 세트의 균형을 유지해야한다고 말하고 싶습니다. 가서 가능한 많은 긍정적 인 샘플을 얻으십시오. 그런 다음보다 균형 잡힌 데이터 세트를 사용할 수 있습니다. 예를 들어 1000 개의 양수 샘플을 얻은 다음 임의의 1000 개의 음수 샘플 세트를 선택하고 분류기를 만들 수 있습니다. 이제 두 수업을 모두 배울 수 있어야합니다.
미니 배치 후 가중치를 업데이트 할 때는 가중치 오류 측정을 사용하십시오. 가중치는 미니 배치 동안 양성 및 음성 클래스의 샘플 수에 비례하여 업데이트됩니다. 현재 비율이 3 : 1000으로 주어진 현재 상황에서는이 트릭조차도 작동하지 않을 수 있습니다. 따라서 297 개의 양성 샘플을 얻고 1000 개의 음성 샘플과 결합하여 300 : 1000과 같은 비율을 얻을 수 있습니다. 그런 다음 300 : 1000 비율을 사용하면 각 클래스의 샘플 수를 기반으로 미니 배치 중에 오류에 가중치를 부여해야합니다. 이 작동합니다.
여기서 CNN을 사용하고 싶은 이유는 무엇입니까? 실제로 불균형 데이터를 처리하는 다른 모델을 고려 했습니까?
예를 들어 다음 두 가지 기술이 실제로 효과가 있다는 것을 알았습니다.
SMOTE Boosting이 포함 된 Random Forests : SMOTE
대다수 클래스를 언더 샘플링하고 소수 클래스를 조정 가능한 백분율로 오버 샘플링 하는 하이브리드 를 사용하십시오 . 훈련 세트에서 반응 변수의 분포에 따라이 백분율을 선택하십시오. 이 데이터를 RF 모델에 공급하십시오. RF에 대한 최상의 파라미터 설정을 찾으려면 항상 교차 검색을 수행하고 그리드 검색을 수행하십시오.
하이퍼 파라미터 최적화를 통한 XGBoost : 모델에 가장 적합한 파라미터 설정을 찾기 위해 교차 검증 또는 거드 검색을 수행합니다. 또한을 xgboost
사용하여 양수 및 음수 클래스의 균형을 맞출 수 있습니다 scale_pos_weight
. 전체 목록 은 매개 변수 설명서 를 참조하십시오 .
또한 작업 한 데이터 세트의 기울기 비율이 동일하고을 사용하여 감도 점수 0.941과 특이도 0.71을 얻을 수 있음을 추가해야합니다 xgboost
. 이는 모델이 진정한 긍정적 인 결과를 매우 정확하게 예측하고 있음을 의미합니다 나를 위해 잘.
(죄송합니다. 의견을 남길 수 없으며 평판이 충분하지 않으며 CNN을 선택한 이유를 알고 싶었습니다.)
불균형 데이터 세트는 모든 분야에서 공통적 인 문제이며 특히 컴퓨터 비전 및 CNN (Convolutional Neural Networks)에서 처리 한 문제와 관련이 없습니다.
이 문제를 해결하려면 소수 표본을 오버 샘플링하거나 다수 표본을 과소 표본 추출 (또는 둘 다)하여 데이터 집합의 균형을 조정해야합니다. 아마도 위에서 언급 한 것처럼 SMOTE (Synthetic Minority Over-sampling Technique) 알고리즘을 선택하는 것이 좋습니다. 여기 에서 서로 다른 오버 샘플링 알고리즘을 비교할 수 있습니다. Python 사용자 인 경우 imbalanced-learn 은 데이터 세트의 균형을 맞추기위한 많은 유용한 기술을 구현하는 훌륭한 라이브러리입니다.
반면에 이미지를 분류하려는 경우 데이터 세트 크기를 늘리는 좋은 방법은 데이터 세트 크기를 늘리는 것입니다 (예 : 유사한 이미지를 만들지 만 유사한 이미지는 있지만 원래 이미지와 관련하여 조금씩 회전 / 이동). 더 나은 균형을 이루기 위해 소수 계급을 늘리는 것이 유용한 경우가 있습니다. Keras ImageDataGenerator 클래스는이 목적을위한 좋은 도구입니다.