Hyperparameter Tuning (1)

5단 분석법

순서
분석
단어
내용
1
일반 명사
Hyper
~을 뛰어넘는
Parameter
한도
Tuning
세부 조정
Hyper Parameter Tuning
한도를 뛰어넘는 세부 조정?
2
고유 명사
Hyper Parameter
기계 학습에서 학습 속도나 옵티마이저 선택과 같은 매개변수
Hyper Parameter Tuning
기계 학습 모델의 성능을 최적화하기 위해 모델의 파라미터 값을 조정하는 과정
3
사용 이유
Hyper Parameter Tuning
사전 훈련 모델의 세부 설정을 바꿀 수 있는 유일한 방법이기 때문에
4
사용 방법
Hyper Parameter Tuning
다양한 하이퍼파라미터 조합을 탐색하고 평가해보며 모델의 성능이 좋아지도록 최적화
5
다른 기술과의 비교
Hyper Parameter Tuning
-

정의

일반 명사

Hyper
~을 뛰어넘는
Parameter
한도
Tuning
세부 조정
Hyper Parameter Tuning
한도를 뛰어넘는 세부 조정?
Hyper는 ~을 뛰어넘는 이라는 뜻을 가진 단어입니다
Parameter는 한도라는 뜻을, Tuning은 세부 조정이라는 의미를 가지고 있습니다.
HyperParameter Tuning의 의미를 추측해 보면, 한도를 뛰어넘는 세부 조정 정도로 추측해 볼 수 있습니다.
고유 명사를 한 번 살펴볼까요?

고유 명사

Hyper Parameter
머신 러닝에서 학습 속도나 옵티마이저 선택과 같은 매개변수
Tuning
값을 조정하는 과정
Hyper Parameter Tuning
머신 러닝 모델의 성능을 최적화하기 위해 모델의 파라미터 값을 조정하는 과정
머신러닝에서 HyperParameter는 학습 속도나 옵티마이저 선택과 같은 매개변수를 말합니다.

하이퍼파라미터 목록

이름
내용
예시
학습 속도(Learning Rate)
가중치 업데이트의 크기를 결정하는 값
0.01, 0.001, 0.0001
배치 크기(Batch Size)
한 번에 학습할 데이터 샘플의 개수
32, 64, 128
에포크(Epochs)
전체 데이터셋을 몇 번 반복하여 학습할지를 결정
10, 50, 100
옵티마이저(Optimizer)
모델 학습 과정을 최적화하는 알고리즘 선택
SGD, Adam, RMSprop
모멘텀(Momentum)
SGD와 같은 옵티마이저에서 기울기 업데이트에 대한 관성을 추가하여 학습을 가속화하고 안정화하는 파라미터
0.9, 0.95, 0.99
드롭아웃 비율(Dropout Rate)
학습 과정에서 무작위로 뉴런을 끄는 비율
0.2, 0.5
정규화 파라미터(Regularization Parameter)
과적합을 방지하기 위해 가중치에 패널티를 부여하는 값
L2 정규화(lambda) 값: 0.01, 0.001
학습률 감쇠(Learning Rate Decay)
학습이 진행됨에 따라 학습률을 감소시키는 방법
0.1, 0.01, 0.001
활성화 함수(Activation Function)
각 뉴런의 출력값을 결정하는 함수
ReLU, Sigmoid, Tanh
초기화 방법(Initialization Method)
가중치 초기화 방법
He, Glorot, Random
HyperParameter Tuning은 기계 학습 모델의 성능을 최적화하기 위해 모델의 파라미터 값을 조정하는 과정을 뜻합니다.
이 과정은 모델의 성능을 향상시키고, 주어진 데이터와 문제에 대해 최상의 예측 성능을 달성하는 것을 목표로 합니다.

사용 이유

Hyper Parameter Tuning
사전 훈련 모델의 세부 설정을 바꿀 수 있는 유일한 방법이기 때문에
하이퍼파라미터 튜닝은 머신러닝 모델의 성능을 최적화하고, 일반화 능력을 향상시키며, 특정 문제에 특화된 모델을 만드는 데 필수적인 과정입니다. 적절한 하이퍼파라미터 설정을 통해 모델이 주어진 데이터와 문제에 대해 최상의 예측 성능을 달성할 수 있도록 합니다.
이유
설명
모델 성능 최적화
하이퍼파라미터 튜닝은 모델의 성능을 최대한 끌어올려 최적의 예측 성능을 발휘하도록 합니다.
일반화 능력 향상
과적합(overfitting)을 방지하고, 새로운 데이터에 대한 일반화 능력을 향상시킵니다.
문제 특화 모델
특정 문제에 가장 적합한 모델을 만들기 위해 필요한 조정을 할 수 있습니다.

