본문 바로가기
DNN with Keras/Training for Tabular Data

딥러닝을 위한 특징 벡터 인코딩

by goatlab 2023. 11. 7.
728x90
반응형
SMALL

딥러닝을 위한 특징 벡터 인코딩

 

신경망은 다양한 유형의 데이터를 받아들일 수 있다. 테이블 형식의 데이터는 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']
728x90
반응형
LIST