기능 수가 증가하면 정확도가 떨어지지 만 pre / recall이 증가합니다.


15

저는 머신 러닝을 처음 사용합니다. 현재 NLTK와 python을 사용하여 작은 클래스의 텍스트를 양, 음 또는 중립으로 분류하기 위해 Naive Bayes (NB) 분류기를 사용하고 있습니다.

300,000 개의 인스턴스 (16,924 긍정 7,477 네거티브 및 275,599 개의 중립)로 구성된 데이터 세트를 사용하여 일부 테스트를 수행 한 후 피처 수를 늘리면 정확도는 떨어지지 만 포지티브 및 네거티브 클래스의 정밀도 / 호출은 증가한다는 것을 알았습니다. 이것이 NB 분류기의 정상적인 동작입니까? 더 많은 기능을 사용하는 것이 더 나을 것이라고 말할 수 있습니까?

일부 데이터 :

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

미리 감사드립니다 ...

2011/11/26 수정

Naive Bayes 분류기로 3 가지 기능 선택 전략 (MAXFREQ, FREQENT, MAXINFOGAIN)을 테스트했습니다. 먼저 정확도와 클래스 당 F1 측정 값이 있습니다.

여기에 이미지 설명을 입력하십시오

그런 다음 상위 100 및 상위 1000 기능과 함께 MAXINFOGAIN을 사용할 때 증분 훈련 세트로 열차 오류 및 테스트 오류를 ​​플로팅했습니다.

여기에 이미지 설명을 입력하십시오

따라서 FREQENT를 사용하면 가장 높은 정확도를 얻을있지만 최상의 분류기는 MAXINFOGAIN을 사용하는 분류기입니다. 맞 습니까? 상위 100 개의 기능을 사용하는 경우 편향이 있으며 (테스트 오류는 기차 오류에 가깝습니다) 더 많은 교육 예제를 추가해도 도움이되지 않습니다. 이를 개선하려면 더 많은 기능이 필요합니다. 1000 개의 기능으로 바이어스가 줄어들지 만 오류가 증가합니다. 더 많은 기능을 추가해야합니까? 나는 이것을 어떻게 해석 해야할지 모르겠다 ...

다시 한번 감사드립니다 ...


1
"최상의 분류기"의 의미에 따라 달라집니다. 작업이 전체적으로 좋은 분류기를 작성하는 경우 FREQENT를 선택합니다. 반면에, 대부분의 레어 클래스 분류 작업에서와 같이 드문 클래스 ( "네거티브"또는 "포지티브"클래스 일 수 있음)를 더 잘 분류하려면 MAXINFOGAIN을 선택합니다. 나는 당신의 학습 곡선 해석이 정확하다고 생각합니다 .100 개의 기능으로 편향이 있고 추가 할 수 있습니다 .1000으로 분산이 있으며 제거 할 수 있습니다. 더 나은 결과를 얻기 위해 100에서 1000 개의 기능 사이에서 균형을 맞출 수 있습니다.
시몬

도와 주셔서 감사합니다, Simone! 마지막 부분을 제외한 모든 내용을 이해했습니다. 1000 가지 기능을 사용하여 어떻게 높은 차이를 볼 수 있습니까? 테스트 오류와 기차 오류의 차이는
그리 나쁘지

답장에 몇 가지 예를 들었습니다. 곡선이 너무 가깝지 않으면 문제는 분산이 높은 것으로 분류됩니다 . 귀하의 경우, 기능이 적을수록 성능이 향상되므로 기능이 1000 개이면 분산이 큰 문제가 될 수 있습니다. 트레이닝 세트에서 계산 된 측정 값으로 피쳐 선택 알고리즘의 결과를 플롯하는 대신 트레이닝 (2/3)에서 데이터를 분할하고 검증 한 다음 트레이닝 세트에서 피쳐 선택을 수행하고 테스트 세트에서 평가하십시오. . 줄거리 중간에 최대 값을 찾아야합니다.
Simone

답장을 보내 주셔서 감사합니다. 업데이트 된 게시물의 세 번째 예 (좋은 결과, 기차, 테스트 오류 곡선이 너무 가깝거나 너무 멀지 않음)는 1000 개의 기능을 사용하여 그린 학습 곡선과 같으므로 약 1000 개의 기능을 사용하는 것이 "좋은 결과"라고 생각했습니다. 그러나이 경우 오류가 더 높으므로 좋지 않습니다. 그러나 곡선 사이의 거리를 살펴보면 1000 가지 기능으로 높은 분산을 볼 수 없습니다 ... (이미, 이미 훈련 세트로 2/3, 테스트 세트로 1/3, 데이터를 수행하여 데이터를 분할하고 있습니다. 훈련 세트 선택 및 테스트 세트 평가 ...)
kanzen_master 1