사용 방법

Hyper Parameter Tuning
다양한 하이퍼파라미터 조합을 탐색하고 평가해보며 모델의 성능이 좋아지도록 최적화
model = create_model(learning_rate=0.001) model.fit(X_train, y_train, epochs=10, batch_size=64, validation_split=0.2)
Python
복사
위는 모델을 학습하는 코드 입니다.
learning_rate, X_train, y_train, epochs, batch_size, validation_split 이 하이퍼 파라미터가 되는 것입니다.
하이퍼 파라미터는 기본적으로 개발자가 임의의 값을 할당하면서 조정할 수 있습니다.
하지만, learning_rate와 batch_size의 경우 GridSearch와 RandomSearch 라는 과정을 통해 최적의 값을 코드로 탐색하고 적용할 수 있습니다.
두 가지 방법 말고도 다양한 평가 기법이 있지만, 이번 페이지에서는 GridSearch와 RandomSearch를 실습해보도록 하겠습니다.

GridSearch로 하이퍼 파라미터 조합을 평가하고 조정하기

항목
설명
정의
GridSearch는 머신러닝 모델의 하이퍼파라미터 튜닝을 위해 사용되는 기법으로, 모든 가능한 하이퍼파라미터 조합을 체계적으로 탐색하여 최적의 조합을 찾는 방법입니다. 최적의 조합이란, 머신러닝 모델의 하이퍼파라미터 튜닝을 위해 사용되는 방법으로, 설정된 하이퍼파라미터 값의 모든 조합을 체계적으로 탐색하여 최적의 조합을 찾습니다
사용 이유
GridSearch는 모델의 성능을 최적화하고, 가장 적합한 하이퍼파라미터 조합을 선택하여 예측 성능을 극대화하기 위해 사용됩니다.

1. 데이터 준비

import numpy as np from sklearn.model_selection import train_test_split from sklearn.utils import shuffle # 가상의 데이터셋 생성 (CIFAR-10과 유사한 데이터셋) num_classes = 10 input_shape = (32, 32, 3) num_samples = 1000 X = np.random.rand(num_samples, *input_shape) # 1000개의 32x32x3 이미지 생성 y = np.random.randint(num_classes, size=num_samples) # 0부터 9까지의 정수 레이블 생성 # 데이터셋 셔플 및 분할 X, y = shuffle(X, y) # 데이터를 섞어줌 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 80% 훈련, 20% 테스트
Python
복사
X: 무작위로 생성된 이미지 데이터 (1000개, 각 32x32x3).
y: 무작위로 생성된 레이블 데이터 (0부터 9까지).
shuffle: 데이터를 섞어줌.
train_test_split: 데이터를 훈련 세트와 테스트 세트로 분할 (훈련 80%, 테스트 20%).

2. 모델 정의

from tensorflow.keras.applications import ResNet50 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.optimizers import Adam def create_model(learning_rate=0.001): base_model = ResNet50(weights='imagenet', include_top=False, input_shape=input_shape) x = base_model.output x = GlobalAveragePooling2D()(x) # 글로벌 평균 풀링 레이어 추가 x = Dense(1024, activation='relu')(x) # 완전 연결 레이어 추가 predictions = Dense(num_classes, activation='softmax')(x) # 출력 레이어 추가 model = Model(inputs=base_model.input, outputs=predictions) opt = Adam(learning_rate=learning_rate) # Adam 옵티마이저 설정 model.compile(optimizer=opt, loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 모델 컴파일 return model
Python
복사
ResNet50: ResNet50을 기반 모델로 사용 (사전 학습된 가중치 imagenet 사용).
GlobalAveragePooling2D: 글로벌 평균 풀링 레이어 추가하여 피처 맵의 공간적 정보를 요약.
Dense(1024, activation='relu'): 완전 연결 레이어 추가하여 비선형 변환 적용.
Dense(num_classes, activation='softmax'): 출력 레이어 추가하여 클래스 확률 계산.
Adam: Adam 옵티마이저 사용 (학습률 learning_rate).
compile: 모델을 컴파일 (손실 함수 sparse_categorical_crossentropy, 평가 지표 accuracy).

