hyeonzzz's Tech Blog

[파머완 2장] 1. 사이킷런 소개와 특징 2. 붓꽃 품종 예측하기 본문

Machine Learning

[파머완 2장] 1. 사이킷런 소개와 특징 2. 붓꽃 품종 예측하기

hyeonzzz 2024. 1. 4. 19:49

2. 사이킷런으로 시작하는 머신러닝 - 사이킷런 소개와 특징

1) 사이킷런(scikit-learn)

파이썬 머신러닝 라이브러리 중 가장 많이 사용되는 라이브러리이다

 

2. 사이킷런으로 시작하는 머신러닝 - 붓꽃 품종 예측하기

지도학습 : 정답이 주어진 데이터를 학습한 뒤 정답을 예측하는 방식

분류(Classification) : 대표적인 지도학습 방법의 하나

데이터 세트

  • 학습 데이터 세트 : 학습에 이용
  • 테스트 데이터 세트 : 모델의 예측 성능을 평가

하이퍼 파라미터 : 최적의 학습을 위해 직접 입력하는 파라미터들

 

<붓꽃 데이터 세트를 이용한 프로세스>
1. 데이터 세트 분리 - 데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습 - 학습 데이터릴 기반으로 ML 알고리즘을 적용해 모델을 학습시킴
3. 예측 수행 - 학습된 ML 모델을 이용해 테스트 데이터의 분류를 예측
4. 평가 - 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML 모델 성능 평가
from sklearn.datasets import load_iris 
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
  • sklearn.datasets : 사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임
  • sklearn.tree : 트리 기반 ML 알고리즘을 구현한 클래스의 모임
  • sklearn.model_selection : 학습 데이터와 검증 데이터, 예측 데이터로 데이터를 분리 / 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임
  • load_iris( ) : 붓꽃 데이터 세트 생성
  • DecisionTreeClassifier : Decision Tree 알고리즘을 구현
  • train_test_split( ) : 데이터 세트를 학습 데이터와 테스트 데이터로 분리

 

1) 붓꽃 데이터 세트 로딩, DataFrame으로 변환

import pandas as pd

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

# iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있습니다. 
iris_data = iris.data

# iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있습니다. 
iris_label = iris.target
print('iris target값:', iris_label)
print('iris target명:', iris.target_names)

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

 

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

train_test_split( )

X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, 
                                                    test_size=0.2, random_state=11)
  • iris_data : 피처 데이터 세트
  • iris_label : Label 데이터 세트
  • test_size = 0.2 : 테스트 데이터 20%, 학습 데이터 80%
  • random_state : 같은 학습/테스트 용 데이터 세트를 생성하기 위해 주어지는 난수 발생 값

3) DecisionTreeClassifier(의사 결정 트리 클래스) 객체로 생성 + fit( ) 이용한 학습 수행

# DecisionTreeClassifier 객체 생성 
dt_clf = DecisionTreeClassifier(random_state=11)

# 학습 수행 
dt_clf.fit(X_train, y_train)
  • random_state = 11 역시 동일한 학습/예측 결과를 출력하기 위함이다

4) predict( ) 이용한 예측 수행

# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행. 
pred = dt_clf.predict(X_test)
  • 예측은 학습 데이터가 아닌 다른 데이터를 이용해야 한다

5) accuracy_score( ) 이용한 예측 성능 평가

from sklearn.metrics import accuracy_score
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
예측 정확도: 0.9333
  • 정확도 : 예측 결과가 실제 레이블 값과 얼마나 정확하게 맞는지
  • 첫 번째 파라미터 : 실제 레이블 데이터 세트
  • 두 번째 파라미터 : 예측 레이블 데이터 세트