3

나는 이진 분류를하고 싶은 5000 개의 행을 가진 피쳐 데이터 세트를 가지고 있습니다. 나는 2 개 급 벡터가 :불균형 데이터 세트 문제로 인한 이진 분류

Y1을 - 클래스 꽤 균형 (0-52%/1 48 %)

Y2 - 클래스가 (매우 불균형 0~90%/1 - 10 %)

데이터 세트를 교육 세트 (4,000 개 샘플)와 테스트 세트 (1,000 개 샘플)로 분할했습니다.

그럼, 데이터 집합 X 및 클래스 벡터 Y를 얻을 수있는 간단한 코드를 작성하고, len = 2 X number of minority class와 균형 잡힌 데이터 집합을 만들었습니다.

예를 들어 위의 교육 데이터 세트에서 90 %/10 % 클래스 벡터를 사용하면 400 1s와 3,200 0이되므로 클래스 1의 원본 400 샘플을 사용하여 새 800 샘플 데이터 세트를 만들고 400 개의 무작위로 선택된 클래스 0의 샘플은 균형을 이룹니다.

그래서 4,000 개의 샘플 불균형 교육 세트에서 800 개의 샘플 균형 데이터 세트를 얻고 학습 알고리즘을 교육하는 데 사용합니다.

그런 다음 추가 1,000 개의 샘플 (테스트 세트)에서 생성 된 모델을 사용합니다.

밸런스 코드는 균형 벡터와 균형이 맞지 않은 코드 모두에서 실행되었습니다 (밸런스 클래스 벡터에서는 필요하지 않지만).

균형 클래스 벡터를 사용하는 경우, 나는 1000 샘플 테스트 세트에 대한이 혼란 매트릭스를 얻을 :

[339 126 

288 246] 

    precision recall f1-score support 

0.0  0.54  0.73  0.62  465 
1.0  0.66  0.46  0.54  534 
avg/total 0.61 0.59 0.58 999 

불균형 클래스 벡터를 사용하는 경우, 나는 1000 샘플 테스트 세트에 대한이 혼란 매트릭스를 얻을 :

[574 274 

73 78] 

    precision recall f1-score support 

0.0  0.89  0.68  0.77  848 
1.0  0.22  0.52  0.31  151 
avg/total 0.79 0.65 0.70 999 

자세히 알 수 있듯이 클래스 1의 정밀도는 매우 낮습니다.

밸런스 데이터 세트 (예 : 언더 샘플링, 클러스터 중심 또는 SMOTE SVM을 사용한 오버 샘플링)를 만들기 위해 패키지 imbalanced-learn에서 여러 알고리즘을 사용했지만 결과는 항상 동일합니다. 즉 클래스 1의 정밀도 (소수 계층)은 매우 낮게 유지됩니다.

그런 상황에서 어떤 조언을 해주시겠습니까? 필자의 목표는 불균형 클래스 벡터에서 클래스 1의 정밀도를 균형 클래스 벡터와 마찬가지로 약 0.6으로 가져오고 시도하는 것입니다.

+0

비슷한 상황이 발생했습니다. 해결책을 찾았습니까? – Charlotte

답변

0

당신의 자리에서 나는 과소 대표층에 비례하여 더 큰 무게를 둘 것입니다. XGBoost은 훌륭한 모델을 만들기 위해 재생할 수있는 다양한 매개 변수 세트를 제공합니다. This article에서 파이썬에 대해 자세히 설명합니다. 구체적으로 scale_pos_weight 매개 변수를 확인하십시오.

또한 모델의 정확성을 평가하는 유효성 검사 집합을 추가하는 것도 고려해 볼 수 있습니다.