3. 모델 훈련 및 평가

learning_rates = [0.001, 0.01, 0.1] batch_sizes = [16, 32, 64] epochs = 10 best_accuracy = 0 best_params = {} # 하이퍼파라미터 조합을 수동으로 설정하여 모델 학습 및 평가 for lr in learning_rates: for batch_size in batch_sizes: model = create_model(learning_rate=lr) model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_split=0.2, verbose=1) loss, accuracy = model.evaluate(X_test, y_test, verbose=0) print(f"Learning Rate: {lr}, Batch Size: {batch_size}, Test Accuracy: {accuracy}") if accuracy > best_accuracy: best_accuracy = accuracy best_params = {'learning_rate': lr, 'batch_size': batch_size} print("Best Parameters:", best_params) print("Best Test Accuracy:", best_accuracy)
Python
복사
하이퍼파라미터 그리드 정의:
learning_rates: 학습률 리스트.
batch_sizes: 배치 크기 리스트.
모델 학습 및 평가:
이중 for 루프를 사용하여 모든 하이퍼파라미터 조합에 대해 모델 학습 및 평가.
model.fit: 모델 학습 (epochs=10, validation_split=0.2).
model.evaluate: 모델 평가.
최고의 정확도를 가진 하이퍼파라미터 조합 저장.

4. 최적의 하이퍼파라미터로 모델 재학습 및 평가

# 최적의 하이퍼파라미터로 모델 재학습 epochs = 10 best_model = create_model(learning_rate=best_params['learning_rate']) best_model.fit(X_train, y_train, epochs=epochs, batch_size=best_params['batch_size'], validation_split=0.2) # 테스트 데이터셋으로 모델 평가 test_loss, test_accuracy = best_model.evaluate(X_test, y_test) print(f"Test Accuracy: {test_accuracy:.2f}") print(f"Test Loss: {test_loss:.2f}")
Python
복사
최적의 하이퍼파라미터로 모델 재학습:
best_params['learning_rate']: 최적의 학습률.
best_params['batch_size']: 최적의 배치 크기.
fit: 최적의 하이퍼파라미터로 모델 재학습 (epochs=10).
모델 평가:
evaluate: 테스트 데이터셋으로 모델 성능 평가.
최종 테스트 정확도 및 손실 출력.

Google Colab

RandomSearch로 하이퍼 파라미터 조합을 평가하고 조정하기

항목
설명
정의
RandomSearch는 사전에 정의된 하이퍼파라미터 공간에서 무작위로 하이퍼파라미터 조합을 선택하여 최적의 조합을 찾는 방법입니다.
사용 이유
하이퍼파라미터 공간이 매우 클 때 계산 비용을 절약하면서도 최적의 조합을 찾을 가능성을 높이며, 구현이 간단하고 효율적입니다.

1. 라이브러리 임포트 및 데이터셋 생성

import numpy as np import tensorflow as tf from tensorflow.keras.applications import ResNet50 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.optimizers import Adam from sklearn.model_selection import train_test_split, ParameterSampler from sklearn.utils import shuffle from scipy.stats import uniform
Python
복사
numpytensorflow를 사용하여 데이터 생성 및 모델 구축.
ResNet50, Model, Dense, GlobalAveragePooling2D, Adam 등을 Keras에서 임포트.
train_test_splitParameterSampler를 scikit-learn에서 임포트하여 데이터 분할 및 하이퍼파라미터 샘플링에 사용.
shuffle을 사용하여 데이터 셔플링.
uniform을 사용하여 하이퍼파라미터 분포 정의.
# 가상의 데이터셋 생성 (CIFAR-10과 유사한 데이터셋) num_classes = 10 input_shape = (32, 32, 3) num_samples = 1000 X = np.random.rand(num_samples, *input_shape) y = np.random.randint(num_classes, size=num_samples)
Python
복사
num_classes: 클래스의 수 (10개).
input_shape: 입력 이미지의 형태 (32x32 크기의 3채널 이미지).
num_samples: 데이터 샘플 수 (1000개).
X: 랜덤한 이미지를 생성하여 입력 데이터셋으로 사용.
y: 랜덤한 레이블을 생성하여 출력 데이터셋으로 사용.
# 데이터셋 셔플 및 분할 X, y = shuffle(X, y) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Python
복사
shuffle(X, y): 데이터와 레이블을 함께 셔플링하여 무작위로 섞습니다.
train_test_split: 데이터를 훈련 데이터와 테스트 데이터로 분할합니다.
test_size=0.2: 데이터의 20%를 테스트 데이터로 사용.
random_state=42: 결과의 재현성을 위해 난수 시드를 설정.

