머신러닝

Softmax 예제 입력 데이터를 준비하다 우연히 찾게 된 Fisher교수의 붓꽃 종 분류 머신 러닝 문제

coding art 2018. 8. 3. 18:40
728x90

물론 지금까지 다루어 오던 아두이노 엘렉트로닉스류의 코딩이 안드로이드 OS의 지원을 받는 스마트 폰에서 앱 코딩을 지원하는 앱인벤터와 조우하는 경우 아두이노 코딩이 보다 강력한 시너지를 받을 수 있었지만 한편 PCProcessing에서 시리얼/이더넷 인터페이스나 무선 와이파이에 의한 아두이노 인터페이스 코딩이 가능하다면 아두이노 사물인터넷 코딩의 끝판을 볼 수 있을 듯하다.


교보문고에서 판매 중입니다. 342 페이지 가격 15800원 개인출판(POD)이므로 주문 배송기간이 일주일 정도 소요됩니다.


_______________________________________________________________________________________________________




현 단계에서 머신 러닝에서 삼촌격인 볼츠만 확률분포의 껍때기를 벗겨다 만들었다고 추정되는 softmax 확률 분포만을 외골수로 더 깊이 거론하면 본론이자 주제인 TensoFlow 코딩 감각을 잊어먹을 우려가 있으므로 다시 머신 러닝 코딩 예제의 세계로 돌아오기로 한다.

한편 머신 러닝의 MNIST 수기 숫자 인식 예제는 다루는 데이터 사이즈가 지나치게 커 한편으로는 코드의 내용 및 실행되는 구조를 출력해서 이해하기 어려운 면이 다소 있을 수 있으므로 가급적 데이터 사이즈가 작은 모델을 다루어 보는 것이 좋을 듯하다.

설명에 적절한 예제로서는 아나콘다 설치 후 예제로 다루었던 했던 붓꽃 데이터 분류( Classifiying irises flowers) 문제가 있으며 3개월 전에 포스팅 하였으니 참고하도록 하자.

1-5 Getting Started with TensorFlow under Anaconda3 예제
https://steemit.com/kr/@codingart/1-5-getting-started-with-tensorflow-under-anaconda3
1-6 sklearn 라이브러리 업데이트 설치 및 Anaconda3 spyder3 파이선 3.5예제
https://steemit.com/kr/@codingart/1-6-sklearn-anaconda3-spyder3-3-5

꽃말 이름이 왜 붓꽃인가 해서 찾아보았더니 피기 전의 모습도 푸른 색 먹을 듬뿍 머뭄고 있는 붓 모양과 다름이 없이 다소곳한 형태였다.


영국의 통계학자이면서 생물학자인 Ronald Fisher 교수는 1936년에 “The use of multiple measurements in taxanomic(분류학의) problems” 라는 제목의 학술논문에서 LDA( Linear Descriminant Analysis: 선형 판별 분석) 통계 기법을 사용한 다변량 통계 분석(multivariate statistics) 예제에서 붓꽃 데이터 세트를 소개했다. 이 데이터는 Fisher 교수와 함께 영국에서의 연구를 위해 방문했던 미국 출신 식물학자 Edgar Anderson이 수집한 데이터로서 지금 우리가 보면 별 것 아닌 것 같지만 그래도 전문 식물학자가 보는 붓꽃의 발생학적(morphology) 특징 즉 붓꽃의 세부적인 분류를 가능하게 할 수 있는 4개의 요인으로서 꽃잎의 길이와 폭, 꽃받침의 길이와 폭을 관찰하여 150개로 이루어지는 데이터를 준비하였다.


Fisher 교수의 LDA 기법은 통계학, 패턴 인식 및 머신 러닝 분야에서 2개 이상인 관찰 대상의 특징을 선형으로 조합하여 찾아내도록 학습하는 방법이다. 붓꽃의 꽃잎과 꽃받침의 크기를 연속적인 성격의 Random한 독립 변수들로 삼아 클라스 라벨에 해당하는 카테고리성(categotical) 종속 변수를 결정하게 된다.  즉 학습 계산이 완료된 후 테스트 하고자 하는 시료의 데이터를 대상으로 최종적으로 분류가 되면 해답에 해당하는 클라스 라벨을 부여하게 된다. 붓꽃 문제에서는 클라스 또는 라벨 종류로서 Setosa, Virginica, Versicolor 중의 어느 하나로 결정을 하게 된다.

머신 러닝에서 다변량 통계 분석의 간단한 사례로서는 이미 소개했던 2개의 Random 변수를 고려하는 “할아버지 시계 입찰가 결정” 문제가 있으므로 개념을 참조하자.

1-17 Multi Variables Linear Regression 머신 러닝 할아버지 시계 입찰가 예제
https://steemit.com/kr/@codingart/multi-variables-linear-regression

붓꽃 데이터 세트를 대상으로 Fisher 교수는 자신이 고안한 LDA 기법을 적용하여 통계학적으로 식물 종 분류 작업을 실시했었는데, SVM(support vector machine)기법을 사용한 농업 통계학 분야의 원조 격인 분류 문제를 다루는 논문으로서 이 예제도 한편으로는 softmax 확률분포를 사용하는 MNIST 이상으로 유명한 듯하다. 



그 내용을 정리해 보기로 한다. 붓꽃(Irises flowers)은 3개(Setosa, Virginica, Versicolor) 종으로 분류된다고 한다. 여기서 종류를 나타내는 용어를 머신 러닝에서 클라스(class) 또는 라벨이란 말을 쓴다. 

