분류기의 정확도를 높이는 방법?


17

임의의 나무와 다른 분류자를 실험하기 위해 OpenCV letter_recog.cpp 예제를 사용하고 있습니다. 이 예제에는 랜덤 트리, 부스팅, MLP, kNN, 순진한 베이 즈 및 SVM의 6 가지 분류 기가 구현되어 있습니다. 20000 개의 인스턴스와 16 개의 기능이 포함 된 UCI 문자 인식 데이터 세트가 사용되며 교육 및 테스트를 위해 절반으로 나눕니다. SVM에 대한 경험이 있으므로 인식 오류를 3.3 %로 빠르게 설정했습니다. 몇 가지 실험 후 내가 얻은 것은 다음과 같습니다.

UCI 문자 인식 :

  • RTrees-5.3 %
  • 부스트-13 %
  • MLP-7.9 %
  • kNN (k = 3)-6.5 %
  • 베이 즈-11.5 %
  • SVM-3.3 %

사용 된 매개 변수 :

  • RTrees-max_num_of_trees_in_the_forrest = 200, max_depth = 20, min_sample_count = 1

  • 부스트-boost_type = REAL, weak_count = 200, weight_trim_rate = 0.95, max_depth = 7

  • MLP-method = BACKPROP, param = 0.001, max_iter = 300 (기본값-실험하기에는 너무 느림)

  • kNN (k = 3)-k = 3

  • 베이 즈-없음

  • SVM-RBF 커널, C = 10, 감마 = 0.01

그 후 동일한 매개 변수를 사용하고 그라디언트 기능을 먼저 추출하여 Digits 및 MNIST 데이터 세트에서 테스트했습니다 (벡터 크기 200 요소).

숫자 :

  • RTrees-5.1 %
  • 부스트-23.4 %
  • MLP-4.3 %
  • kNN (k = 3)-7.3 %
  • 베이 즈-17.7 %
  • SVM-4.2 %

MNIST :

  • RTrees-1.4 %
  • 부스트-메모리 부족
  • MLP-1.0 %
  • kNN (k = 3)-1.2 %
  • 베이 즈-34.33 %
  • SVM-0.6 %

나는 SVM과 kNN을 제외한 모든 분류 자에 익숙하지 않다.이 두 가지에 대해 결과가 좋아 보인다고 말할 수있다. 다른 사람들은 어떻습니까? 랜덤 트리에서 더 많은 것을 기대했는데 MNIST kNN에서 더 나은 정확성을 제공합니다. 부스트와 베이는 매우 낮은 정확도를 제공합니다. 결국이 분류기를 사용하여 다중 분류기 시스템을 만들고 싶습니다. 어떤 충고?

답변:


9

차원 축소

또 다른 중요한 절차는 훈련 및 테스트 데이터 세트의 오류율을 비교하여 초과 치 ( "차원의 저주"때문에) 여부를 확인하는 것입니다. 예를 들어, 테스트 데이터 세트의 오류율이 훈련 데이터 세트의 오류보다 훨씬 큰 경우 이는 하나의 지표가됩니다.
이 경우 PCA 또는 LDA와 같은 차원 축소 기술을 시도 할 수 있습니다.

관심이 있으시면 여기 PCA, LDA 및 기타 기술에 대해 썼습니다 : http://sebastianraschka.com/index.html#machine_learning 및 내 GitHub 저장소 : https://github.com/rasbt/pattern_classification

교차 검증

또한 분류기의 성능을보다 객관적인 방식으로 평가하기 위해 교차 유효성 검사 기술을 살펴볼 수 있습니다.


예, 실제로 훈련 데이터 세트의 오류율은 약 0입니다. 초과 피팅을 줄이기 위해 매개 변수를 변경해도 테스트 데이터 세트의 정확도가 높아지지 않았습니다. 최대한 빨리 언급 한 기술을 살펴보고 의견을 보내겠습니다. 감사합니다.
Mika

교육 및 테스트 데이터 세트 btw의 상대적인 비율은 무엇입니까? 70:30, 60:40 또는 50:50 줄?

