본문 바로가기
데이터 분석 및 시각화

[ML] 의사 결정 나무(decision tree)_bike 데이터 활용(2)

by 바다의 공간 2024. 7. 6.

이번에는 선형회귀와 의사결정나무를 좀 비교해보는 글 입니다.

3. 선형회귀 vs 의사 결정 나무

from sklearn.linear_model import LinearRegression #클래스를 이용하는것

 

lr = LinearRegression()

선형회귀를 이용해보겠습니다. 객체는 lr로 했습니다.

lr.fit(X_train, y_train)

학습을 하고 완료가 되면 예측을 해야합니다.

pred2 = lr.predict(X_test)

예측을 학습했습니다. 이후에 scatterplot으로 실행해보겠습니다.

sns.scatterplot(x=y_test, y=pred2)

mean_squared_error(y_test, pred2, squared=False)
#221.1987722244733

예측을 후 rmse를 출력해보면서 둘의 성능을 비교할 수 있습니다.

#의사결정나무 : 210.74186203651976
#선형회귀:  221.1798811600512
210.74186203651976 - 221.1798811600512

각각 값을 이용해서 계산하면 -10이 나와서 의사결정나무가 이 데이터에는 좀 더 적합한걸로 확인이 됩니다.

하이퍼 파라미터란?

-모델생성할때 옵션을 넣어서 조정하는 값들을 이야기 합니다

 

그러면 이제 하이퍼파라미터를 넣어서 모델을 튜닝해보려고 합니다.

#하이퍼 파라미터 적용하기
dtr = DecisionTreeRegressor(random_state=2024, max_depth=50, min_samples_leaf=30)

데이터 섞임은 동일하게 2024로고정하겠습니다.

만약 다르게하면 조건이 동일하지 않기에 불확실한 답이 됩니다.

위에있는 하이퍼파라미터는 가지치기개념으로 볼 수 있습니다.

 

dtr.fit(X_train, y_train)

 

학습을 시킵니다 또 예측을 합니다.

 

#학습
dtr.fit(X_train, y_train)

#예측
pred3 = dtr.predict(X_test)

#rmse
mean_squared_error(y_test, pred3, squared=False)
#181.29247853838177


# 의사 결정 나무: 210.74186203651976
# 의사 결정 나무(하이퍼 파라미터 튜닝): 181.29247853838177
# 선형 회귀: 221.1987722244733
181.29247853838177 - 210.74186203651976

#-29.44938349813799

 

하이퍼파라미터를 튜닝해줄수록 성능이 좋아지는것을 알 수 있습니다. 

 

여기서 알 수 있는것

1. linearRegressor에서 데이터의 전처리와 섞임에 따라서 같은 모델이라도 성능이 달라질 수 있다.

2. 의사결정나무에서는 데이터의 형태에따라 fit한 알고리즘에 따라 더 적합할 수 있다는 점

3. 의사결정나무를 정했다고 하더라도 하이퍼파라미터 튜닝을 하게되면 성능이 더 좋아질 수 있다는 점.]

 

plot_tree로 tree모양 확인해보기

 

from sklearn.tree import plot_tree

plot_Tree 는 tree를 그려주는 모듈입니다.

plt.figure(figsize=(24,12))
plot_tree(dtr, max_depth=5, fontsize=10)
plt.show()


 

하이퍼파라미터 옵션 설명
max_depth=x 트리 고정을 설정하는것(max최대로 x까지 내려줘)
min_samples_leaf=x 의사결정 나무중 가지치기를 하다가 x가 나오면 멈추기