1

두 클래스 분류 문제를 가정 해 보겠습니다. 하나의 클래스는 95 % 이상의 레이블 데이터를 가지고 있고, 다른 클래스는 5 %의 레이블 데이터를 가지고 있습니다. 두 클래스는 매우 편향되어 있습니다.바이어스 된 데이터 세트에 대한 정밀도 및 리콜

다른 분류기를 평가하기 위해 클래스 유효성 검사를하고 있는데, 분류기가 다른 클래스의 예측 결과가 정확하지 않더라도 정확도/회수율에서 과반수 (95 %)의 레이블을 예측하는 경우 의도적으로 발견했습니다. 다른 클래스는 5 %의 레이블이 지정된 데이터 만 있기 때문에 구별하기가 어렵습니다.

다음은 사용중인 방법/측정 항목 (정밀도/리콜 사용)입니다. 마이너 5 % 클래스를 고려하여 평가할만한 다른 우수한 메트릭이나 메소드가 있다면 궁금합니다. 마이너 5 % 클래스에 가중치를 지정하지만, 여기서는 편향된 데이터 세트를 측정하는보다 체계적인 방법을 요청합니다.

scikit learn + python 사용 2.7.

scores = cross_validation.cross_val_score(bdt, X, Y, cv=10, scoring='recall_weighted') 
print("Recall: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) 
scores = cross_validation.cross_val_score(bdt, X, Y, cv=10, scoring='precision_weighted') 
print("Precision: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) 
+1

왜 이런 종류의 질문을 계속 게시 하시겠습니까? 그들은 http://stats.stackexchange.com/ – Merlin

+0

에 속해 있습니다. @Merlin, 저는'stats'에게 할 수 있습니다, 아이디어를 주셔서 감사합니다. 나는 여기에 더 많은 전문가를 느낀다. :)) –

+1

이후, 당신은 그것을 얻지 않는 것 같습니다. 귀하의 질문은 비공개입니다. 링크를 참조하십시오. http://stackoverflow.com/help/on-topic – Merlin

답변

4

이것은 통계에서 일반적인 문제이므로 인터넷에서 많은 리소스를 찾을 수 있습니다. 예 : 8 Tactics To Combat Imbalanced Training Data을 확인하십시오.

아마도 가장 쉬운 방법은 데이터를 다시 샘플링하는 것입니다. 가장 간단한 방법은 두 클래스가 동등하게 표현 될 때까지 소수 클래스를 복제하는 것입니다. 통계적으로 더 건전한 접근법은 클래스 도달 범위 확률 분포를 먼저 배운 다음 모든 클래스에 대해 n 개의 샘플을 그립니다. 따라서 균형 잡힌 데이터 집합을 갖게됩니다.

물론 이것은 데이터에 따라 달라지며 데이터의 편향된 부분 집합을 통해서만 학습 할 수 있습니다. 추가 옵션은 문서를 참조하십시오.

+0

감사합니다 마틴, 무슨 뜻입니까? 계층화 된 샘플링을 사용하더라도 대다수의 클래스를 여전히 얻습니다. 다른. –

+0

고마워 마틴, "통계적으로 더 건전한 접근법은 먼저 수업 도달 범위에 대한 확률 분포를 배우는 것입니다. 그리고 나서 모든 경우에 대해 n 개의 샘플을 그려야합니다. 수업"? –

+0

또 다른 바보 같은 질문은 scikit-learn이 정밀도와 리콜을 계산할 때 (위의 코드를 참조하십시오), 각 클래스의 평균 정밀도와 리콜을 계산하는 것입니다. 즉, 한 클래스의 예측이 고정밀/리콜이면 다른 클래스는 상대적으로 낮은 정밀도/리콜을 가지며 최종 결과는 여전히 괜찮습니다. –