첫 번째 데이터 세트-UCI 문자 인식은 50:50 (10000 : 10000)으로 설정되고 숫자는 약 51:49 (1893 : 1796)이고 MNIST는 약 86:14 (60000 : 10000)입니다.
Mika

나는 PCA를 실험했지만 여전히 무작위 포레스트로 좋은 결과를 얻지 못했지만 boost와 Bayes는 이제 다른 분류기와 유사한 결과를 제공합니다. 여기에서 임의 포레스트에 대한 토론을 찾았습니다. stats.stackexchange.com/questions/66543/… 실제로 실제로 과적 합하지는 않았지만 거기에 언급 된 가방 외부 (OOB) 예측 오류를 찾을 수 없습니다. 정확도가 향상되는지 확인하기 위해 많은 수의 나무로 실험을 지금 실행하십시오.
Mika

자, 약간의 진전이 있다고 들립니다. : 사소한 질문이지만 표준 편차 = 1의 평균을 중심으로 피처 (z 점수)를 표준화 했습니까?

5

나는 임의의 나무에서 더 많은 것을 기대했습니다 .

  • 임의 포리스트, 일반적으로 N 기능의 경우 sqrt (N) 기능이 각 의사 결정 트리 구성에 사용됩니다. 귀하의 경우 N = 20이므로 max_depth (각 결정 트리를 구성하는 하위 기능 수)를 5로 설정하십시오.

  • 의사 결정 트리 대신에 임의의 포리스트, 특히 다항 로지스틱 회귀 및 순진 베이에서 기본 모델로 선형 모델이 제안되고 평가되었습니다. 정확도가 향상 될 수 있습니다.

MNIST에서 kNN은 더 나은 정확성을 제공합니다.

  • 더 높은 K 값 (예 : 5 또는 7)으로 시도하십시오 . K가 높을수록 포인트의 클래스 레이블에 대한 더 많은 증거를 제공합니다.
  • k- 최근 접 이웃을 실행하기 전에 PCA 또는 Fisher 's Linear Discriminant Analysis를 실행할 수 있습니다. 이를 통해 점 사이의 거리를 계산하는 동안 상관 된 기능을 제거 할 수 있으므로 k 이웃이 더 강력 해집니다.
  • K 이웃 사이의 거리의 분산에 따라 다른 점에 대해 다른 K 값을 시도하십시오.

OpenCV nactive_vars 매개 변수 (max_depth 아님)를 기본 sqrt (N) 값으로 설정했습니다. 첫 번째 데이터 세트의 경우 nactive_vars = sqrt (16)이고 다른 두 개의 경우 sqrt (200)입니다. MAX_DEPTH 나무 전체 깊이로 성장 여부를 결정합니다 (25 최대 값이다)와 단순성과 여기에 더 그것에 대해, overfitting 사이의 균형 : stats.stackexchange.com/questions/66209/...를 확실하지 min_sample_count에 대해하지만 다양한 값을 시도하고 설정 1에서 가장 잘 작동했습니다.
Mika

OpenCV 문서는 매개 변수에 대한 간단한 설명을 제공합니다. docs.opencv.org/modules/ml/doc/… 지금은 임의의 트리를 합리적으로 작동시키고 여러 분류기 시스템 작업에 집중하고 싶기 때문에 단순하게 유지하고 싶습니다.
Mika

kNN 소개-이것들은 모두 정말 좋은 제안이지만, 내가 말하고자하는 것은 kNN이 임의의 나무 분류기보다 성능이 우수하고 임의의 나무로 개선 할 여지가 많이 있다고 생각합니다.
Mika

네, 왜 랜덤 포레스트가 단순한 k-NN 접근법보다 성능이 좋지 않은지 (또는 더 나은지) 확실하지 않습니다. 커널을 기반으로 한 접근법이 P (y | 파라 메트릭 모델에서와 같이 P (θD) (잠재적 모델 주어진 데이터)를 추정하지 않고 k-NN에서와 같은 D) (출력 주어진 데이터).
Debasis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.