본문 바로가기
AI/Machine-Learning

[sklearn] KFold와 cross_val_score

by Wikinist 2023. 8. 31.

sklearn.model_selection 모듈은 Scikit-learn 라이브러리에서 제공하는 기능 중 하나로, 모델의 성능을 평가하거나 모델을 훈련 및 테스트하기 위한 데이터를 분할하는 데 사용됩니다. 여기서는 KFold와 cross_val_score에 대해 설명하겠습니다.

KFold (K-Fold Cross Validation)

K-Fold 교차 검증은 모델의 성능을 평가하거나 파라미터를 튜닝할 때 사용되는 일반적인 기법 중 하나입니다. 데이터를 K개의 서브셋으로 나누고, 각각의 서브셋을 차례로 검증 데이터로 사용하고 나머지를 훈련 데이터로 사용하여 모델을 K번 훈련하고 평가하는 과정을 반복합니다. 이렇게 하면 모든 데이터가 검증에 한 번씩 사용되므로 모델의 성능을 더 정확하게 평가할 수 있습니다.

Scikit-learn의 KFold 클래스는 이러한 K-Fold 교차 검증을 구현한 것으로, 데이터를 K개의 폴드로 나누고 각 폴드의 인덱스를 생성해주는 역할을 합니다.

예시 코드:

from sklearn.model_selection import KFold

kfold = KFold(n_splits=5, shuffle=True)  # 5개의 폴드를 만들고 데이터를 섞어서 나눔
for train_index, test_index in kfold.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    # 모델 훈련 및 평가 수행

 

cross_val_score

cross_val_score 함수는 K-Fold 교차 검증을 간편하게 수행할 수 있는 함수입니다. 주어진 모델과 데이터에 대해 K-Fold 교차 검증을 실행하고 각 폴드에서 모델의 성능을 평가한 결과를 반환합니다.

예시 코드:

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
scores = cross_val_score(model, X, y, cv=5)  # 5-Fold 교차 검증 실행
print("Cross-validation scores:", scores)

이 코드는 주어진 데이터 X와 타겟 y에 대해 로지스틱 회귀 모델의 5-Fold 교차 검증 결과를 출력합니다. cv 매개변수를 사용하여 원하는 폴드 수를 지정할 수 있습니다.

K-Fold 교차 검증과 cross_val_score를 사용하면 모델의 일반화 성능을 더 정확하게 평가하고, 데이터에 대한 모델의 안정성과 신뢰도를 높일 수 있습니다.

KFold 클래스의 주요 매개변수 & 메서드

n_splits (int):

데이터를 몇 개의 폴드로 나눌 것인지를 지정합니다. 일반적으로 이 값은 2 이상이어야 하며, 데이터를 K개의 폴드로 나누는 K-Fold 교차 검증을 수행하려면 이 값을 설정합니다.

shuffle (bool, 기본값=False)

데이터를 나누기 전에 섞을지 여부를 결정합니다. 데이터를 섞으면 편향을 줄이고 일반화 성능을 더 정확하게 평가할 수 있습니다.

random_state (int or RandomState instance, 기본값=None)

데이터를 섞을 때 사용되는 랜덤 시드입니다. 동일한 시드를 사용하면 결과가 재현 가능합니다.


split(X[, y, groups])

데이터를 나누고 각 폴드의 인덱스를 생성하는 메서드입니다. X는 피처 데이터이고, y는 타겟 데이터입니다. groups는 그룹 지정에 사용되며, 일반적으로는 사용하지 않습니다.

이 메서드는 반복 가능한 객체를 반환하며, 각 반복마다 훈련 및 테스트 인덱스를 반환합니다.

get_n_splits([X, y, groups])

전체 데이터셋을 몇 개의 폴드로 나눌 것인지를 반환합니다.

여기 예시 코드가 있습니다

from sklearn.model_selection import KFold

# 데이터를 5개의 폴드로 나누는 KFold 객체 생성
kfold = KFold(n_splits=5, shuffle=True, random_state=42)

for train_index, test_index in kfold.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    # 모델 훈련 및 평가 수행

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'AI > Machine-Learning' 카테고리의 다른 글

시계열 데이터 분석 - ARIMA  (0) 2023.09.02
[sklearn] KMeans  (0) 2023.08.31
앙상블(Ensemble)  (0) 2023.08.30
[sklearn] 결정트리  (0) 2023.08.30
[sklearn] K-Nearest Neighbors  (0) 2023.08.30