해결된 질문
작성
·
36
·
수정됨
0
# 데이터 불러오기
import pandas as pd
train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/7_2/mart_train.csv")
test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/7_2/mart_test.csv")
# EDA
# total이 target컬럼
# train.shape, test.shape (700,10) // (300,9)
# print(train.head(3))
target = train.pop('total')
# print(train.shape)
# print(train.info()) rating 제외 모두 object
# print(train.describe(include="O"))
# print(test.describe(include='O'))
# unique 수 일치, 레이블 인코딩 활용
# print(train.isnull().sum().sum())
# print(test.isnull().sum().sum())
# 결측치 0개
# 전처리
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
cols = train.select_dtypes('object').columns
for col in cols :
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
# print(test.head(3))
# 레이블인코딩 완료
# 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train,
target,
test_size=0.142,
random_state=0)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape
# 평가 및 검증 (회귀) 랜덤포레스트
from sklearn.metrics import root_mean_squared_error
from sklearn.metrics import r2_score
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=0, max_depth=1)
model = rf.fit(X_tr, y_tr)
pred = model.predict(X_val)
print(root_mean_squared_error(y_val,pred))
# basic : 403187.3131420301
# max_depth=8 : 389483.9937048198
# max_depth=1 : 355335.1208784505
# print(r2_score(y_val,pred))
위는 제가 작성한 코드인데, 베이직에서 약 40만의 rmse가 나왔습니다.
후에 max_depth=8부터 튜닝을 시도했는데 depth를 올리는게 아닌 최솟값인 1까지 내렸을 때 최적의 rmse가 나오더라구요.
이런 모델을 만들어본적이 없어서.. 혹시 제가 코딩한 모델이 잘못된건가 의문이 들어 질문드립니다! 정상적인 걸까요...?
답변 2
1
정균님 안녕하세요 max_depth = 1은 매우 위험합니다.
max_depth 설정을 하지 마시죠!! test데이터가 어떻게 나올지 몰라
하이퍼파라미터 튜닝 없이 준비 부탁드립니다
0
안녕하세요, 인프런 AI 인턴입니다. 이정균님께서 작성하신 코드와 관련하여 랜덤포레스트 모델링의 max_depth
튜닝에 대해 검토해드리겠습니다.
랜덤 포레스트(Random Forest) 모델에서 max_depth
는 각 개별 결정트리의 최대 깊이를 결정하는 중요한 하이퍼파라미터 중 하나입니다. max_depth
가 클수록 모델은 더 복잡해지며, 데이터에 더 맞춰지게 됩니다. 그러나, 과도하게 깊어질 경우 과적합(Overfitting)의 위험이 있습니다. 반대로, max_depth
가 작을 경우 일반화 성능이 좋아질 수 있으나, 너무 작으면 모델이 충분히 학습하지 못할 수 있습니다.
이제 작성하신 모델의 max_depth
설정에 대해 검토하겠습니다:
최적의 max_depth
:
max_depth=1
로 설정했을 때 RMSE가 최적이라면, 이는 데이터 세트가 상대적으로 간단하며, 더 깊은 트리가 오히려 노이즈에 민감하게 반응했을 가능성을 시사합니다.모델링 접근:
max_depth
는 하나의 하이퍼파라미터일 뿐이고, 다른 여러 파라미터(n_estimators
, min_samples_split
등)를 함께 조정하면서 전체적인 모델 성능을 최적화할 수 있습니다.max_depth
만 조정하여 예상보다 좋은 결과를 얻었다면, 추가로 교차 검증(Cross-validation)도 시도해 보는 것이 좋습니다. 이는 모델의 일반화 능력을 평가하는 데 도움이 됩니다.일반적인 고려 사항:
max_depth=1
로 성능이 좋다는 것은 특정 데이터셋에 대한 결과일 수 있음을 참고하세요.추가적으로, 비슷한 문제의 튜닝 방법과 결과에 대한 논의가 포함된 게시글을 참조해 보시는 것이 좋겠습니다:
이 게시글에서는 랜덤포레스트의 파라미터 튜닝 경험이 공유되어 있으니, 모델링에 대한 인사이트를 얻으실 수 있으실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.