M/L Classification : Wine 품종 분류하기

3개의 포도 품종으로 만든 와인과 와인의 13개의 특성(feature) 값을 측정한 데이터입니다. 이 3개의 포도 품종으로 만든 와인들의 특성으로 machine Learning 을 이용하여 분류기(classifier) 를 만들어서 포두 품종을 분류, 예측을 하려고 합니다. 학습데이터 70%, 테스트 데이터 30% 로 나누어서 학습데이터로 분류기 모델을 훈련시키고, 테스트 데이터로 분류기 모델을 검증합니다.

1차로 13개 feature 전부를 대상으로 RandomForest Classification 과 DecisionTree 알고리즘으로 모델을 생성하고, 모델의 적합성을 검증해 봅니다.




데이터 준비

데이터 다운로드 및 분리


  • 로컬PC 에 다운받은 wine 데이터를 70% 학습데이터, 30% 테스트 데이터로 분리합니다.
    • 178개의 레코드를 랜덤 추출 방식으로 학습데이터와 테스트데이터를 분리하여 저장합니다.
    • Train_wine_data.csv (125 rows) , Test_wine_data.csv (53 rows)
데이터 - 01


  • 학습데이터와 테스트데이터 파일을 IRIS 의 HDFS브라우저 메뉴의 MinIO 를 선택하여 업로드합니다.


데이터모델 만들기 - MinIO

  • 데이터모델 메뉴에서 MinIO 에 저장된 Train_wine_data.csv, Test_wine_data.csv 를 데이터모델로 생성합니다.
    • DEMO_TRAIN_WINE , DEMO_TEST_WINE
    • 숫자형 데이터는 데이터 타입을 TEXT 에서 REAL 로 변경하여 데이터 모델을 생성합니다.
데이터 - 02


Machine Learining 모델 만들기

데이터 전처리

  • wine 별로 측정한 13개의 feature 데이터를 스케일링 합니다. 여기서는 minmax scaling 을 사용합니다.
  • 사용 command : scaler
데이터 스케일링은 데이터 전처리 과정의 하나로 모델 알고리즘 학습에서 중요한 부분입니다.
데이터 스케일링을 해주는 이유는 데이터의 값이 너무 크거나 작은 경우에는 학습과정에서 0으로 수렴하거나 무한으로 발산해버릴  있기 때문입니다.
현재 구현된 스케일링은 standard, minmax  있습니다.

1) Standard 스케일러
    feature의 평균을 0, 분산을 1 변경합니다. 모든 특성들이 같은 스케일을 갖게 됩니다.
2) MinMax 스케일러
   모든 feature가 0 1사이에 위치하도록 만듭니다. 데이터가 2차원 셋일 경우, 모든 데이터는 x축의 0 1 사이에, y축의 0 1사이에 위치하게 됩니다.

  • 검색 command 예시
* | scaler minmax  Alcohol to Alcohol_s, Malic_acid to Malic_acid_s. Ash to Ash_s
  • 원본 데이터와 minmax 스케일링 한 데이터 예시
데이터 - 03

RandomForest classification 모델 학습

  • 사용 Command : fit
  • 13개 feature 의 값으로 포도 품종에 해당하는 컬럼인 classId 를 분류하는 분류 모델을 RandomForest classification 알고리즘으로 만들어 봅니다.

  • RandomForest Classification( 랜덤포레스트 위키설명 ) 은 앙상블(앙상블 학습법 위키 설명) 머신러닝 모델의 하나입니다.
    • 다수의 의사결정 트리를 만들고, 그 나무들의 분류를 취합하여 최종적으로 결론을 도출하는 방식입니다.
    • 다수의 나무를 기반으로 예측하므로, 오버피팅 등의 영향력이 줄어드는 효과를 볼 수 있습니다.
  • 검색 명령어 창에서 실행하는 Command 예시

* | scaler minmax Alcohol to Alcohol_s,
                  Malic_acid to Malic_acid_s, Ash to Ash_s,
                  Alcalinity_ash to Alcalinity_ash_s,
                  Magnesium to Magnesium_s, Phenols to Phenols_s,
                  Flavanoids to Flavanoids_s, Nonflavanoid_phenols to Nonflavanoid_phenols_s,
                  Proanthocyanins to Proanthocyanins_s, color_intensity to color_intensity_s,
                  Hue to Hue_s, OD280_OD315 to OD280_OD315_s, Proline to Proline_s
  | fit RandomForestClassification
        FEATURES
                Alcohol_s,Malic_acid_s,Ash_s, Alcalinity_ash_s,Magnesium_s,
                Phenols_s,Flavanoids_s, Nonflavanoid_phenols_s,Proanthocyanins_s,color_intensity_s,Hue_s, OD280_OD315_s,Proline_s
        LABEL classId maxDepth=20
        INTO DEMO_02_RF_CLASSIFICATION_WINE
  • command 의 의미
