2 분 소요

※ model_selection

■ train_test_split (데이터 분할)

  • 학습에 사용할 데이터와, 평가를 할 때 사용할 데이터로 나누기 위한 라이브러리 (train data / test data)


□ 라이브러리 호출

> from sklearn.model_selection import train_test_split


□ Data Split

  • parameter
    • *arrays: X, y를 보통 입력받음 (X, y는 길이가 같아야 함)
    • test_size: 나눌 평가용 데이터의 비율 (train_size = none일 경우 0.25로 적용됨)
    • train_size: 나눌 학습용 데이터의 비율
    • random_state: 시드
    • shuffle: 데이터를 나누기 전 데이터를 섞을 것인지
# 기본 구조
> train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, ...)


# e.g.
> X = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
> y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 10)

> X_train
# ['G', 'D', 'B', 'A', 'H', 'E', 'J']
> X_test
# ['I', 'C', 'F']
> y_train
# [6, 3, 1, 0, 7, 4, 9]
> y_test
# [8, 2, 5]
# e.g.
> X = df.drop('Class', axis = 1) # data frame 타입
> y = df['Class'] # series 타입

> X_train, X_test, y_train, y_test = train_test_split(X, y)



■ cross_val_score (교차 검증)

  • 모델의 성능을 교차 검증(cross-validation) 방법을 사용해 평가하기 위한 라이브러리


□ 라이브러리 호출

> from sklearn.model_selection import cross_val_score


□ Cross Validation

  • parameter
    • estimator: 사용할 머신러닝 모델 지정
      • e.g. SVC(), LR() 등의 scikit learn의 모델객체
    • X: feature data
    • y: target data
    • scoring: 모델 성능 평가 지표
      • e.g. ‘accuracy’, ‘neg_mean_absolute_error’, ‘r2’, …
    • cv: 분할 수 / default는 5
# 기본 구조
> cross_val_score(estimator, X, y = None, scoring = None, cv = None, ...)


# e.g.
> from sklearn.linear_model import LinearRegression as LR
> LR_model = LR()

> scores = cross_val_score(LR_model, X, y, cv = 5, scoring = 'neg_mean_absolute_error')
> scores # array([-3.58..., -3.75..., -3.58..., -3.65..., -3.56...])

> scores.mean() # -3.62...



■ GridSearchCV (그리드 서치)

  • 하이퍼 파라미터 그리드에 속한 모든 파라미터 조합을 비교 평가하는 방법
  • 하이퍼 파라미터 그리드는 한 모델의 하이퍼 파라미터 조합을 나타냄
  • e.g. k_최근접 이웃의 파라미터 그리드
    n_neighbors n_neighbors n_neighbors
    3 5 7
metric Manhattan (Manhattan, 3) (Manhattan, 5) (Manhattan, 7)
metric Euclidean (Euclidean, 3) (Euclidean, 5) (Euclidean, 7)

총 6개의 하이퍼 파라미터 조합에 대한 성능을 평가하여, 그 중 가장 우수한 하이퍼 파라미터를 선택


□ 라이브러리 호출

> from sklearn.model_selection import GridSearchCV


  • sklearn을 활용하여 그리드 서치를 구현하려면 사전 형태로 하이퍼 파라미터 그리드를 정의해야 함
    • Key: 하이퍼 파라미터명 (str)
    • Value: 해당 파라미터의 범위 (list)
    • e.g. {‘n_neighbors’ : [3, 5, 7], ‘metric’ : [‘Manhattan’, ‘Euclidean’]}
  • parameter
    • estimator: 모델(sklearn 인스턴스)
    • param_grid: 파라미터 그리드 (사전)
    • cv: k겹 교차 검증에서의 k (2이상의 자연수)
    • scoring_func: 평가 함수 (sklearn 평가 함수)
  • 사용이 편하다는 장점이 있지만, k-겹 교차 검증을 사용하기에 늴고, 성능 향상을 위한 전ㅊ러리를 적용할 수 없는 단점


# 기본 구조
# 인스턴스화
> GSCV = GridSearchCV(estimator, param_grid, cv, scoring_function...)

# 모델 학습
> GSCV.fit(X, Y)

# 가장 우수한 파라미터 반환
> GSCV.get_parma()



■ ParameterGrid (파라미터 그리드)

  • GridSearchCV에 비해 사용이 어렵다
  • 성능 향상을 위한 전처리 기법을 적용하는데 문제가 없어서 실무에서 자주 사용됨

□ 라이브러리 호출

> from sklearn.model_selection import ParameterGrid


□ ParameterGrid 사용 전 알아야할 문법

  • 파이썬 함수의 입력으로 사전 자료형을 사용하는 경우에는 **를 사전 앞에 붙여야 함
  • e.g.
> def func(a, b):
    pass

> func(**{'a':1, 'b':2})
  • ParameterGrid 인스턴스를 순회하면서 성능이 가장 우수한 값을 찾으려면 최대값(최소값)을 찾는 알고리즘을 알아야 함
    • 내장 함수인 max나 min 함수를 사용해도 되지만, 평가해야 하는 하이퍼 파라미터 개수가 많으면 불필요한 메모리 낭비로 이어질 수 있으며, 모델도 같이 추가해야 하므로 메모리 에러로 이어지기 쉬움
# 기본 구조
>

댓글남기기