728x90
반응형

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

 

[PYTHON - 머신러닝_캐글_모델]★결정 트리★엔트로피★앙상블 학습★보팅★배깅★부스팅★랜덤

1. 결정트리(Decision tree) ==> 분류와 회귀 문제에 모두 사용 가능한 모델 ==> 머신러닝에서 결정 트리는 노드 내 데이터의 불순도를 최소화하는 방향으로 분할 한다. 불순도는 한 범주 안에 서로 다

knowallworld.tistory.com

https://knowallworld.tistory.com/375

 

[PYTHON - 머신러닝_결정트리]★예측력, 설명력★빈칸 제거_skipinitialspace★지니 인덱스★오버피팅,

1. 결정 트리(Decision Tree) ==> 관측값과 목표값을 연결시켜주는 예측 모델로서 나무 모양으로 데이터를 분류 ==> 수많은 트리 기반 모델의 기본 모델 ==> 선형 모델은 각 변수에 대한 기울기값들을

knowallworld.tistory.com

 

==> 결과 : 

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()

 

descisionTree

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

 

[PYTHON - 머신러닝_캐글_교차검증]★K-폴드 교차검증★충화 K-폴드 교차검증★folds.split(data)★

1. 교차검증 ==> 일반적으로 훈련 데이터로 모델을 훈련하고, 테스트 데이터로 예측해 모델 성능을 측정한다. ==> 모델을 훈련만 하고, 성능을 검증해 보지 않으면 2가지 문제 발생 ㉠ 모델이 과대

knowallworld.tistory.com

 

728x90
반응형

+ Recent posts