이어서 LDA+Classifier 기법 적용 결과를 살펴보기로 한다. 이 Fisher 교수의 LDA 기법은 머신 러닝의 발달사에 있어 앞으로 큰 도약을 위한 징검다리 역할을 할 듯싶다.
이미 붓꽃 데이터에 대한 퍼셉트론 Classification 에 서 볼 수 있었듯이 학습 후 테스트 시에 93% 의 정확도를 보여주고 있다. 이러한 퍼셉트론 적용 전 단계에LDA 처리한 4X2 로 변환된 붓꽃 데이터를 퍼셉트론 처리하게 되면 놀랍게도 98% 정확도를 보여주게 된다. LDA+퍼셉트론 처리가 100%가 아닌 98%에 머무르는 이유는 변환이전이던 변환 후든 붓꽃 데이터가 Support Vector들과 같이 섞이는 현상이 있기 때문이다. 이러한 문제를 극복하기 위해서는 OvR(One versus Rest) Logistic Regression기법에서처럼 Overfitting을 감안하여 Regularization 을 위한 파라메터 C 를 감안해야 한다.
또는 SVM 기법에서는 C 뿐만 아니라 ‘linear’커늘 이나 Radial Basis Function 즉 ‘rbf’ 커늘(kernel) 옵션을 사용하는 감마(γ) 값을 사용하여 Regularization 이 이루어진다. 더 나아가 Information Gain을 최대화하기 위해서 조건별 엔트로피나 Geni impurity를 최소화 하는 아주 간단한 논리로 이루어진 Decision Tree 기법이 있다. Decision Tree 기법의 특징은 OvR Logistic Regression기법이나 SVM 기법 과는 달리 Regularization 과정 없이도 높은 정확도를 보여 준다.
아울러 Random Forests 는 Decision Tree 보다 높은 정확도를 보여 주는 기법이다.
그 중 가장 기본적인 퍼셉트론에 의해 Classification 작업을 해보자. 학습 횟수는 40회, learning rate은 0.1 로 둔다. 70% 학습 30% 테스트 조건하에서 LDA 처리를 하지 않은 퍼셉트론 처리의 93%에 비해 놀랍게도 98%가 나온다. 하지만 퍼셉트론은 선형분리(linearly separable) 가능한 경우에 특화 되어 있어 더 이상의 정밀도 증가는 불가능해 보인다.
단순 퍼셉트론보다 보다 정교한 Classifiers를 사용할 경우 즉 OvR(One versus Rest) Logistic Regression기법에서 Overfitting을 감안하여 inverse regularization 파라메터 C=10.0일 경우에 한해서 100%가 나오지만 C=100.0에서 98%가 나온다. 아래 그림을 참조하자. LDA와 결합하여 테스트하기 위해서는 98%가 나오는 경우를 사용하도록 한다.
나머지 SVM, Decision Tree, Random Forests 98%가 한계이며 한편 KNN 에서는 100%가 나온다. 따라서 KNN은 너무 정확하므로 배제하기로 한다. 다음 그림의 계산 결과를 참조하기 바란다.
아래의 결과는 LDA 처리 후 각 Classifier 기법을 적용한 결과로서 퍼셉트론(Perceptron)을 제외하고 모든 경우 100%임을 알 수 있다.
붓꽃 데이터를 대상으로 scikit-learn 라이브러리가 지원하는 다양한 Classifier를 사용하여 머신 러닝을 해보면 97% 가 한계였으나 Fisher의 LDA를 적용하여 차원을 4에서 2로 축소한 후 다시 Classifier를 적용하면 잘못 분류되는 샘플이 전혀 없이 그 한계를 넘어 100%가 가능하다. 과연 Linear Discriminant Analysis 기법을 창안한 Fisher 교수 생전에 이러한 놀라운 결과를 예측했을까? Fisher교수가 LDA를 창안 후 83년이 지난 지금 Fisher교수의 혜안에 놀라움을 금할 수 없다.
위 결과를 얻어내기 위한 코드는 아래의 url 주소를 참조하자.
#iris_lda_Classifiers_01.py
http://blog.daum.net/ejleep1/45
#ch03.py
http://blog.daum.net/ejleep1/42
LDA 뿐만 아니라 PCA(Principal Component Analysis)를 비롯한 차원축소 기법에 관해 알아보기로 한다.