13 feature  minmax 스케일링으로 전처리하고 RandomForestClassification 알고리즘으로 fit
 - FEATURE  13개의 스케일링 변환된 컬럼
 - LABEL  품종을 나타내는 classId 컬럼
 - fit 으로 학습된 모델은 DEMO_02_RF_CLASSIFICATION_WINE 이라는 모델이름으로 저장
  • IRIS Analyzer 의 검색 메뉴에서 분석 탬플릿DEMO_RF_분류_와인_TRAIN 이 배포되어 있습니다.
    • 학습용 wine데이터 모델과 모델 생성 code 가 같이 저장되어 있습니다. 더블클릭하여 검색 메뉴로 불러오기를 할 수 있습니다.
    • 모델 결과는 동일한 이름을 사용할 수 없으므로 그대로 실행하면 에러가 발생합니다.
    • fit 으로 새 모델을 생성하려면 DEMO_02_RF_CLASSIFICATION_WINE 가 아닌 다른 모델 이름으로 수정해서 실행하시기 바랍니다.


모델 평가

생성한 모델의 성능을 평가하는 지표들이 화면에 같이 출력됩니다.

  • 모델 평가 용어 정의
TP (True Positive) : 참을 참으로 정확하게 예측
TN (True Negative) : 참을 거짓으로 예측
FP (False Positive) : 거짓을 참으로 예측
FN (False Negative) : 거짓을 거짓으로 정확하게 예측


정확도(accuracy) 전체 샘플  맞게 예측한 샘플 수의 비율을 뜻한다.
높을수록 좋은 모형이다.

 accuracy = (TP + TN) / (TP + TN + FP + FN)


정밀도(precision) 양성 클래스에 속한다고 출력한 샘플  실제로 양성 클래스에 속하는 샘플 수의 비율을 말한다.
높을수록 좋은 모형이다. 1 품종으로 예측한 와인이 실제로 1 품종인 레코드의 비율이다.

 precision = TP / (TP + FP)


재현율(recall) 실제 양성 클래스에 속한 표본 중에 양성 클래스에 속한다고 출력한 표본의 수의 비율을 뜻한다.
높을수록 좋은 모형이다.
TPR(true positive rate) 또는 민감도(sensitivity)라고도 한다.
 recall = TP / ( TP + FN)


F-Score  재현율의 가중조화평균(weight harmonic average) 말한다. 정밀도에 주어지는 가중치를 베타(beta)라고 한다.
베타가 1 경우를 특별히 F1 점수 라고 한다.

F1 = 2 * precision * recall / (precision + recall)


참고) 조화평균은 측정값의 역수를 합한 값으로 평균을 구한 . 샘플의 수가 집단별로 동일하지 않을  적용하며,
     극단적인 값의 영향력을 줄이기 위해 사용되곤 합니다.
  • fit 명령어 실행 결과로 정확도(accuracy), 정밀도(precision), 재현율(recall), F1 값을 모델의 성능 지표로 출력합니다.
  • 생성한 Machine Learning 모델은 mlmodel 명령어로 조회할 수 있습니다.
mlmodel summary DEMO_02_RF_CLASSIFICATION_WINE
데이터 - 09

테스트 데이터의 품종 예측하기

학습데이터로 훈련한 모델 DEMO_02_RF_CLASSIFICATION_WINE 로 테스트 데이터의 결과를 예측합니다.

predict command 를 이용하여 테스트 데이터의 품종을 예측하고, 얼마나 많은 수의 정답을 예측했는지 알아 봅니다.

테스트데이터에서 품종인 classId 를 제외한 13개 feature 데이터를 DEMO_02_RF_CLASSIFICATION_WINE 모델에 input으로 주고, output 으로 품종을 예측합니다.

품종의 예측값과 실제값을 비교하여 모델의 정확도를 알아 보고, 분류 정확도가 더 높은 모델을 만들기 위한 개선 포인트를 찾아 봅니다.


  • 검색 명령어 창에서 실행하는 Command 예시
* | scaler minmax  Alcohol to Alcohol_s,
                   Malic_acid to Malic_acid_s,
                   Ash to Ash_s,
                   Alcalinity_ash to Alcalinity_ash_s,
                   Magnesium to Magnesium_s,
                   Phenols to Phenols_s,
                   Flavanoids to Flavanoids_s,
                   Nonflavanoid_phenols to Nonflavanoid_phenols_s,
                   Proanthocyanins to Proanthocyanins_s,
                   color_intensity to color_intensity_s,
                   Hue to Hue_s,
                   OD280_OD315 to OD280_OD315_s,
                   Proline to Proline_s
  |  predict  DEMO_02_RF_CLASSIFICATION_WINE
              Alcohol_s,Malic_acid_s,  Ash_s,
              Alcalinity_ash_s,  Magnesium_s,  Phenols_s,
              Flavanoids_s, Nonflavanoid_phenols_s,  Proanthocyanins_s,
              color_intensity_s,  Hue_s,  OD280_OD315_s,  Proline_s

데이터 - 05


예측 결과 분석

테스트 데이터에서 품종 3번은 14개 와인 모두 예측을 하지 못했습니다.


데이터 - 06

원인을 알아보고 더 성능 좋은 모델을 만들기 위해서는, 정확도 높은 모델이 나올 때 까지 2차, 3차 학습 등 1차 학습과 비슷한 과정들이 추가로 필요합니다.


참고 : 보고서 분류_RF_DC_1차시험_와인데이터

분류_RF_DC_1차시험_와인데이터 는 테스트 데이터를 RandomForest 와 DecisionTree 모델로 각각 예측한 결과를 bar-chart 로 그리고, 13개 feature 의 분포를 그린 box-plot 들을 링크로 만든 보고서 입니다.

데이터 - 07