본문 바로가기
Python/Machine Learning

[ML]_붓꽃 품종 예측하기

by ssolLEE 2023. 8. 21.
반응형

  • 이 공부는 다음 멋진 책과 함께 합니다. 위키북스와 저자님 너무나도 감사합니다. 

  • 이 책은 코드와 자세한 설명이 함께 있어 찬찬히 한 장 한 장 넘기며 공부하기 좋습니다. 
  • 맨 앞 챕터에서는 파이썬의 기본 문법과 라이브러리에 대한 예제 코드도 함께 나와 있습니다. 

**분류**하기 

  • 우리는 붓꽃 데이터셋으로 붓꽃의 품종을 분류할 것입니다.(Classification)
  • 붓꽃 데이터셋은 꽃잎의 길이와 너비(Sepal length, Sepal width), 꽃받침의 길이와 너비(Petal length, Petal width)로 붓꽃의 품종(Setosa, Vesicolor, Virginica)를 예측할 것입니다. 
  • 이때, 꽃잎의 길이와 너비, 꽃받침의 길이와 너비를 피처(feature), 붓꽃의 품종을 레이블(label)이라고 합니다.
  • 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식을 지도학습(Supervised Learning)이라고 합니다. 분류는 대표적인 지도학습입니다. 
  • 학습을 위해 주어진 데이터셋을 train data set, 머신러닝 모델의 예측 성능을 평가하기 위해 별도로 주어진 데이터 셋을 test data set이라고 합니다. 
  • 다음은 사이킷런에서 사용할 모듈을 임포트할 때 입력하는 내용입니다. 
    • sklearn.datasets : 사이킷런에서 자체적으로 제공하는 데이터셋을 생성하는 모듈의 모임
    • sklearn.tree : 트리 기반 머신러닝 알고리즘을 구현한 클래스 모임
    • sklearn.model_selection : 학습 데이터와 검증 데이터, 예측 데이터로 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임
      • 하이퍼 파라미터 - 머신러닝 알고리즘별로 최적의 학습을 위해 직접 입력하는 파라미터들. 하이퍼 파라미터를 통해 머신러닝 알고리즘의 성능을 튜닝할 수 있다.

 

데이터 불러오기

  • 필요한 모듈, 클래스를 import 합니다.
from sklearn.datasets import load_iris      # 예제 데이터 불러오기
from sklearn.tree import DecisionTreeClassifier     # 결정트리라고 하는 머신러닝 알고리즘 중 하나
from sklearn.model_selection import train_test_split        # 훈련 데이터 / 테스트 데이터
  • 붓꽃 데이터셋을 로딩합니다. 독립 변수와 종속 변수를 확인합니다. 
  • 그리고 우리의 종속 변수가 어떻게 표현되는지 print()로 확인해봅시다.
import pandas as pd

iris = load_iris()   #붓꽃 데이터 로딩
iris_data = iris.data  # 독립 변수
iris_label = iris.target  # 종속 변수

print('iris target값: ', iris_label)
print('iris target명: ', iris.target_names)

  • 출력물 보이시나요? 이렇게 사이킷런 데이터는 수치형, 즉 numpy형태의 데이터입니다. 
  • 0 == setosa , 1 == versicolor , 2 == virginica 를 의미합니다. 
  • 지금 머신러닝하는 것과는 별개이지만, 위 데이터를 pandas의 데이터프레임으로 봐볼까요? 
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
# iris_df.head(1)
iris_df['label'] = iris.target
iris_df.head(2)

  • 우리에게 조금 더 편한 모습이죠? 하지만 컴퓨터는 숫자로 모든 것을 인식한다는 것! value값이 숫자로 되어 있습니다. 머신러닝을 할 때에는 모든 데이터가 수치화가 되어 있어야 합니다.
  • 하지만 seaborn에서 불러오는 같은 붓꽃 데이터셋은 '문자형' 데이터도 함께 있죠.

 

학습용 데이터와 테스트용 데이터 분리

  • 학습용 데이터와 테스트 데이터는 반드시 분리해야 합니다. 학습된 모델의 성능을 평가하기 위해 테스트 데이터가 꼭 필요하기 때문입니다. 
X_train, X_test, y_train, y_test = train_test_split(
    iris_data,  # 독립 변수 
    iris_label,  # 종속 변수
    test_size = 0.2, # 전체 데이터 중 테스트 데이터가 20%, 학습 데이터가 80%로 데이터 분할
    random_state=11) # 호출할 때마다 같은 학습/테스트 데이터셋을 생성하기 위해 주어지는 난수 발생값/ 숫자는 큰 의미 없다.

 

모형 불러오기 - 의사 결정 트리(DecisionTreeClassifier) 이용

 

sklearn.tree.DecisionTreeClassifier

Examples using sklearn.tree.DecisionTreeClassifier: Release Highlights for scikit-learn 1.3 Classifier comparison Plot the decision surface of decision trees trained on the iris dataset Post prunin...

scikit-learn.org

# DecisionTreeClassifier 객체 생성
dt_clf = DecisionTreeClassifier(random_state=11)
# 학습 수행
dt_clf.fit(X_train, y_train)

  • 이제 의사 결정 트리 기반의 DecisionTreeClassifier 객체는 학습 데이터를 기반으로 학습이 완료되었습니다. 이 객체를 이용하여 예측을 수행할 것입니다. 

 

모형 예측 수행하기

  • 예측은 보통 테스트 데이터셋을 이용합니다. 
# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred = dt_clf.predict(X_test)
pred

pred가 array형태로 출력되었다.

 

모형 평가하기

  • 예측 결과를 기반으로 의사 결정 트리 기반의 DecisionTreeClassifier 객체의 예측 성능을 평가하겠습니다. 
  • 다양한 평가 방법 중 정확도를 측정하겠습니다.
  • 정확도: 예측 결과와 실제 레이블 값이 얼마나 정확하게 맞는지를 평가하는 지표
from sklearn.metrics import accuracy_score
print("예측 정확도: {0:.4f}".format(accuracy_score(y_test, pred))) # 실제값, 예측값 순으로 입력

  • 학습한 의사 결정 트리의 알고리즘 예측 정확도가 약 93.33%로 측정되었습니다. 

 

붓꽃 데이터셋으로 분류를 예측한 프로세스 정리

1. 데이터세트 분리: 학습 / 테스트 데이터

2. 모델 학습: 학습 데이터 기반, 머신러닝 알고리즘 적용

3. 예측 수행: 테스트 데이터의 분류를 예측

4. 평가: 모델의 성능 평가

 

지금까지 붓꽃 데이터셋으로 분류 예측을 수행해보았습니다. 

오늘 함께한 흐름을 기억하며 다음 머신러닝도 공부해보아요. 

오늘도 감사합니다.