[LightGBM활용_Kaggle-타이타닉-04] 모델 돌려보기(단독_ Descision Tree)
1. 피처별 비교
1. 피처별 상관계수 비교
import matplotlib.pyplot as plt
import seaborn as sns
# 서브플롯을 생성할 크기 설정
plt.figure(figsize=(12, 8))
# 피처들의 리스트
features = features2
# 피처들에 대한 countplot 그리기
for i, feature in enumerate(features):
plt.subplot(4, 4, i+1)
sns.countplot(x=feature, hue='Survival', data=all_data)
plt.title(f'{feature} - Survived Countplot')
# 레이아웃 조정
plt.tight_layout()
# 그래프 출력
plt.show()
import seaborn as sns
# 피처들의 리스트
features = features
# 각 피처별 'Survived'와의 상관계수 계산
correlations = all_data[features + ['Survival']].corr()
# filtered_correlations = correlations[correlations['Survival'].abs() >= 0.2]
# 상관계수 히트맵 시각화
plt.figure(figsize=(10, 8))
sns.heatmap(correlations, annot=True, cmap='RdYlBu')
plt.title("Correlation Heatmap")
# 그래프 출력
plt.show()
2. 범주형 피처, 연속형 피처 분류
# 범주형 변수의 원래 이름을 추출합니다.
#
nom_feature_names = []
for feature in nom_feature:
categories = onehot_encoder.categories_[nom_feature.index(feature)]
for category in categories:
nom_feature_names.append(f"{feature}_{category}")
# 결과를 출력합니다.
print(nom_feature_names)
['Name_0', 'Name_1', 'Name_2', 'Name_3', 'Name_4', 'Name_5', 'Name_6', 'Age_binned_0대', 'Age_binned_10대', 'Age_binned_20대', 'Age_binned_30대', 'Age_binned_40대', 'Age_binned_50대', 'Age_binned_60대', 'Age_binned_70대', 'Sex_0', 'Sex_1', 'Embarked_0', 'Embarked_1', 'Embarked_2', 'Cabin_0', 'Cabin_1', 'Cabin_2', 'Cabin_3', 'Cabin_4', 'Cabin_5', 'Cabin_6', 'Cabin_7', 'Cabin_8']
2-1> OneHotEncoder()
from sklearn.preprocessing import OneHotEncoder
onehot_encoder = OneHotEncoder() # 원-핫 인코더 생성
nom_feature = ['Name','Age_binned','Sex' , 'Embarked', 'Cabin']
encoded_nom_matrix = onehot_encoder.fit_transform(all_data[nom_feature])
print(type(encoded_nom_matrix))
encoded_nom_matrix
<class 'scipy.sparse.csr.csr_matrix'>
<1309x29 sparse matrix of type '<class 'numpy.float64'>'
with 6545 stored elements in Compressed Sparse Row format>
2-2> matrix화 ==> 부스팅 모델 돌리기 위해서는 행렬화 해야한다.
from scipy import sparse
all_data_sprs = sparse.hstack([sparse.csr_matrix(all_data2),
encoded_nom_matrix],
format='csr')
all_data_sprs
<1309x32 sparse matrix of type '<class 'numpy.float64'>'
with 10471 stored elements in Compressed Sparse Row format>
2-3> X(train값) , X_test(예측에 사용할 값) , y값 지정
num_train = len(train) # 훈련 데이터 개수
# 훈련 데이터와 테스트 데이터 나누기
X= all_data_sprs[:num_train] # 0~num_train -1 행
X_test = all_data_sprs[num_train:] # num_train ~ 마지막 행
y = train['Survived'].values
3. Descision Tree 모델 사용하기
3-1> 데이터 분할 하기
from sklearn.model_selection import train_test_split
# 데이터 분할
X_train , X_valid , y_train, y_valid = train_test_split(X,y, test_size = 0.2, random_state=0)
3-2> Descision Tree 학습
1. 의사 결정 트리(Decision Tree)는 지도 학습(Supervised Learning)의 분류(Classification)와 회귀(Regression) 문제에 널리 사용되는 알고리즘
2. 의사 결정 트리는 데이터의 특성을 기반으로 하여 학습 데이터를 분할하는 규칙을 학습하고, 이를 통해 새로운 데이터를 예측하는 모델을 생성
3. 의사 결정 트리는 트리 구조를 사용하여 데이터를 분할하는 과정을 진행합니다. 트리의 각 내부 노드는 특정 특성(feature)을 기준으로 데이터를 분할하며, 리프 노드(말단 노드)는 예측 결과를 가지고 있습니다. 분할 기준은 정보 이득(Information Gain)이나 지니 불순도(Gini Impurity) 등의 지표를 사용하여 결정됩니다.
의사 결정 트리 특징:
1. 해석력:
==> 의사 결정 트리는 분류 및 회귀 규칙을 직관적으로 이해할 수 있어 해석력이 높습니다.
2. 비선형 분할:
==> 의사 결정 트리는 데이터의 비선형 관계를 잘 모델링할 수 있습니다.
3. 자동 변수 선택:
==> 의사 결정 트리는 분류나 회귀에서 특성 선택을 자동으로 수행합니다.
4. 과적합 경향:
==> 의사 결정 트리는 학습 데이터에 과적합(Overfitting)될 수 있는 경향이 있습니다. 이를 방지하기 위해 가지치기(Pruning) 등의 방법을 사용합니다.
의사 결정 트리는 분류 문제에서는 클래스를 예측하고, 회귀 문제에서는 연속적인 값을 예측하는데 사용됩니다. 알고리즘의 간단함과 해석력을 고려할 때, 의사 결정 트리는 다양한 분야에서 널리 활용되고 있습니다.
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
dt_model = DecisionTreeClassifier()
# 그리드 서치를 위한 하이퍼파라미터 그리드 준비
param_grid = {
'max_depth': [None, 1, 3, 5, 7, 10],
'min_samples_split': [2, 3, 5, 7, 10],
'min_samples_leaf': [0.5,1, 2, 3, 4, 5]
}
# 그리드 서치 객체 생성
grid_search = GridSearchCV(dt_model, param_grid, cv=10 , n_jobs=-1)
# 그리드 서치 수행
grid_search.fit(X_train, y_train)
# 최적의 모델 및 파라미터 출력
best_model_grid_search_dc = grid_search.best_estimator_
best_params_grid_search_dc = grid_search.best_params_
print("Best Model:", best_model_grid_search_dc)
print("Best Parameters:", best_params_grid_search_dc)
https://knowallworld.tistory.com/388
https://knowallworld.tistory.com/375
==> 결과 :
Best Model: DecisionTreeClassifier(max_depth=3)
Best Parameters: {'max_depth': 3, 'min_samples_leaf': 1, 'min_samples_split': 2}
y_preds = best_model_grid_search_dc.predict(X_test)
y_preds
3-3> Descision Tree 학습에 대한 이해
from sklearn.tree import plot_tree
fig = plt.figure(figsize = (30,15)) # 그래프 크기 설정
ax =plot_tree(best_model_grid_search_dc, max_depth=3, fontsize=15)
# 트리 그래프 출력
plt.show()
param_grid = {
'max_depth': [None, 1, 3, 5, 7, 10],
'min_samples_split': [2, 3, 5, 7, 10],
'min_samples_leaf': [0.5,1, 2, 3, 4, 5]
}
param_grid는 Decision Tree의 하이퍼파라미터들을 탐색하기 위한 그리드(grid) 형태의 값입니다. 각 하이퍼파라미터들에 대해 탐색할 수 있는 여러 가지 옵션들을 지정하여 그리드 서치를 수행할 때 사용됩니다.
- max_depth: 트리의 최대 깊이를 지정합니다. None으로 설정하면 깊이에 제한이 없습니다. 정수 값으로 깊이를 제한할 수도 있습니다.
- min_samples_split: 노드를 분할하기 위해 필요한 최소 샘플 수를 지정합니다. 작은 값으로 설정하면 분할이 더 자주 일어나고, 큰 값으로 설정하면 분할이 덜 일어납니다.
- min_samples_leaf: 리프 노드가 가져야하는 최소 샘플 수를 지정합니다. 작은 값으로 설정하면 더 세분화된 트리가 생성되고, 큰 값으로 설정하면 더 일반화된 트리가 생성됩니다.
param_grid에 지정된 각 값들은 그리드 서치 과정에서 조합되어 모든 가능한 하이퍼파라미터 조합에 대한 트리 모델이 학습되고 평가됩니다. 그리드 서치는 각 조합에 대해 교차 검증을 수행하고, 최적의 성능을 가진 하이퍼파라미터 조합을 선택합니다.
3-4> Descision Tree 의 교차검증
이미 K-Fold 교차 검증을 적용하고 있습니다. GridSearchCV 함수의 cv 매개변수를 5로 설정하여 5-Fold 교차 검증을 수행하고 있습니다. cv 매개변수를 원하는 K 값으로 변경하여 다른 K-Fold 값에서 교차 검증을 수행할 수 있습니다.
따라서, 위의 코드는 이미 K-Fold 교차 검증을 시행하고 있으며, 각 Fold에서의 최적 모델과 파라미터를 출력하고 있습니다.
https://knowallworld.tistory.com/386
'머신러닝 > LightGBM' 카테고리의 다른 글
[LightGBM()활용]GridSearch 활용한 하이퍼파라미터 값 알아보기★불순도,순수도★클래스 (0) | 2023.05.28 |
---|---|
[LightGBM활용_Kaggle-타이타닉-05] 모델 돌려보기(단독_ GridSearch 활용하여 최적하이퍼파라미터 찾기) (0) | 2023.05.23 |
[LightGBM활용_Kaggle-타이타닉-03] 피처별 전처리하기★pd.cut (0) | 2023.05.20 |
[LightGBM활용_Kaggle-타이타닉-02] 피처별 전처리하기 (1) | 2023.05.20 |
[LightGBM활용_Kaggle-타이타닉-01] EDA 및 전처리하기 (0) | 2023.05.20 |