почему перед внедрением нужно сделать элемент последовательным, начиная с нуля - PullRequest
0 голосов
/ 21 февраля 2020

Я изучаю совместную фильтрацию с помощью этого болга, Глубокое обучение с помощью Keras: Recommender Systems .

Учебное пособие хорошо, а код работает хорошо. Вот мой код .

Меня смущает одна вещь, сказал автор:

Поля user / mov ie в настоящее время непоследовательны целые числа, представляющие некоторый уникальный идентификатор для этого объекта. Нам нужно, чтобы они были последовательными, начиная с нуля, чтобы использовать их для моделирования (позже вы поймете, почему).

user_enc = LabelEncoder()
ratings['user'] = user_enc.fit_transform(ratings['userId'].values)
n_users = ratings['user'].nunique()

Но он, казалось, не назвал причину, мне не зачем это делать. Может кто-нибудь объяснить мне?

1 Ответ

0 голосов
/ 14 марта 2020

Вложения предполагаются последовательными.

Первый вход Embedding является входным измерением. Таким образом, если входное значение превышает входное измерение, значение игнорируется. Embedding предполагает, что максимальным значением на входе является входное измерение -1 (оно начинается с 0).

https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding?hl=ja

В качестве примера приведен следующий код сгенерирует вложения только для ввода [4,3] и пропустит ввод [7, 8], поскольку входное измерение равно 5.

Я думаю, что более понятно объяснить это с помощью tenorflow;

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding

model = Sequential()
model.add(Embedding(5, 1, input_length=2))
input_array = np.array([[4,3], [7,8]])
model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)

Вы можете увеличить входное измерение до 9, а затем получите вложения для обоих входных данных.

Можно увеличить входное измерение до максимального числа + 1 в исходном наборе данных, но это неэффективно. На самом деле это похоже на одноразовое кодирование, когда последовательные данные экономят большой объем памяти.

...