Не понимать, как реализовать вложения для категориальных функций

1

Из различных примеров, которые я нашел в Интернете, я все еще не совсем понимаю, как создавать слои внедрения из моих категориальных данных для моделей нейронных сетей, особенно когда у меня есть сочетание числовых и категориальных данных. Например, взяв данные, как показано ниже:

numerical_df = pd.DataFrame(np.random.randint(0,100,size=(100, 3)), columns=['num_1','num_2','num_3'])

cat_df = pd.DataFrame(np.random.randint(0,5,size=(100, 3)), columns=['cat_1','cat_2','cat_3'])

df = numerical_df.join(cat_df)

Я хочу создать слои внедрения для своих категориальных данных и использовать их в сочетании с моими численными данными, но из всех примеров, которые я видел, почти так же, как модель, просто фильтрует весь набор данных через слой внедрения, что запутывает.

В качестве примера моей путаницы ниже приведен пример документации Keras по последовательным моделям. Как будто они просто добавляют шаг внедрения в качестве первого слоя и подгоняют его ко всему x_train.

from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.layers import Embedding
from keras.layers import LSTM

max_features = 1024

model = Sequential()
model.add(Embedding(max_features, output_dim=256))
model.add(LSTM(128))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x_train, y_train, batch_size=16, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=16)

Итак, в конечном счете, когда дело доходит до создания матриц встраивания, существует ли одна из категориальных переменных... одна для всех категориальных переменных? И как мне смириться с другими моими данными, которым не нужна матрица внедрения?

Теги:
data-science
keras
neural-network

1 ответ

1

Чтобы объединить категориальные данные с числовыми данными, ваша модель должна использовать несколько входов с использованием функционального API. Один для каждой категориальной переменной и один для числовых входов. Его до вас, как вы хотите объединить все эти данные вместе, но я предполагаю, что имеет смысл просто объединить все вместе, а затем продолжить с остальной частью вашей модели.

numerical_in = Input(shape=(3,))
cat_in       = Input(shape=(3,))
embed_layer  = Embedding(input_dim=5, output_dim=3, input_length=3)(cat_in)
embed_layer  = Flatten(embed_layer)
merged_layer = concatenate([numerical_in, embed_layer])
output       = rest_of_your_model(merged_layer)
model        = Model(inputs=[numerical_in, cat_in], outputs=[output])

...

model.fit(x=[numerical_df, cat_df], y=[your_expected_out])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню