글쟁이, 코딩한다

0127 / k_digital 35일차 / 세미프로젝트3 본문

나는 코딩도 한다/TIL

0127 / k_digital 35일차 / 세미프로젝트3

Algori 2021. 1. 28. 00:02

0.

 mushroom

 

  이전 시간

  : mushroom dataset 전처리와 시각화

  : 식용 버섯 판단 DL 모델 구축을 위한 전처리 단계 => 결측치를 가진 stalk-root 열에 ML 모델 예측값을 밀어넣자. 

 

 

1. stalk-root 채우기 용 ML모델

 


 1-데이터 분할

  ; stalk-root 값이 채워진 학습용 데이터와 값이 ? 상태인 예측용 데이터를 분할

 2-학습용 데이터로 다중 클래스 분류 ML 모델 만들기
  1) y data(stalk-root열), x data(y data를 뺀 모든 열) 정비
  2) encoding
    과정 1- labelencoder ; str을 int로 변환
    과정 2- onehotencoder : 열 추가 문제; ML 모델에서 y data는 onehotencoding이 의미가 없다.
  3) 모델 적용

  ; 다중 클래스 분류 모델에 쓸 수 있는 모델들 : Logistic Regression(multi class argument on), SVC, KNN ... etc ...
    acc 값이 모두 1? 일단 의심.
    : 깔끔한 데이터는 그만큼 성능을 뽑아낼 수도 있다고 한다!

 3-예측값 구하기 & 밀어넣기
 

 문제1 onehotencoder
  onehotencoder는 해당 열의 변수 숫자에 따라 새로운 열을 생성한다.

  이에 따라 모델과 x data 차원에 차이가 생기며 적용이 불가능  
    해결방안 1- for문으로 디코딩까지 밀어넣는다? ㄴㄴ 결국 제자리걸음
    해결방안 2- 기존 모델 재점검 : onehotencoding없이도 labelencoding만으로 충분히 성능을 뽑아낸다

       => encoding 걷어내기

문제2 들쭉날쭉 결과값
   모든 모델이 acc값은 높지만, 뱉어내는 결과물이 다르다. 예를 들어 svm은 모두 한 클래스 값, logistic regression(multi class 분류 속성 부여시)은 세 클래스 값, knn은 네개 클래스 예측 값을 뱉었다.
   의심1- 모델 적용의 문제? 데이터 정돈&기본 하이퍼파라미터 튜닝에도 같은 결과값. 모델을 손볼 필요는 없다고 판단

   의심2- 학습 데이터 불충분? 충분한 학습 데이터-5000 ++
     => 일단, 값이 있는 학습용 데이터의 정답 비율과 근접한 값을 뽑아낸 모델을 선택

 

 문제3 labelencoder
   데이터가 달라지며 label 순서가 달라진다 => 원본 데이터로 돌아가 선 label 변환 후 데이터 분할
     ; label을 고치자 위의 들쭉날쭉한 결과값 문제도 어느 정도 고쳐졌다.

 


2. 전체 데이터를 위한 DL 모델



mushroom dataset
  버섯의 모든 특징 열들을 기반(x데이터)으로 비독성(Edible)과 독성(Poisonal) 클래스(y데이터)를 뱉는 이진 분류 문제

 데이터가 복잡하지 않았던 만큼 간단한 DL 모델 적용 : ML과 나눠서 진행한 팀원 분이 짜오셨다
 
 놀라운 accuracy : 편차는 있지만 최고로 높은 성능을 가진 모델 값은 99.8%

   -이토록 성능을 뽑아냈는데, 굳이 튜닝을 해야할까? 다른 모델을 적용한다던가, auto ML을 써보는 것이 의미가 있을까? => 됐습니다!

 이진 분류를 위한 ML 모델들을 적용 ; 정형 데이터들에서는 ML 모델이 더 높은 효율을 보이기도 한다.

   => 여전히 뛰어난 성능. default값을 적용한 randomforest classifier는 1.0의 accuracy를 뽑아냈다.
   

추가작업 목록
   tree 모델 기반 열 중요도(feature importance) 확인 ; gill color(버섯 머리 아래쪽 주름의 색깔?)이 가장 높은 연관성
   tree 모델 시각화 ; tree 시각화를 위한 간단한 코드 적용 ; 하려 했으나 graphviz의 버전 문제로 끝내 적용에는 실패.. (내일 재도전 요망)

 

3. 모델 활용 문제

 

  그럼, 이 버섯 예측을 어디에 써볼까? 

 방안 1 버섯 이미지 활용? 라벨링된 버섯 이미지 데이터가 존재하지 않는다.

 ;버섯인지 아닌지 구별하는 모델부터 시작해 버섯 특징을 구별해야 한다. 현재 수준 주어진 시간(3일)내에는 불가능.

 

 방안2 데이터를 입력하면 버섯 독성을 판단하는 모델?

 ;구글링이 더 빠르고 의미 있다. 뿐만 아니라, 한 번의 실수로도 '나쁜 AI'가 될 수 있는 위험성.

 

 방안3 어제 묵혀둔 후보군을 꺼낼 차례?

 아직 프로젝트는 3일이 남았다. 이왕이면 회귀 분석으로다가.
  

Comments