본문 바로가기
Python/머신러닝+딥러닝 Ⅱ

사이킷런(scikit-learn)과 지도학습 모델, 데이터셋 구축

by Mr.DonyStark 2024. 3. 26.

□ 사이킷런(scikit-learn)

  ○ 파이썬 기반의 다른 머신러닝 패키지도 사이킷런 스타일의 API를 지향할 정도로 쉽소 파이썬 스러운(단순) API를 제공
  ○ 머신러닝을 위한 다양한 알고리즘과 개발을 위한 편리한 프레임워크와 API 제공
  ○ 오랜 기간 실전환경에서 검증되어있으며 매우 많은 환경에서 사용되는 라이브러리
  ○ 주로 NUMPY와 SCIPY 기반위에 구축된라이브러리임

  ○ 사이킷런 버전확인

#사이킷런 버전확인
import sklearn
print(sklearn.__version__)

 

□ 지도학습 모델

분류 : Classifier 회귀/예측 : Regressor
DecisionTreeCassifier LinearRegression
RandomForestClassifier Ridge
GradientBoostingClassifier Lasso
GaussianNB RandomForestRegressor
SVC GradientBoostingRegressor

  ○ 분류는 대표적인 지도학습 방법의 하나임.
  ○ 지도학습은 학습을 위한 다양한 피처와 분류 결정값인 레이블 데이터로 모델을 학습 후 별도의 테스트 데이터 세트에서 미지의 레이블을 예측함.
  ○ 즉 지도학습은 명확한 정답이 주어진 데이터를 먼저 학습 후 미지의 정답을 예측하는 방식임.
  ○ 이때 학습을 위해 주어진 데이터 세트를 학습 데이터세트, 머신러닝 모델의 예측 성능을 평가하기 위해 별도로 주어진 데이터 세트를 테스트 데이터 세트로 지칭.
  ○ 데이터세트분리(학습/테스트 데이터 분리) → 모델학습(ML알고리즘 적용) → 예측수행 → 평가(예측된 결과와 테스트 데이터의 실제값을 비교해 성능평가)

 

□ 트레이닝, 테스트 셋 분리

  ○ 트레이닝/테스트 셋 분리전 속성 셋과 타겟셋으로 분리

    - 피쳐,속성 : 데이터 세트의 일반 속성임. 머신러닝은 2차원 이상의 다차원 데이터에서도 많이 사용되므로 타겟값을 제외한 나머지 속성을 모두 피처로 지칭.
    - 겟(값),결정(값),레이블,클래스 : 타겟값 또는 결정값은 지도학습시 데이터의 학습을 위해 주어지는 정답 데이터. 지도 학습 중 분류의 경우에는 이 결정값을 레이블 또는 클래스로 지칭.

#라이브러리
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score #정확도
import pandas as pd
import numpy as np

iris = load_iris() #아리스 데이터 실행
print(f"iris 타입 : {type(iris)}")
iris_data = iris.data #아이리스 데이터 변수저장
iris_label = iris.target #타겟명 지정
print(f"타겟값 : {iris_label}")
print(f"타겟명 : {iris.target_names}")

#데이터 셋 구축
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df["label"] = iris.target #신규컬럼생성
iris_df.head()

 

  ○ 트레이닝/테스트 셋 분리

    - 학습데이터세트
      ▶ 머신러닝 알고리즘 학습을 위해사용.
      ▶ 지도학습의 경우 데이터 속성들과 결정값 모두드를 가지고 있어야함.
      ▶ 학습 데이터를 기반으로 머신러닝 알고리즘이 데이터 속성과 결정값의 패턴을 인지해야함.
    - 테스트데이터세트
      ▶ 테스트 데이터 세트에서 학습된 머신러닝 알고리즘을 테스트.
      ▶ 테스트 데이터는 속성 데이터만 머신러닝 알고리즘에 제공하며, 머신러닝 알고리즘은 제공된 데이터를 기반으로 결정값을 예측.
      ▶ 테스트 데이터는 학습 데이터와 별
도의 데이터세트로 제공되어야함.

#데이터 분리
#학습용 속성, 테스트 속성,학습용 클래스, 테스트 클래스 = 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)

#모델 생성 및 분류
dt_clf = DecisionTreeClassifier(random_state=11) #모델 생성
dt_clf.fit(X_train, y_train)#학습 → fit(학습용 속성, 학습용 타겟)
pred = dt_clf.predict(X_test)#예측 → 예측/분류시 답을 넣지않고 속성데이터만 넣는다

print(f"예측값 : {pred}")
print(f"타겟값 : {y_test}")

#예측 정확도 평가 : accuracy_score(테스트 클래스, 예측변수)
print(f"정확도 : {np.round(accuracy_score(y_test, pred),2)}")