Fisher 교수의 연구 내용을 살펴보면 그리 어려울 것은 없는 작업이다. 원로 격인 통계학 분야의 권위자 Fisher 교수가 땡볕이 비치는 농장에 직접 나가기는 그렇고 마침 미국에서 Fellowship을 받아 연구하러 왔던 식물학자인 Edgar Anderson이 발생학(morphology) 분야의 전문성도 있고 해서 붓꽃 농장에 통계 데이터 준비를 위해 차출 되었으리라. 원래가 미국에서 하바드와 같이 유명 대학에서는 동식물학자 해먹으려면 대학원생 시절 여름 방학에 루이지애나나 아마존의 깡촌 늪이나 정글 속에 샘플 채취를 포함한 동식물을 관찰하러 베아그릴스처럼 목숨 걸고 시간당 최저 시급 받으면서 두어달씩 현지 답사 다녀와야 한다는 얘기를 최재천 교수의 저서에서 읽은 듯하다.

붓꽃이 만발한 농장에 길이 측정을 위한 자와 데이타를 적을 공책과 필기도구를 준비해서 간다. 붓꽃 농장에서 자료 샘플링 전에 미리 통계학자인 Fisher 교수와 식물 발생학을 연구했던 Anderson 교수 사이에 어떤 특징 데이터를 추출 샘플링 할 것인지는 협의 가 되었으리라. 꽃의 꽃받침 길이와 폭, 꽃잎의 길이와 폭 4가지를 측정하고 아울러 해당 꽃의 세부 종명을 기록하는데 분류를 위한 학습 데이터로 사용하기 위해서는 적어도 한 종 당 50 개 이상 샘플 데이터를 준비해야 한다고 한다. 샘플 수가 너무 적으면 통계 값의 표준 편차가 좀 과하게 커질 수 있을 것이다. 붓꽃 종류가 3종류 밖에 없으므로 Anderson 교수급의 식물학자라면 한번 보면 종명을 알 수 있을 것이다. 물론 당시 컴퓨터가 없던 시절이므로 종이와 연필 주판으로 승부를 냈으리라.

이 과정을 통해서 4개의 수치로 이루어진 리스트 형태의 데이터가 준비되며 아울러 클라스 명도 데이터화 할 필요가 있다. 즉 Iris Setosa 는 “0”, Virginica는 “1”, Versicolor 는 “2” 처럼 간단하게 숫자로 분류하는 것이 편리 할 듯하다. 여기까지는 초등생도 할 수 있을 정도이다. 아래는 그러한 데이터 작업 결과 10개를 출력해 본 결과이다. 수치 데이터의 길이 단위는 cm 인 듯하다.



붓꽃의 종류를 뜻하는 클라스 데이터와 샘플 수를 출력해 보면 3종으로서 50개씩인데 다음과 같다.


불행히도 이 작업은 3개월 전 최신 TensorFlow 버전1.6을 탑재한 아나콘다 설치작업 후에 실행해 보았던 예제 문제이나 TensorFlow를 사용치 않고 sklearn 라이브러리를 사용하였다. 당시에는 이 예제의 중요성을 파악하지 못했던 것도 사실이지만 볼츠만 분포와 Softmax 와의 연관관계가 밝혀짐에 따라 바로 붓꽃 종 분류 문제가 Softmax 예제 문제로서 적합한 후보라는 판단이 들었다.



앞으로 기회를 보아 TensorFlow 로 처리가능성을 찾아 볼 계획이다. 분류 문제의 난이도가 높은 것은 아니나 MNIST 에서도 불러 쓸 수 있도록 데이터 베이스와 batch를 위한 특별 명령을 제공하듯이 sklearn 라이브러리에서도 좀 난해해 보이는 코드 내용이 언듯 언듯 보인다. 이 데이터를 TensorFlow 코드에서 읽어 올 수 있다면 softmax를 사용하여 분류 결과를 얻을 수 있으리라 기대한다.

이 문제를 다루어 보실 분은 아래 사이트 주소를 열어보기 바란다. 1-1에서 1-6까지이다. 아나콘다 설치 및 다수 라이브러리 설치 과정이 다소 긴 편인데 시도하여 성공하길 바란다. 이 예제는 아나콘다와 함께 설치되는 전체 라이브러리들을 죄다 import 해야 하므로 반드시 아나콘다 설치 후 도전해야 할 것이며, 아나콘다는 몇 번 사용해 본 결과 대단히 우수하다는 점도 함께 밝혀 둔다.


아래의 내용은 스팀잇 사이트에도 있으며 본 블로그에도 이미 게재가 되었다.
 
1-1 윈도우즈 10 아나콘다3(64비트)에서 TensorFlow 설치 소개
https://steemit.com/kr/@codingart/1-1-10-3-64-tensorflow
∙∙∙
1-5 Getting Started with TensorFlow under Anaconda3 예제
https://steemit.com/kr/@codingart/1-5-getting-started-with-tensorflow-under-anaconda3
1-6 sklearn 라이브러리 업데이트 설치 및 Anaconda3 spyder3 파이선 3.5예제
https://steemit.com/kr/@codingart/1-6-sklearn-anaconda3-spyder3-3-5

Softmax 사용 확률분포 문제를 언급하다가 갑자기 붓꽃 분류 문제를 상세히 언급한 이유는 다음과 같다. ※내용이 긴 관계로 나머지 내용은 다음 편에 게재 예정임!