RL Researcher

Scikit-Learn(붓꽃 품종 예측하기) 본문

Machine-Learning/Scikit-Learn

Scikit-Learn(붓꽃 품종 예측하기)

Lass_os 2020. 12. 14. 21:45

첫번째 머신러닝 - 붓꽃 품종 예측


분류(Classification)는 대표적인 지도학습(Supervised Learning) 방법의 하나입니다.

- 지도학습은 학습을 위한 다양한 피처(Feature)와 분류 결정값인 레이블(Label) 데이터로 모델을 학습한 뒤, 별도의 테스트 데이터 세트에서 미지의 레이블을 예측합니다.

- 즉 지도학습(Supervised Learning)은 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식입니다.

# 사이킷런 내의 아이리스 모듈 import합니다.
# 분류 모델의 종류인 DecisiontreeClassifier 불러오기
# 데이터 세트를 학습 데이터와 테스트 데이터로 분리하는 데 train_test_split()함수 사용합니다.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# Feature들과 Data값이 어떻게 구성되어 있는지 확인하기 위해 DataFrame으로 변환합니다.
import pandas as pd

# 붓꽃 데이터 세트를 로딩합니다.
iris = load_iris()

# iris의 target값을 확인해 보겠습니다.
print('iris target값: {0}'.format(iris.target))
print('iris target명: {0}'.format(iris.target_names))

# 붓꽃 데이터 세트를 보기 위해 DataFrame으로 변환합니다.
iris_df = pd.DataFrame(data = iris.data,columns = iris.feature_names)
iris['label'] = iris.target
iris_df.head(3)

<output>

iris target값: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
iris target명: ['setosa' 'versicolor' 'virginica']
- sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2

- feature에는 sepal length, sepal width, petal length, petal width가 있습니다.

- Label은 0,1,2 세가지 값으로 되어 있으며, 0이 Setosa품종, 1이 versicolor품종, 2가 virginica품종을 의미합니다.

iris.feature_names

학습용 데이터와 테스트용 데이터를 분리해 보았습니다.

# 학습데이터와 테스트데이터의 분리 필요성은 학습데이터로 학습된 모델이 얼마나 뛰어난 성능을 가지는지 평가하려면 테스트 데이터가 필요하기 때문입니다.
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size = 0.2,random_state = 11)
# 첫번째 파라미터 : Feature 데이터 세트입니다.
# 두번째 파라미터 : Label 데이터 세트입니다.
# test_size : 전체 데이터 세트 중 테스트 데이터 세트의 비율입니다.
# random_state : 호출할 때마다 같은 학습/테스트 용 데이터 세트를 생성하기 위해 주어지는 난수 발생 값입니다.
# ranom_state 뒤의 값은 np.radom.seed와 같이 무의미만 숫자값입니다.

다음은 DecisiontreeClassifier 객체 생성, 학습 수행, 예측값 저장까지 해보았습니다.

# DecisiontreeClassifier 객체 생성
clf = DecisionTreeClassifier(random_state=11)
# 학습 수행
clf.fit(X_train,y_train)
# 예측인 반드시 학습 데이터가 아닌 다른 데이터를 이용해야 하며, 일반적으로 테스트 데이터 세트를 이용합니다.
# 학습이 완료된 DecisontreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred = clf.predict(X_test)

모델의 성능을 평가하기 위해서 여러가지 방법이 있지만 여기서는 정확도를 측정해 보겠습니다.

from sklearn.metrics import accuracy_score
print('예측 정확도:{0:.4f}'.format(accuracy_score(y_test,pred)))

<output>

예측 정확도:0.9333

 

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

 

붓꽃 데이터 세트로 분류를 예측한 프로세스를 정리하겠습니다.

  1. 데이터 세트 분리 : 데이터를 학습 데이터와 테스트 데이터로 분리합니다.

  2. 모델 학습 : 학습 데이터를 기반으로 ML알고리즘을 적용해 모델을 학습시킵니다.

  3. 예측 수행 : 학습된 ML 모델을 이용해 테스트 데이터의 분류(즉,붓꽃 종류)를 예측합니다.

  4. 평가 : 이렇게 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML 모델 성능을 평가합니다.

Comments