tensorflow, keras) 정형 데이터를 이용하여 모델 만들기
2022. 1. 8. 15:35ㆍ분석 Python/Tensorflow
목차
umap에서 ParametricUMAP 을 사용하기 위해서는 keras 모델을 만들어야 하는데, 정형데이터를 임베딩해서 적용해보고 싶어서, 테스트를 하는 도중에 나온 결과물을 정리한다.
결론적으로 현재(22/01/08)는 umap에서 dict 데이터 타입을 지원하지 않고, 오로지 array 형태로만 가능하기 때문에, 사용할수가 없었다.
데이터를 one-hot으로 해서 하는 방법이 있겠지만, 차원 축소를 할 때 임베딩도 차원 축소할 때 학습시키고자 했기 때문에 좀 더 라이브러리가 개선되면 그때 다시 시도해봐야겠다. 아니면 일부 코드를 뜯어내서 수정하거나...
이러한 예시는 tensorflow에서 더 잘되어 있긴 하지만, 간단하게 구현해놔서 정리만 해둔다.
라이브러리 호출
import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.preprocessing import LabelEncoder
Column 별로 전처리 나눠서 진행하기
df = pd.read_csv("./data/adult.csv")
categorical_columns = list(df.select_dtypes("object"))
continuous_columns = [i for i in list(df) if i not in categorical_columns]
feature_columns = []
inputs = {}
for col in continuous_columns :
feature_columns.append( tf.feature_column.numeric_column(col))
inputs[col] = tf.keras.Input(shape=(1,), name=col, dtype=tf.dtypes.float32)
for col in categorical_columns :
le = LabelEncoder()
le.fit(df[col])
df[col] = le.transform(df[col])
#df[col] = df[col].astype(np.float32)
unique_v = df[col].unique().tolist()
_col = tf.feature_column.categorical_column_with_vocabulary_list(col,unique_v)
_emb = tf.feature_column.embedding_column(_col,4)
feature_columns.append(_emb)
inputs[col] = tf.keras.Input(shape=(1,), name=col, dtype=tf.dtypes.int32)
feature_layer = tf.keras.layers.DenseFeatures(feature_columns)
일반적인 Keras 모델로 모델 만들기
n_components = 2
x = feature_layer(inputs)
x = tf.keras.layers.Dense(128, activation='relu')(x)
x = tf.keras.layers.Dense(128, activation='relu')(x)
x = tf.keras.layers.Dropout(.1)(x)
out = tf.keras.layers.Dense(n_components)(x)
encoder = tf.keras.Model(inputs=dict(inputs), outputs=out)
encoder.summary()
Keras Custom Model 만들기
class TabularModel(tf.keras.Model):
def __init__(self):
super(TabularModel, self).__init__()
self.feature_layer = feature_layer
self.n_components = 2
def call(self, tensor_array):
x = self.feature_layer(tensor_array)
x = tf.keras.layers.Dense(128, activation='relu')(x)
x = tf.keras.layers.Dense(128, activation='relu')(x)
x = tf.keras.layers.Dropout(.1)(x)
out = tf.keras.layers.Dense(self.n_components)(x)
return out
https://umap-learn.readthedocs.io/en/latest/parametric_umap.html
https://www.tensorflow.org/tutorials/structured_data/feature_columns?hl=ko
728x90
'분석 Python > Tensorflow' 카테고리의 다른 글
[Keras] EarlyStopping 및 Model 저장하기 (0) | 2020.11.21 |
---|---|
[Keras] Weighted Cross Entropy 적용하는 방법 (0) | 2020.11.21 |
Mixture Density NeuralNetwork 예제 (0) | 2020.05.21 |
tf.layers.dense 알아보기 (tf.tensordot ,tf.matmul) (0) | 2020.04.24 |
Learning from Multimodal Target 리뷰 (MDN)(Tensorflow) (0) | 2020.04.19 |