파이썬 모듈 중에서 사이킷런을 사용하여 iris 데이터를 분류를 해보려고 한다.
분류(Classification)
은 대표적인 지도학습 머신러닝 알고리즘으로, training 데이터를 가지고 학습하여 별도의 test 데이터의 Label을 예측할 수 있다.
iris 데이터의 설명 변수는 다음과 같다.
위 네가지 피쳐를 가지고 iris의 품종 Label을 예측하다.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
하이퍼 파라미터 : 머신러닝 알고리즘의 최적의 학습을 위해 직접 입력하는 파라미터. 이를 가지고 ML 알고리즘의 성능을 튜닝할 수 있다.
iris = load_iris()
iris_data = iris.data
iris_target = iris.target
print('iris target값 :\n', iris_target)
print('iris target명 : ', iris.target_names)
iris.data는 feature만으로 구성된 데이터셋으로 Numpy 기반의 구조이다.
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df['label'] = iris.target
iris_df.head()
iris 데이터를 DataFrame구조로 변환한다. 그리고 iris.target 데이터도 병합한다.
X_train, X_test, Y_train, Y_test = train_test_split(iris_data, iris_target, test_size=0.2, random_state=11)
모듈 train_test_split을 가지고 학습용, 테스트용 데이터로 분리할 수 있다. 파라미터를 살펴보면,
코드를 실행하면 X_train은 feature 학습 데이터, X_test는 feature 테스트 데이터, Y_train은 label 학습 데이터, y_test는 label 테스트 데이터로 분리됬다.
dt_clf = DecisionTreeClassifier(random_state=11)
dt_clf.fit(X_train,Y_train)
pred = dt_clf.predict(X_test)
우선 DecisionTreeClassifier 객체를 생성하고, X_train, Y_train 데이터를 fitting 한 다음 predict() 메서드를 이용하여 X_test데이터로 label을 예측해본다.
머신러닝 알고리즘 성능 평가 방법 중 성과 분석이 있다.
이번엔 accuracy_score를 이용하여 예측결과가 실제 레이블 값과 얼마나 정확하게 맞는지 평가해보려고 한다.
from sklearn.metrics import accuracy_score
print('예측 정확도 : {0:.4f}'.format(accuracy_score(Y_test, pred)))
의사결정트리로 학습해본 결과 예측 정확도가 0.9333(93.33%)로 측정이 됬다.
iris 데이터로 머신러닝 알고리즘 중 의사결정나무트리로 예측한 과정은 다음과 같다.
1. 데이터 세트 분리 : 전체 데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습 : 학습 데이터를 기반으로 ML 알고리즘을 적용하여 모델 학습
3. 예측 수행 : 학습된 ML 모델을 이용하여 테스트 데이터의 분류를 예측
4. 평가 : 예측된 결과값과 실제 결과값을 비교해 ML 모델 성능 평가