'll Hacker

[ML 실습] 7일차 복습- 사이킷런 머신러닝 만들어보기(개요) 본문

AI/머신러닝

[ML 실습] 7일차 복습- 사이킷런 머신러닝 만들어보기(개요)

씨이오가 되자 2025. 3. 12. 20:43
Contents
728x90

분류(Classification)는 대표적인 지도학습(Supervised Learning) 방법의 하나이다. 지도학습은 학습을 위한 다양한 피처와 분류 결정값인 레이블(Label) 데이터로 모델을 학습한 뒤, 별도의 테스트 데이터 세트에서 미지의 레이블을 예측한다. 

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

 

sklearn.datasets⏩사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임이다.

sklearn.tree⏩트리 기반 ML 알고리즘을 구현한 클래스의 모임이다.

sklearn.model_selection⏩학습 데이터와 검증 데이터, 예측 데이터(테스트 데이터)로 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임이다.

 

하이퍼 파라미터란?
머신러닝 알고리즘별로 최적의 학습을 위해 직접 입력하는 파라미터들을 말함.
하이퍼 파라미터를 통해 머신러닝 알고리즘의 성능을 튜닝가능 

 

붓꽃 품종 예측 모델 

우리가 만들어볼 것은 "붓꽃 품종 예측하기"이다. 

붓꽃 데이터 세트를 생성(load_iris( ))▶️ML알고리즘(의사 결정 트리(Decision Tree))▶️DecisionTreeClassifier를 적용 

 

train_test_split( ) ⏩ 데이터 세트를 학습 데이터와 테스트 데이터로 분리 

# 붓꽃 품종 예측하기
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

 

EDA

load_iris( ) 함수를 이용해 붓꽃 데이터 set를 로딩한 후, 피처들과 데이터값이 어떻게 구성돼 있는지 확인하기 위해 Dataframe으로 변환 

import pandas as pd

# 불꽃 데이터 세트를 로딩
iris = load_iris()

# iris.data는 Iris 데이터 세트에서 피처만으로 된 데이터를 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)

# 피처에는 sepal length, sepal width, petal length, petal width가 있음.
# 레이블(Label, 결정값)은 0, 1, 2 세가지 값으로 돼 있으며
# 0이 Setosa 품종, 1이 versicolor 품종, 2가 virginica 품종을 의미함.

feature에는 sepal length, sepal width, petal length, petal width이 있음

피처들을 보기 위한 해당 코드는 다음과 같다:

iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)

레이블은 0, 1, 2 세가지 값으로 되어있다. (0 = 'setosa', 1 = 'versicolor', 2 = 'virginica')

 

학습용과 테스트용 분리시키기

형식: train_test_split(피처 데이터 set, 레이블 데이터 set, 전체 데이터 set 中 test set 비율, 난수발생값)

X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size = 0.2, random_state=11)

random_state를 지정하지 않으면 수행할 때마다 다른 학습 및 테스트 용 데이터를 만들 수 있음 

숫자 자체는 어떤 값을 지정해도 상관없음.

 

학습 및 예측

사이킷런의 의사 결정 트리 클래스인 DecisionTreeClassifier를 객체로 생성한다. 

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

 

생성된 DecisionTreeClassifier 객체의 fit( ) 메서드에 학습용 피처 데이터 속성과 결정값 데이터 set를 입력해 호출하면 학습을 수행 후 테스트 데이터 set으로 예측 수행

# 학습 수행
dt_clf.fit(X_train, y_train)

# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred = dt_clf.predict(X_test)

 

성능 평가

여러가지 성능 평가 방법은 있지만, 여기서 살펴보는 것은 정확도이다.

정확도는 예측 결과가 실제 레이블 값과 얼마나 정확히 맞는지를 평가하는 지표이다.

정확도 측정 함수▶️accuracy_score( )

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

 

 

 

참고: 파이썬 머신러닝 완벽 가이드, 권철민, 위키북스

728x90