2. 모델 생성 함수

def create_model(learning_rate=0.001): base_model = ResNet50(weights='imagenet', include_top=False, input_shape=input_shape) x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation='relu')(x) predictions = Dense(num_classes, activation='softmax')(x) model = Model(inputs=base_model.input, outputs=predictions) opt = Adam(learning_rate=learning_rate) model.compile(optimizer=opt, loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model
Python
복사
ResNet50(weights='imagenet', include_top=False, input_shape=input_shape): 사전 학습된 ResNet50 모델을 불러오며, 최상위 레이어를 포함하지 않고 입력 형태를 설정.
GlobalAveragePooling2D(): 전역 평균 풀링 레이어를 추가하여 출력 텐서를 축소.
Dense(1024, activation='relu'): 1024개의 유닛과 ReLU 활성화 함수를 가진 밀집 레이어를 추가.
Dense(num_classes, activation='softmax'): 클래스 수 만큼의 유닛과 softmax 활성화 함수를 가진 출력 레이어를 추가.
Adam(learning_rate=learning_rate): Adam 옵티마이저를 설정하여 학습률을 적용.
model.compile: 모델을 컴파일하여 손실 함수와 평가 지표를 설정.

3. 하이퍼파라미터 분포 정의 및 랜덤 서치

# 하이퍼파라미터 분포 정의 param_dist = { 'learning_rate': uniform(0.001, 0.1), 'batch_size': [16, 32, 64] } best_accuracy = 0 best_params = {} n_iter = 5 # 랜덤하게 하이퍼파라미터 조합을 선택하여 시도 for params in ParameterSampler(param_dist, n_iter=n_iter, random_state=42): model = create_model(learning_rate=params['learning_rate']) model.fit(X_train, y_train, epochs=10, batch_size=params['batch_size'], validation_split=0.2, verbose=0) loss, accuracy = model.evaluate(X_test, y_test, verbose=0) print(f"Params: {params}, Test Accuracy: {accuracy}") if accuracy > best_accuracy: best_accuracy = accuracy best_params = params print("Best Parameters (RandomSearch):", best_params) print("Best Test Accuracy (RandomSearch):", best_accuracy)
Python
복사
하이퍼파라미터 분포 정의:
param_dist: 하이퍼파라미터의 분포를 정의합니다.
learning_rate: 0.001에서 0.101 사이의 균일 분포.
batch_size: 16, 32, 64 중 하나의 값.
하이퍼파라미터 랜덤 서치:
ParameterSampler: 주어진 하이퍼파라미터 분포에서 n_iter만큼의 랜덤 샘플을 생성.
model.fit: 각 하이퍼파라미터 조합에 대해 모델을 훈련.
model.evaluate: 훈련된 모델을 테스트 데이터로 평가.
최상의 정확도를 기록하여 best_accuracybest_params를 갱신.

4. 최적 하이퍼파라미터로 모델 재학습 및 평가

# 최적의 하이퍼파라미터로 모델 재학습 best_model = create_model(learning_rate=best_params['learning_rate']) best_model.fit(X_train, y_train, epochs=10, batch_size=best_params['batch_size'], validation_split=0.2) # 테스트 데이터셋으로 모델 평가 test_loss, test_accuracy = best_model.evaluate(X_test, y_test) print(f"Test Accuracy: {test_accuracy:.2f}") print(f"Test Loss: {test_loss:.2f}")
Python
복사
최적 하이퍼파라미터로 모델 재학습:
best_model: 최적의 하이퍼파라미터로 모델을 생성 및 훈련.
model.fit: 최적의 하이퍼파라미터로 전체 학습 데이터셋을 사용하여 모델을 훈련.
모델 평가:
model.evaluate: 테스트 데이터셋으로 최적 모델을 평가.
최종 테스트 정확도와 손실을 출력.

Google Colab

알아 두면 좋은 정보

GridSearchCV

GridSearchCV는 기계 학습 모델의 하이퍼파라미터 튜닝을 위한 기법 중 하나입니다.
가능한 모든 하이퍼파라미터 조합을 체계적으로 탐색하여 최적의 조합을 찾습니다.

사용 이유

GridSearchCV를 사용하면 모델 성능을 최적화하기 위해 하이퍼파라미터를 조정하는 과정에서, 가능한 모든 조합을 탐색함으로써 가장 성능이 좋은 조합을 찾을 수 있습니다
이는 모델의 예측 성능을 최대화하고, 과적합(overfitting)을 방지하는 데 도움을 줍니다.

사용 방법

사용자는 모델에 대해 튜닝하고자 하는 하이퍼파라미터와 그 값들의 범위를 정의합니다.
GridSearchCV는 각 조합에 대해 모델을 학습시키고, 교차 검증(cross-validation)을 통해 각 조합의 성능을 평가합니다.
최적의 성능을 보이는 하이퍼파라미터 조합을 선택합니다.

예시

예를 들어, 랜덤 포레스트 모델의 하이퍼파라미터를 튜닝할 때, 트리의 개수(n_estimators)와 트리의 최대 깊이(max_depth)를 조정하고자 한다면, 각 하이퍼파라미터에 대해 몇 가지 값을 설정합니다.
GridSearchCV는 이 값들의 모든 조합을 시도하여 최적의 조합을 찾습니다.
from sklearn.model_selection import GridSearchCV, train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_classification # 데이터 준비 X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 하이퍼파라미터 그리드 설정 param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [10, 20, 30], 'min_samples_split': [2, 5, 10] } # 랜덤 포레스트 모델 정의 model = RandomForestClassifier(random_state=42) # 그리드 서치 설정 grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy') # 그리드 서치 수행 grid_search.fit(X_train, y_train) # 최적의 하이퍼파라미터 출력 print("Best hyperparameters:", grid_search.best_params_) # 최적의 모델로 테스트 데이터 평가 best_model = grid_search.best_estimator_ train_accuracy_tuned = best_model.score(X_train, y_train) test_accuracy_tuned = best_model.score(X_test, y_test) print(f"Tuned Model - Train Accuracy: {train_accuracy_tuned}, Test Accuracy: {test_accuracy_tuned}")
Python
복사

코드 설명

랜덤 포레스트(Random Forest)가 무엇인가요?
랜덤 포레스트(Random Forest)는 앙상블 학습(Ensemble Learning) 기법 중 하나로, 여러 개의 결정 트리(Decision Tree)를 결합하여 예측 성능을 향상시키는 방법입니다. 랜덤 포레스트는 분류(Classification)와 회귀(Regression) 문제 모두에 사용될 수 있습니다.
결정 트리(Decision Tree)가 무엇인가요?
결정 트리(Decision Tree)는 머신러닝 알고리즘 중 하나로, 데이터의 특성(feature)을 이용해 예측값을 결정하는 트리 구조의 모델입니다. 각 노드(node)는 특정 특성의 값을 기준으로 데이터를 분할하며, 최종 리프 노드(leaf node)는 예측값을 나타냅니다. 결정 트리는 직관적이고 해석하기 쉬운 모델로, 분류(Classification)와 회귀(Regression) 문제 모두에 사용될 수 있습니다.
결정 트리의 구조
루트 노드(Root Node): 트리의 시작점으로, 전체 데이터셋을 포함합니다.
내부 노드(Internal Nodes): 특성의 값을 기준으로 데이터를 분할하는 노드입니다.
리프 노드(Leaf Nodes): 최종 예측값을 나타내는 노드로, 더 이상 분할되지 않는 노드입니다.
결정 트리의 예시
다음은 간단한 결정 트리의 예시입니다. 각 노드는 특정 특성에 따라 데이터를 분할하고, 리프 노드는 예측값을 나타냅니다.
형식)
[특성 A] / \ [값 <= x] [값 > x] / \ / \ [특성 B] [특성 C] [값 1] [값 2] / \ | [값 3] [값 4] [값 5]
Plain Text
복사
이미지 예시) 이미지 데이터를 처리하는 결정 트리를 예로 들어 보겠습니다. 각 노드는 이미지의 특정 특성을 기준으로 데이터를 분할합니다. 여기서는 픽셀 값을 기준으로 분할하는 예를 들어 보겠습니다.
픽셀 값이 128이라는 것은 해당 픽셀이 중간 밝기를 나타낸다는 의미입니다. 픽셀 (50, 50) 값 <= 128라는 조건은 이미지의 특정 위치(50, 50)에 있는 픽셀의 밝기가 128 이하인지를 기준으로 데이터를 나누는 조건을 나타냅니다. 이미지 크기가 10x10일 때 각 픽셀은 고유한 (x, y) 좌표와 밝기 값을 가집니다.
다음은 픽셀 값의 예시입니다:
픽셀 값이 0: 완전한 검은색
픽셀 값이 128: 중간 밝기 (회색)
픽셀 값이 255: 완전한 흰색
[픽셀 (50, 50) 값 <= 128] / \ [픽셀 (30, 30) 값 <= 100] [픽셀 (80, 80) 값 <= 150] / \ / \ [클래스 A] [픽셀 (60, 60) 값 <= 75] [클래스 B] [픽셀 (90, 90) 값 <= 200] / \ | [클래스 C] [클래스 D] [클래스 E]
Plain Text
복사
트리 설명
1.
루트 노드:
픽셀 (50, 50) 값 <= 128:
이미지의 (50, 50) 위치의 픽셀 값이 128 이하인지 여부에 따라 데이터를 두 그룹으로 나눕니다.
2.
내부 노드:
픽셀 (30, 30) 값 <= 100:
(50, 50) 위치의 픽셀 값이 128 이하인 이미지에서, (30, 30) 위치의 픽셀 값이 100 이하인지 여부에 따라 데이터를 다시 분할합니다.
픽셀 (80, 80) 값 <= 150:
(50, 50) 위치의 픽셀 값이 128보다 큰 이미지에서, (80, 80) 위치의 픽셀 값이 150 이하인지 여부에 따라 데이터를 다시 분할합니다.
3.
리프 노드:
클래스 A, 클래스 B, 클래스 C, 클래스 D, 클래스 E:
최종적으로 각 분할 경로에 따라 이미지를 특정 클래스(예: A, B, C, D, E)로 분류합니다.

