Data Science & AI/Machine Learning
[Machine Learning] 머신러닝 알고리즘 구현 - 붓꽃 품종 예측하기
skwkiix
2023. 8. 22. 03:05
728x90
이 포스팅은 < 파이썬 머신러닝 완벽 가이드(개정 2판) > 을 학습하면서 정리한 내용이다.(https://www.yes24.com/Product/Goods/69752484)
머신러닝 - 붓꽃 품종 예측하기
사이킷런(scikit-learn) 라이브러리를 이용하여 붓꽃 품종을 분류(Clsssification) 하는 모델을 만들어 본다.
ML 알고리즘은 의사결정 트리를 적용해 볼 것이다.
모델 구현 순서
분류(Classification)는 지도학습의 방법 중 하나이다. 학습을 위한 피처와 레이블(분류 결정값) 데이터로 모델을 학습한 뒤, 별도의 데이터 세트에서 미지의 레이블을 예측한다.
- 데이터 세트 분리 : 학습 데이터/ 테스트 데이터
- 모델 학습 : ML 알고리즘 적용
- 예측 수행 : 학습된 ML 모델로 예측 수행
- 평가 : 결과값을 비교해, 모델 성능을 평가
0. 데이터 불러오기
- 붓꽃 데이터 세트 로딩
from sklearn.datasets import load_iris # 예제 데이터 불러오기
from sklearn.tree import DecisionTreeClassifier # 결정트리 머신러닝 알고리즘 중 하나
from sklearn.model_selection import train_test_split # 훈련 데이터 / 테스트 데이터
from sklearn.tree import DecisionTreeRegressor
# 데이터 세트 로딩
iris = load_iris()
iris_data = iris.data # 독립변수
iris_label = iris.target # 종속변수
print('iris target', iris_label)
# print('iris data', iris_data)
print('iris target명', iris.target_names)
- 데이터 프레임으로 변환
import pandas as pd
iris_df = pd.DataFrame(data=iris_data, columns = iris.feature_names)
iris_df['label'] = iris.target
iris_df
피쳐 : sepal length, sepal width, petal length, petal width
레이블 : 0(Setosa) ,1(versicolor) , 2(virginia) 품종
1. 학습용, 테스트용 데이터 분리
사이킷런은 train_test_split() API를 제공한다.
따라서, 학습데이터와 테스트 데이터를 test_size 파라미터 입력값의 비율로 분할한다.
# 0은 setosa, 1은 versicolor 2는 virginica 품종으로 구분
X_train, X_test, y_train, y_test = train_test_split(
iris_data # 피처
, iris_label # 레이블
, test_size=0.2 # 테스트 데이터 비율
, random_state=2023 # 숫자는 아무거나 지정해도 상관없다.
)
학습용 피처 데이터 세트 > X_train, 학습용 레이블 데이터 세트 > y_train
테스트용 피처 데이터 세트 > X_test, 테스트용 레이블 데이터 세트 > y_test로 반환한다.
2. 모델 학습
- 의사결정트리 클래스 객체 생성
# DecisionTreeClassifier 객체 생성
dt_clf = DecisionTreeClassifier(random_state=11)
- 학습 수행
DecisionTreeClassifier 의 fit() 메서드 이용
# 학습 수행
dt_clf.fit(X_train, y_train)
3. 예측 수행
- 예측 수행
Predict() 메서드에 테스트용 피처 데이터 세트를 입력
pred = dt_clf.predict(X_test)
4. 모델 평가
사이킷런이 제공하는 정확도 측정 함수 accuracy_score() 사용
from sklearn.metrics import accuracy_score
print('예측 정확도 : {0:.4f}''.accuracy_score(y_test, pred))
예측 정확도 : 0.9333
728x90