1
확인. 저는 학습 곡선에 익숙하지 않아서 여러분의 예가 정말 흥미 로웠으며 이에 대한 통찰력을 얻었습니다. 따라서 D T 덕분에 그렇습니다. 두 경우 모두 편견이있을 수 있습니다. 저에 따르면, 매우 치우친 데이터 세트를 가지고 있으며 정확도를 테스트하는 대신 F- 측정을 살펴 보는 것이 중요합니다. 당신의 음모를 살펴보면, 더 많은 기능을 가질수록 더 좋습니다. 실제로 F 측정이 향상됩니다. 텍스트 분류에서 기능이 텍스트의 단어 빈도 인 경우 많은 기능을 사용하는 것이 일반적입니다. 나는 그것에 익숙하지 않으며 더 말할 수 없다.
Simone

답변:


18

정확도 대 F- 측정

우선 메트릭을 사용할 때는 게임 방법을 알아야합니다. 정확도는 모든 클래스에서 올바르게 분류 된 인스턴스의 비율을 측정합니다. 즉, 한 클래스가 다른 클래스보다 더 자주 발생하면 결과적인 정확도는 지배 클래스의 정확도에 의해 분명하게 지배됩니다. 귀하의 경우 모든 인스턴스에 대해 "중립"을 예측하는 모델 M을 구성하면 결과 정확도는 다음과 같습니다.

=이자형아르 자형(이자형아르 자형+영형에스나는나는V이자형+이자형나는V이자형)=0.9188

좋지만 쓸모가 없습니다.

따라서 기능을 추가하면 클래스를 차별화하는 NB의 힘이 분명히 향상되었지만 "긍정적"과 "부정적"을 예측함으로써 중립을 분류하지 못하여 정확도가 떨어집니다 (대략 말하기). 이 동작은 NB와 무관합니다.

더 많거나 적은 기능?

일반적으로 더 많은 기능을 사용하는 것이 아니라 올바른 기능을 사용하는 것이 좋습니다. 기능 선택 알고리즘이 최적의 부분 집합을 찾기 위해 더 많은 선택을 제공하는 한 더 많은 기능이 더 좋습니다 (여기서 살펴볼 것을 제안합니다 : 교차 검증의 기능 선택 ). NB와 관련하여, 빠르고 견고하지만 최적의 방법은 InformationGain (Ratio)을 사용하여 기능을 내림차순으로 정렬하고 상위 k를 선택하는 것입니다.

이 정보 (InformationGain 제외)는 분류 알고리즘과 무관합니다.

편집 27.11.11

올바른 수의 피처를 선택하기위한 바이어스 및 분산과 관련하여 많은 혼동이있었습니다. 그러므로이 튜토리얼의 첫 페이지 인 Bias-Variance tradeoff 를 읽는 것이 좋습니다 . 핵심은 다음과 같습니다.

  • 높은 편향 은 모형이 최적보다 작다는 것을 의미합니다. 즉, 시몬이 말한 것처럼 테스트 오류가 높음 (부적합)
  • 높은 분산 은 모델이 모델 을 작성하는 데 사용 된 샘플에 매우 민감 하다는 것을 의미 합니다 . 즉, 오류는 사용 된 훈련 세트에 따라 크게 달라 지므로 오류의 분산 (다른 교차 검증 배에 걸쳐 평가됨)은 매우 다릅니다. (과적 합)

플롯 된 학습 곡선은 실제로 오류가 표시되기 때문에 바이어스를 나타냅니다. 그러나 오차의 신뢰 구간이 전혀 표시되지 않으므로 분산은 볼 수 없습니다 .

예 : 3 배 교차 검증을 6 번 수행 할 때 (예, 다른 데이터 분할을 통한 반복이 권장되며 Kohavi는 6 회의 반복을 제안합니다) 18 개의 값을 얻습니다. 나는 지금 그것을 기대할 것이다 ...

  • 특징 수가 적 으면 평균 오차 (바이어스)가 낮아 지지만 오차 (18 개 값)의 편차가 커집니다.
  • 피처 수가 많을수록 평균 오차 (바이어스)는 높아지지만 오차 (18 개 값)의 편차는 낮아집니다.

오류 / 바이어스의 이러한 동작은 플롯에서 볼 수있는 것과 정확히 같습니다. 우리는 차이에 대해 진술 할 수 없습니다. 곡선이 서로 가깝다는 것은 테스트 세트가 훈련 세트와 동일한 특성을 나타내기에 충분히 커서 측정 된 오차가 신뢰할 수 있음을 나타낼 수 있지만, (적어도 내가 이해하는 한) 분산에 대해 설명하기에 충분하지 않습니다 (오류의!).

점점 더 많은 교육 예제를 추가 할 때 (테스트 세트의 크기를 고정 된 상태로 유지) 두 접근 방식 (작고 많은 수의 기능)의 분산이 감소 할 것으로 예상합니다.

아, 그리고 훈련 샘플의 데이터만을 사용하여 기능 선택에 대한 정보 이득을 계산하는 것을 잊지 마십시오 ! 하나는 기능 선택을 위해 완전한 데이터를 사용하고 데이터 파티셔닝을 수행하고 교차 검증을 적용하려는 유혹이 있지만, 이는 과적 합으로 이어질 것입니다. 나는 네가 한 일을 모른다. 이것은 결코 잊어서는 안되는 경고 일 뿐이다.