Google Colab

RandomSearchCV

RandomSearchCV는 GridSearchCV와 유사한 목적을 가지지만, 모든 조합을 시도하는 대신, 설정된 횟수만큼 무작위로 하이퍼파라미터 조합을 선택하여 탐색하는 기법입니다.

사용 이유

GridSearchCV는 하이퍼파라미터 조합이 많아질수록 계산 비용이 매우 높아지는 단점이 있습니다.
RandomSearchCV는 무작위로 조합을 선택함으로써 계산 비용을 줄이고, 큰 파라미터 공간에서도 효율적으로 최적의 하이퍼파라미터를 찾을 수 있습니다.

사용 방법

사용자는 모델에 대해 튜닝하고자 하는 하이퍼파라미터와 그 값들의 범위를 정의합니다.
RandomSearchCV는 지정된 횟수만큼 무작위로 하이퍼파라미터 조합을 선택하고, 교차 검증을 통해 각 조합의 성능을 평가합니다.
최적의 성능을 보이는 하이퍼파라미터 조합을 선택합니다.

예시

랜덤 포레스트 모델의 하이퍼파라미터를 튜닝할 때, 트리의 개수(n_estimators)와 트리의 최대 깊이(max_depth)를 무작위로 선택하여 최적의 조합을 찾습니다.
from sklearn.model_selection import RandomizedSearchCV, train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_classification from scipy.stats import randint # 데이터 준비 X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 하이퍼파라미터 범위 설정 param_dist = { 'n_estimators': randint(50, 200), 'max_depth': randint(10, 30), 'min_samples_split': randint(2, 10) } # 랜덤 포레스트 모델 정의 model = RandomForestClassifier(random_state=42) # 랜덤 서치 설정 random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=100, cv=5, scoring='accuracy', random_state=42) # 랜덤 서치 수행 random_search.fit(X_train, y_train) # 최적의 하이퍼파라미터 출력 print("Best hyperparameters:", random_search.best_params_) # 최적의 모델로 테스트 데이터 평가 best_model = random_search.best_estimator_ train_accuracy_tuned = best_model.score(X_train, y_train) test_accuracy_tuned = best_model.score(X_test, y_test) print(f"Tuned Model - Train Accuracy: {train_accuracy_tuned}, Test Accuracy: {test_accuracy_tuned}")
Python
복사

Google Colab

코드 설명

ⓒ 2024 startupcode. 모든 권리 보유. 무단 복제 금지.