카테고리 없음

교차검증과 하이퍼 파라미터 튜닝을 적용한 붓꽃 종류 분류 문제

elpsaicongree 2024. 10. 16. 17:46
아래의 조건에 맞춰서 코드를 작성해보며 코드에 익숙해져보겠습니다.
 
 
1.데이터셋 불러와서 훈련세트와 테스트세트로 나누기(train_test_split)
2. 결정트리 모델 생성하기 (random_state는 아무거나 해도 됨)
3. 하이퍼파라미터 튜닝을 위한 하이퍼파라미터 목록(딕셔너리) 만들기
=> max_depth, min_samples_split
4.그리드서치 cv를 이용한 교차 검증 모델 생성 후 학습
5.최적의 파라미터 조합 출력
6.최적의 모델을 따로 뽑아내어 테스트세트에 대한 스코어 출력해보기

# 1. 데이터셋 불러와서 훈련세트와 테스트세트로 나누기
 
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
train_input, test_input, train_target, test_target = train_test_split(iris.data, iris.target,
                                                    test_size=0.2, random_state=119)

train_test_split 기능으로 넘파이 파일형식으로 작성되어있는 붓꽃을 나눠줍니다.

# 2. 결정트리 모델 생성하기
 
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(random_state=112)

DecisionTreeClassifier : 데이터의 특성을 기반으로 분기를 통해 예측을 합니다

# 3. 하이퍼파라미터 튜닝을 위한 하이퍼파라미터 목록 만들기
grid_params = {'max_depth':[4, 5, 6], 'min_samples_split':[2, 3, 4, 5, 6, 7, 8]}

max_depth는 트리의 최대 깊이를, min_samples_split는 분할을 위해 필요한 최소 샘플 수를 의미합니다. 이를 통해 모델의 성능을 향상시키고 과적합(overfitting)을 방지할 수 있습니다

# 4. 그리드서치CV 를 이용한 교차 검증 모델 생성 후 학습
# GridSearchCV : 특정 모델 기반으로 교차검증 모델 만들기 클래스
# StratifiedKFold : 교차검증을 위한 분할을 할 때 데이터 골고루

from sklearn.model_selection import GridSearchCV, StratifiedKFold
grid_dt = GridSearchCV(dt, grid_params, cv=StratifiedKFold(n_splits=3, shuffle=True, random_state=911), n_jobs=-1)
grid_dt.fit(train_input, train_target)

GridSearchCV: 주어진 모델과 하이퍼파라미터 목록을 이용하여 최적의 하이퍼파라미터를 찾기 위한 교차 검증을 수행합니다.

StratifiedKFold: 데이터를 n개의 부분으로 나누되, 각 부분에 클래스의 비율이 동일하도록 유지하는 교차 검증 방법입니다. 여기서 n_splits=3은 데이터를 3개의 폴드로 나누겠다는 의미입니다. shuffle=True는 데이터를 섞어서 나누는 옵션입니다.

fit(): 훈련 세트를 이용해 모델을 학습시키고 최적의 하이퍼파라미터를 찾습니다.

# 5. 최적의 파라미터 조합 출력
 
print('GridSearchCV 최적 파라미터:', grid_dt.best_params_)

best_params_: 그리드 서치를 통해 찾은 최적의 하이퍼파라미터 조합을 출력합니다. 이를 통해 모델의 성능을 극대화할 수 있습니다

# 6. 최적의 모델을 따로 뽑아내어 테스트세트에 대한 스코어 출력해보기
best_model = grid_dt.best_estimator_
print("최적 모델의 훈련세트 스코어 :", best_model.score(train_input, train_target))
print("최적 모델의 테스트세트 스코어 :", best_model.score(test_input, test_target))

best_estimator_: 최적의 하이퍼파라미터로 학습된 모델을 추출합니다.

score(): 훈련 세트와 테스트 세트에서의 모델 성능을 평가합니다. 여기서 반환되는 값은 정확도(accuracy)입니다

# 보너스! 예측까지 해봄!
pred = best_model.predict(test_input[:5])
print("예측 결과", pred)
print("실제 타겟", test_target[:5])

 

 

코드 실행 결과