1
답장을 보내 주셔서 대단히 감사합니다. 기능 선택 전략으로 최대 정보 획득을 사용하고 5 배 교차 검증을 사용한 테스트입니다. 어떤 상위 k 기능을 사용 해야하는지 알기 위해서는 매번 기능 수를 증가시키는 알고리즘을 반복적으로 테스트하고 가장 높은 f_score를 제공하는 k를 사용하는 것이 필요합니다. 그러나 데이터 세트에 따라 "top k"가 변경 될 수 있습니다.
kanzen_master

1
옳은. 그러나 새 데이터 세트가 이전 데이터 세트와 동일한 경우 (분포가 동일한 동일한 피쳐) k는 동일하게 유지됩니다. 유전 알고리즘을 추가하여 가능한 솔루션의 공간을 더 빨리 검색하거나 유전 알고리즘을 사용하여 InformationGain과 독립적으로 최적의 기능 하위 집합을 찾을 수 있습니다.
steffen

1
스탠포드의 강의에 따르면, 훈련 예제 수에 따라 훈련과 테스트 곡선이 잘 분리되어있는 경우 실제로 차이가 있음을 의미합니다. 물론 더 좋은 방법은 신뢰 구간을 추정하는 것입니다.
Simone

1
@ DT 1. 나는 강의를 모른다. 그래서 Andrewg의 설명을 나의 것과 연결할 수 없다. 죄송합니다. 2. 아니오. 적은 수의 기능 => 과적 합 => 낮은 바이어스, 높은 분산. 많은 수의 기능 => 언더 피팅 => 높은 바이어스, 낮은 분산. 나는 다른 수의 기능과 훈련 예제에 대해 cv-folds 오류의 분산을 플롯하는 것이 좋습니다.
steffen

2
1. steffen, 강의는 여기에서 가능합니다 : ml-class.org/course/video/preview_list (파트 X, "학습 곡선"섹션) 2. 알겠습니다 . 훈련 중에 배운 많은 기능이 모델이 복잡해지고 훈련 세트를 과도하게 맞출 때 => 편차 ...
kanzen_master

5

더 많은 기능을 사용하는 것이 유용한 지 알기 위해 학습 곡선을 그릴 것입니다. :이 분명히 당신이 여기에서 찾을 수 있습니다 "기계 학습을 적용하기위한 조언"라는 스탠포드의 기계 학습 클래스의 10 단위에서 설명 생각 http://www.ml-class.org/course/video/preview_list .

학습 곡선을 플로팅하면 문제가 치우침이 심한 지 또는 분산이 큰지 이해할 수 있습니다. 학습 예제 수를 늘리면 학습 오류테스트 오류 (예 : 1- 정확도)를 플롯해야 합니다. 후자는 다른 데이터 세트에서 추정 된 분류기의 오류입니다. 이러한 곡선이 서로 가깝다면 바이어스 문제가 많고 더 많은 피쳐를 삽입하는 것이 좋습니다. 반면에 훈련 예제의 수를 늘리기 만하면 곡선이 상당히 분리되면 편차 문제가 발생합니다. 이 경우 사용중인 기능 수를 줄여야합니다.

편집하다

λ

λ

높은 분산

λ

높은 편견

λ=1

좋은 결과


큰! 대단히 감사합니다! 두 답변이 모두 도움이되었지만 두 답변 모두 답장으로 표시 할 수 없으므로 첫 번째 답변을 답변으로 표시합니다. 그러나 이것은 확실히 확인하는 가장 좋은 방법이라고 생각합니다.
kanzen_master

그건 그렇고, 최대 정보 획득 점수와 함께 상위 100 가지 기능을 사용하는 분류기의 학습 곡선을 그리려고합니다. 훈련 데이터 세트 크기를 늘리는 동안 훈련 오류와 테스트 오류를 ​​플롯하고 싶습니다. 초기 열차 데이터 세트 (점진적으로 증가) 및 테스트 데이터 세트 (모든 테스트에 대해 정적)의 크기는 어느 것입니까? 다시 감사합니다 ...
kanzen_master 16:25

2
훈련 세트와 테스트 세트에서 데이터 세트를 분할하십시오. 최소한의 교육 레코드부터 시작하여 레코드를 계속 추가하십시오. 모든 반복에 대해 분류자를 학습하는 데 사용한 레코드로 학습 세트 오류를 ​​계산 한 다음 항상 모든 테스트 레코드로 테스트 세트 오류를 ​​계산하십시오. 나는 이것이 일반적인 실천에 사용되는 표준 방법이라는 것을 알고 있습니다. 결과를 보는 것이 흥미로울 것입니다! 건배, 시몬.
시몬

1
Simone, 정확성, f1 측정 및 학습 곡선의 결과와 맨 아래의 해석으로 첫 번째 게시물을 업데이트했습니다. 감사합니다 ...
kanzen_master
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.