多くのユーザー(nUsers)からのデータセットがあります。各ユーザーは時間的にランダムにサンプリングされます(各ユーザーのnSamplesは一定ではありません)。各サンプルにはいくつかの機能(nFeatures)があります。例えば:
nUsers = 3 ---> 3ユーザー
nSamples = [32、52、21] --->最初のユーザーが32回サンプリングされました。2番目のユーザーが52回サンプリングされました。
nFeatures = 10 --->各サンプルの特徴の定数。
LSTMに、現在の機能と同じユーザーの以前の予測に基づいて現在の予測を生成してもらいたいです。 LSTMレイヤーを使用してKerasでそれを行うことはできますか?私には2つの問題があります:
ご協力いただきありがとうございます!
各ユーザーはシーケンスのように聞こえるので、ユーザーが問題の「バッチサイズ」である可能性があります。したがって、最初は_nExamples = nUsers
_です。
問題を正しく理解した場合(次の要素を予測する場合)、「振り返る」の最大長を定義する必要があります。たとえば、前の7つの要素を見て(シーケンス全体を見ていない)、次の要素を予測できるとします。
そのためには、次のようにデータを分離する必要があります。
_example 1: x[0] = [s0, s1, s2, ..., s6] | y[0] = s7
example 2: x[1] = [s1, s2, s3, ..., s7] | y[1] = s8
_
ここで、sn
は10個の機能を備えたサンプルです。通常、ユーザーを混在させるかどうかは関係ありません。すべてのユーザーのためにこれらの小さなセグメントを作成し、すべてをまとめます。
これにより、次のような形状の配列になります
_x.shape -> (BatchSize, 7, 10) -> (BatchSize, 7 step sequences, 10 features)
y.shape -> (BatchSize, 10)
_
次の機能セットを予測するのではなく、何かを予測するだけかもしれません。その場合は、yを必要な値に置き換えてください。単一の結果が必要な場合は、y.shape -> (BatchSize,)
になる可能性があります。
ここで、(前のn個の要素ではなく)予測のためにシーケンス全体が必要な場合は、最大長を定義してシーケンスをパディングする必要があります。
あなたの例のように、あなたの最長のシーケンスが52であると仮定します。
_x.shape -> (Users, 52, 10).
_
次に、空白を埋めるためにシーケンスを「パディング」する必要があります。
たとえば、シーケンスの先頭を次のようなゼロの特徴で埋めることができます。
_x[0] = [s0, s1, s2, ......., s51] -> user with the longest sequence
x[1] = [0 , 0 , s0, s1, ..., s49] -> user with a shorter sequence
_
または(これが機能するかどうかはわかりませんが、テストしたことはありません)、末尾をゼロ値で埋めて、 マスキングレイヤー を使用します。これは、Kerasが「可変長シーケンス」に対して持っているものです。引き続き固定サイズの配列を使用しますが、内部的にはゼロ値を破棄します(?)。