import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from keras.utils import to_categorical
# Iris 데이터셋 로드
iris = load_iris()
# 특성과 레이블을 데이터프레임으로 변환
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target
X = df.drop('target', axis=1)
y = df['target']
y_encoded = to_categorical(y)
X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=0.2, random_state=42)
# 모델 정의
model = RandomForestClassifier()
# 하이퍼파라미터 그리드 정의
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
# 그리드 서치 객체 생성
model = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, n_jobs=-1, verbose=2)
# 그리드 서치 수행
model .fit(X_train, y_train)
# 최적의 하이퍼파라미터 출력
print("Best parameters found: ", model.best_params_)
# 최적의 모델을 사용하여 테스트 세트에서 예측
best_model = model.best_estimator_
y_pred = best_model.predict(X_test)
# 성능 평가
print("Classification report:\n", classification_report(y_test.argmax(axis=1), y_pred.argmax(axis=1)))