몇 백만 행과 ~ 100 열의 데이터 집합이 있습니다. 공통 클래스에 속하는 데이터 세트의 예제 중 약 1 %를 감지하고 싶습니다. 최소 정밀도 제약이 있지만 매우 비대칭 적 인 비용으로 인해 특정 리콜에 너무 열중하지 않습니다 (10 개의 긍정적 인 일치가 남지 않는 한)!
이 설정에서 권장 할 몇 가지 방법은 무엇입니까? (신문에 대한 링크, 환영하는 구현에 대한 링크)
답변
나는 그와 Garcia (2009) 가 불균형 수업 문제에 대한 학습에 대한 유용한 검토 인 것을 발견했습니다. 고려해야 할 몇 가지 사항은 다음과 같습니다.
데이터 기반 접근 방식 :
다수 클래스를 언더 샘플링하거나 소수 클래스를 오버 샘플링 할 수 있습니다. (Breiman은 이것이 비 균일 한 오 분류 비용을 할당하는 것과 공식적으로 동일하다고 지적했다.) 이것은 문제를 일으킬 수있다. 오버 샘플링은 과적 합의 위험을 증가시킵니다.
이러한 문제를 줄이는 “알려진 언더 샘플링”방법이 있습니다. 그중 하나는 대부분의 클래스에서 여러 하위 집합을 독립적으로 샘플링하고 각 하위 집합을 모든 소수 클래스 데이터와 결합하여 여러 분류 자를 만드는 EasyEnsemble 입니다.
SMOTE (Synthetic Minority Oversampling Technique) 또는 SMOTEBoost (SMOTE를 boosting과 결합) 는 피처 공간에서 가장 가까운 이웃을 만들어 소수 클래스의 합성 인스턴스를 만듭니다. SMOTE는 DMwR 패키지의 R로 구현되어 있습니다 (이 문서는 Luis Torgo의 저서 “R을 사용한 데이터 마이닝, 사례 연구를 통한 학습”CRC Press 2016과 함께 제공됨 ).
모델 피팅 접근법
손실 함수에 클래스 별 가중치를 적용하십시오 (소수자의 경우 더 큰 가중치).
트리 기반 접근법의 경우 Cieslak et al. 에서 주장한 것처럼 Hellinger 거리 를 노드 불순물 함수로 사용할 수 있습니다 . “헬 링거 거리 결정 트리는 강력하고 기울어지지 않습니다” ( Weka 코드는 여기에 있습니다 .)
하나의 클래스 분류기를 사용하여 (모델에 따라) 한 클래스의 확률 밀도 또는 경계를 학습하고 다른 클래스를 특이 값으로 처리하십시오.
물론, 정확성을 모델 구축의 지표로 사용하지 마십시오. 코헨의 카파는 합리적인 대안입니다.
모델 평가 접근법
모형이 예측 된 확률 또는 다른 점수를 반환하는 경우 오류를 적절히 절충 할 수있는 의사 결정 컷오프 (훈련 및 테스트와 독립적 인 데이터 집합 사용)를 선택했습니다. R에서 OptimalCutpoints 패키지는 컷오프를 결정하기 위해 비용에 민감한 알고리즘을 포함하여 여러 알고리즘을 구현합니다.
답변
본인은 이것이 머신 러닝 커뮤니티에서 활발한 연구 분야이며, 큰 해답이 아니라 점점 더 많은 잠재적 솔루션이 있다는 것입니다. 고려중인 특정 알고리즘을 지정하면 더 나은 답변을 얻을 수 있습니다.
파라 메트릭 모델 (로지스틱 회귀)을 사용하는 경우 이는 문제가되지 않으며 손실 함수 (가양 성 대 가양 성 비용)를 기준으로 임계 값을 변경할 수 있습니다.
기계 학습 알고리즘을 사용하는 경우 까다로울 수 있습니다. Max Kuhn은 “Applied Predictive Modeling”의 16 장에서이 문제를 요약하려고 노력합니다. 그러나 어려운 주제는 요약 할 수 있습니다. 이 책을 구매하지 않으려면이 장의 AppliedPredictiveModeling 패키지에서 R 코드를 사용할 수 있으며 R에 익숙한 알고리즘 및 사용 된 알고리즘에 따라 충분할 수 있습니다.
일반적으로 논의는 언더 샘플링 / 오버 샘플링 +/- 비용에 민감한 알고리즘을 중심으로 진행됩니다. jous-boost와 같은 변형도 가능합니다.
이러한 종류의 토론의 예 : Chen et al “임의의 숲을 사용하여 불균형 데이터 학습”
http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf
답변
scikit-learn의 구현을 살펴볼 수 있습니다. 클래스 가중치 사전 또는 ‘자동’의 값을 가질 수있는 class_ weight 인수에주의하십시오.
클래스 sklearn.svm.SVC (C = 1.0, 커널 = ‘rbf’, 정도 = 3, 감마 = 0.0, coef0 = 0.0, 축소 = 참, 확률 = 거짓, tol = 0.001, cache_size = 200, class_weight = None, verbose = 거짓, max_iter = -1, random_state = 없음)
클래스 가중치 사전 또는 ‘auto’일 수있는 class_weight 인수의 값으로 재생할 수 있습니다. ‘자동’모드에서 학습 알고리즘은 각 클래스 내의 샘플 수에 따라 각 클래스에 가중치를 자동으로 할당합니다.
scikit-learn에는 몇 가지 다른 분류 알고리즘이 있으며 그 중 일부는 클래스 가중치를 허용합니다.