딥러닝을 위한 특징 벡터 인코딩
신경망은 다양한 유형의 데이터를 받아들일 수 있다. 테이블 형식의 데이터는 Microsoft Excel에서 일반적으로 볼 수 있는 데이터이다. 신경망에는 숫자 입력이 필요하다. 이 숫자 형식을 특징 벡터 (feature vector)라고 한다. 각 입력 뉴런은 이 벡터로부터 하나의 특징 (또는 열)을 받는다. 훈련 데이터의 각 행은 일반적으로 하나의 벡터가 된다.
import pandas as pd
pd.set_option ('display.max_columns', 7)
pd.set_option ('display.max_rows', 5)
df = pd.read_csv("https://data.heatonresearch.com/data/t81-558/jh-simple-dataset.csv",
na_values = ['NA', '?'])
pd.set_option('display.max_columns', 9)
pd.set_option('display.max_rows', 5)
display(df)
• 대상 열은 예측하려는 열이다. 이 필드는 누군가가 구매한 제품을 지정합니다. • ID 열이 있다. 그의 열에는 예측에 유용한 정보가 포함되어 있지 않으므로 제외해야 한다. • 이러한 필드 중 다수는 숫자이므로 추가 처리가 필요하지 않을 수 있다. • 소득 열에 일부 누락된 값이 있다. • 직업, 지역, 제품 등 범주형 값이 있다. |
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
dummies = pd.get_dummies(df['job'], prefix = "job")
print(dummies.shape)
pd.set_option('display.max_columns', 9)
pd.set_option('display.max_rows', 10)
display(dummies)
직업 코드가 33개이므로 더미 변수는 33개이다. 또한, 작업 코드 (ex: "ax") 자체는 그다지 의미가 없기 때문에 접두사를 지정한다. "job_ax"와 같은 항목도 이 필드의 출처를 알려준다.
다음으로 이러한 더미를 기본 데이터 프레임에 다시 병합해야 한다. 또한, 이제 더미를 표시하므로 원래의 "job" 필드도 삭제한다.
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
df = pd.concat([df, dummies ], axis = 1)
df.drop('job', axis = 1, inplace = True)
pd.set_option('display.max_columns', 9)
pd.set_option('display.max_rows', 10)
display(df)
또한, area 열에 대한 더미 변수를 도입한다.
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
df = pd.concat([df, pd.get_dummies(df['area'], prefix = "area")], axis = 1)
df.drop('area', axis = 1, inplace = True)
pd.set_option('display.max_columns', 9)
pd.set_option('display.max_rows', 10)
display(df)
마지막 남은 변환은 누락된 소득 값을 채우는 것이다.
med = df['income'].median()
df['income'] = df['income'].fillna(med)
결측값을 채우는 고급 방법이 있지만 더 많은 분석이 필요하다. 다른 분야에서 소득이 무엇인지 암시할 수 있는지 알아보는 것이 아이디어이다. 예를 들어, 각 지역이나 직종에 대한 중위소득을 계산하는 것이 도움이 될 수 있습니다.
이제 Pandas 데이터프레임을 신경망 훈련을 위해 Numpy로 변환할 준비가 되었다. x (예측자 또는 입력)와 y (목표)를 구성할 열 목록을 알아야 한다. 전체 열 목록은 다음과 같다.
print(list(df.columns))
['id', 'income', 'aspect', 'subscriptions', 'dist_healthy', 'save_rate', 'dist_unhealthy', 'age', 'pop_dense', 'retail_dense', 'crime', 'product', 'job_11', 'job_al', 'job_am', 'job_ax', 'job_bf', 'job_by', 'job_cv', 'job_de', 'job_dz', 'job_e2', 'job_f8', 'job_gj', 'job_gv', 'job_kd', 'job_ke', 'job_kl', 'job_kp', 'job_ks', 'job_kw', 'job_mm', 'job_nb', 'job_nn', 'job_ob', 'job_pe', 'job_po', 'job_pq', 'job_pz', 'job_qp', 'job_qw', 'job_rn', 'job_sa', 'job_vv', 'job_zz', 'area_a', 'area_b', 'area_c', 'area_d']
이 데이터에는 목표와 예측 변수가 모두 포함된다. 대상이 제거된 목록이 필요하다. 예측에 유용하지 않기 때문에 id도 제거한다.
x_columns = df.columns.drop('product').drop('id')
print(list(x_columns))
['income', 'aspect', 'subscriptions', 'dist_healthy', 'save_rate', 'dist_unhealthy', 'age', 'pop_dense', 'retail_dense', 'crime', 'job_11', 'job_al', 'job_am', 'job_ax', 'job_bf', 'job_by', 'job_cv', 'job_de', 'job_dz', 'job_e2', 'job_f8', 'job_gj', 'job_gv', 'job_kd', 'job_ke', 'job_kl', 'job_kp', 'job_ks', 'job_kw', 'job_mm', 'job_nb', 'job_nn', 'job_ob', 'job_pe', 'job_po', 'job_pq', 'job_pz', 'job_qp', 'job_qw', 'job_rn', 'job_sa', 'job_vv', 'job_zz', 'area_a', 'area_b', 'area_c', 'area_d']
'DNN with Keras > Training for Tabular Data' 카테고리의 다른 글
Multiclass Classification Error Metrics (0) | 2024.03.06 |
---|---|
ROC 및 AUC를 사용한 다중클래스 분류 (0) | 2023.11.07 |
신경망을 위한 X 및 Y 생성 (0) | 2023.11.07 |