SVM으로 불균형 멀티 클래스 데이터 세트를 처리하는 가장 좋은 방법


9

상당히 불균형 한 데이터에서 SVM을 사용하여 예측 모델을 작성하려고합니다. 레이블 / 출력에는 양, 중, 음의 세 가지 클래스가 있습니다. 긍정적 인 예는 내 데이터의 약 10-20 %, 중립 약 50-60 %, 음의 약 30-40 %를 말합니다. 수업 중 잘못된 예측과 관련된 비용이 같지 않기 때문에 수업의 균형을 맞추려고합니다. 한 가지 방법은 훈련 데이터를 리샘플링하고 원래보다 큰 동일하게 균형 잡힌 데이터 세트를 생성하는 것입니다. 흥미롭게도, 그렇게하면 다른 클래스에 대한 더 나은 예측을 얻는 경향이 있습니다 (예를 들어 데이터의 균형을 잡을 때 긍정적 클래스의 예제 수를 늘 렸지만 샘플 예측에서 부정적인 클래스가 더 좋았습니다). 누구나 왜 이런 일이 발생하는지 설명 할 수 있습니까? 음수 클래스의 예제 수를 늘리면 샘플 예측 (예 : 더 나은 예측)에서 양수 클래스와 비슷한 것을 얻을 수 있습니까?

또한 잘못된 분류에 다른 비용을 부과하거나 LibSVM의 클래스 가중치를 사용하여 불균형 데이터를 처리하는 방법에 대한 다른 생각에 대해서도 매우 개방적입니다 (그러나 올바르게 선택 / 조정하는 방법은 확실하지 않음).

답변:


6

데이터를 리샘플링하는 것보다 각 클래스의 패턴에 대한 여유 여유 변수에 대해 서로 다른 처벌을받는 것이 더 나은 방법입니다. 어쨌든 리샘플링과 거의 동일하지만 불연속이 아닌 구현 및 연속성이 더 뛰어나므로 더 많은 제어가 가능합니다.

그러나 가중치를 선택하는 것은 간단하지 않습니다. 원칙적으로 오 분류 비용과 훈련 간의 차이점을 고려한 이론적 가중치를 사용하여 운영 사전 등급 확률을 설정할 수 있지만 최적의 성능을 제공하지는 않습니다. 가장 좋은 방법은 교차 유효성 검사에 의한 손실 (오 분류 비용 고려)을 최소화하여 각 클래스에 대한 처벌 / 무게를 선택하는 것입니다.


이를 수행하는 방법에 대한 자동화 된 방법이 있습니까, 아니면이 기능을 통합 한 학습자가 있습니까?
Vam

보통 matlab 함수를 작성하여 특정 처벌 세트의 손실을 평가 한 다음 Nelder-Mead 심플 렉스 알고리즘을 사용하여 최소화합니다. 나는이 내장되어있는 라이브러리를 알지 못한다.
Dikran 유대류에게

@DikranMarsupial 2 클래스 문제에서 2 개의 마진 여유 변수에 대한 그리드 검색이 단일 알고리즘으로 수행하는 것과 동일합니까?
Spacey

@Tarantula 예, 정확한 최적화 방법은 비교적 중요하지 않습니다. 요점은 응용 프로그램의 목적에 실제로 관심이있는 교차 유효성 검사 통계를 최적화하는 것입니다 (예 : 운영 용도에서 발생하는 것과 동일한 클래스 빈도) 알려진 경우 오 분류 비용을 고려).
Dikran Marsupial
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.