[LightGBM활용_Kaggle-타이타닉-03] 피처별 전처리하기★pd.cut
https://knowallworld.tistory.com/442
[LightGBM활용_Kaggle-타이타닉-02] 피처별 전처리하기
1. 피처별 전처리하기! 1. 'AGE' 열의 Null 값에 대한 전처리 하기 binary_col = [] object_col = [] for i in all_data.columns.tolist(): if all_data[i].dtype in ['int64' , 'float64']: binary_col.append(i) else: object_col.append(i) ==> 우선
knowallworld.tistory.com
==> 2편
1. 피처별 전처리하기
1. Fare에 대한 전처리
width = (max(all_data_bin['Fare']) - min(all_data_bin['Fare'])) / K #계급 간격 구하는 공식
bins = np.arange(min(all_data_bin['Fare']), max(all_data_bin['Fare']), width)
hist, bins = np.histogram(all_data_bin['Fare'], bins)
print(hist)
print(bins)
plt.hist(all_data_bin['Fare'], bins , rwidth = 0.8 , color = 'green' , alpha = 0.5)
plt.xlabel('Fare 양적자료' , fontsize = 14)
plt.xticks(fontsize = 14)
plt.yticks(fontsize = 14)
https://knowallworld.tistory.com/197
★양적자료의 요약★점도표, 도수분포표 , 특이점,계급 , 계급의 수★도수히스토그램★기초통계
점도표 : 각 범주 또는 측정값을 수평축에 나타내고, 이 수평축 위에 각 범주 또는 측정값의 관찰 횟수를 점으로 나타낸 것이다. ==> 원자료의 특성을 그림으로 나타내는 가장 간단한 방법 ==> 양
knowallworld.tistory.com
==> 계급값 및 HISTOGRAM 구하는 공식

==> 시각화 결과를 보면 Fare의 경우 왜도값이 심하게 기울어져 있음을 알 수 있다.
==> 전처리를 해주자.(난 log화 해줄 것이다.)
width = (max(all_data_bin['log_Fare']) - min(all_data_bin['log_Fare'])) / K #계급 간격 구하는 공식
print(f'width : {width}')
print(max(all_data_bin['log_Fare']))
print(min(all_data_bin['log_Fare']))
bins = np.arange(min(all_data_bin['log_Fare']), max(all_data_bin['log_Fare']), width)
hist, bins = np.histogram(all_data_bin['log_Fare'], bins)
print(f'hist : {hist}')
print(f'bins : {bins}')
plt.hist(all_data_bin['log_Fare'], bins , rwidth = 0.8 , color = 'green' , alpha = 0.5)
plt.xlabel('log화 한 계급간격' , fontsize = 14)
plt.xticks(fontsize = 14)
plt.yticks(fontsize = 14)

==> 왜도값 조절이 잘되었다.
labels = [f"{bins[i]:.1f}~{bins[i+1]:.1f}" for i in range(len(bins)-1)]
# train['Fare'] 값을 labels에 맞게 범주형으로 변환
all_data_bin['Fare_binned_범위'] = pd.cut(all_data_bin['log_Fare'], bins=len(labels), labels=labels , ordered=False)
# train 데이터프레임 내용 확인
all_data_bin

pd.cut
==> 데이터 값들을 특정 구간에 따라서 범주화
==> 범주를 나누고 라벨을 붙여서 범주형 데이터로 변환 가능
==>연속 데이터를 구간별로 범주화하는 함수
2. AGE에 대한 전처리
width = (max(all_data_bin['Age']) - min(all_data_bin['Age'])) / 10 #계급 간격 구하는 공식
# width = np.arange(0,90,10)
print(f'width : {width}')
print(max(all_data_bin['Age']))
print(min(all_data_bin['Age']))
bins = np.arange(0,90,AGG)
hist, bins = np.histogram(all_data_bin['Age'], bins)
print(f'hist : {hist}')
print(f'bins : {bins}')
plt.hist(all_data_bin['Age'], bins , rwidth = 0.8 , color = 'green' , alpha = 0.5)
plt.xlabel('연령대 별 계급간격' , fontsize = 14)
plt.xticks(fontsize = 14)
plt.yticks(fontsize = 14)

3. Merge 합치기
all_data2 = pd.merge(all_data_obj , all_data_bin2, how='outer' , on=('PassengerId'))
all_data2 = all_data2[['Name','Sex' , 'Embarked' ,'Age_binned', 'Pclass' ,'SibSp' , 'Parch' , 'Cabin' , 'Fare_binned_범위']]
columns_1 = all_data2.columns.tolist()
all_data2

2. Scaling 하기
1. OneHotEncoder
from sklearn.preprocessing import OneHotEncoder
onehot_encoder = OneHotEncoder() # 원-핫 인코더 생성
nom_feature = ['Name','Sex' , 'Embarked', 'Cabin' , 'Fare_binned_범위']
encoded_nom_matrix = onehot_encoder.fit_transform(all_data2[nom_feature])
print(type(encoded_nom_matrix))
encoded_nom_matrix
encoded_nom_matrix
#%%
# 범주형 변수의 원래 이름을 추출합니다.
#
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)

import matplotlib.pyplot as plt
import seaborn as sns
# 그래프 크기 설정
plt.figure(figsize=(12, 6))
# 그래프 그리기
ax = sns.countplot(x='Fare_binned', hue='Survival', data=all_data2)
# x 축 값이 잘 보이도록 설정
ax.tick_params(axis='x', labelrotation=45)
# 그래프 출력
plt.show()

==> 로그화한 Fare에 대해 구간별로 나누기
'머신러닝 > LightGBM' 카테고리의 다른 글
| [LightGBM활용_Kaggle-타이타닉-05] 모델 돌려보기(단독_ GridSearch 활용하여 최적하이퍼파라미터 찾기) (0) | 2023.05.23 |
|---|---|
| [LightGBM활용_Kaggle-타이타닉-04] 모델 돌려보기(단독_ Descision Tree) (0) | 2023.05.23 |
| [LightGBM활용_Kaggle-타이타닉-02] 피처별 전처리하기 (1) | 2023.05.20 |
| [LightGBM활용_Kaggle-타이타닉-01] EDA 및 전처리하기 (0) | 2023.05.20 |
| [PYTHON - 머신러닝_LightGBM-02]랜덤 그리드 서치★L1정규화★L2정규화★LGBMClassifer()와 train()의 차이 (0) | 2023.01.27 |