Saya telah mencoba memahami bagaimana cara merepresentasikan dan membentuk data untuk membuat perkiraan deret waktu multidimensional dan multivarian menggunakan Keras (atau TensorFlow) tetapi saya masih sangat tidak jelas setelah membaca banyak posting blog / tutorial / dokumentasi tentang cara menyajikan data dalam bentuk yang benar (sebagian besar contoh sedikit kurang
Kumpulan Data Saya:
- beberapa kota
- yang saya punya info tentang suhu, lalu lintas mobil, kelembaban
- untuk mengatakan 2 tahun terakhir (satu catatan untuk setiap hari)
Apa yang ingin saya lakukan: Saya ingin meramalkan untuk setiap kota suhu yang dapat saya harapkan untuk tahun depan menggunakan versi yang mungkin tertinggal suhu, lalu lintas mobil dan kelembaban (tentu saja akan ada beberapa fitur lagi tetapi ini hanya sebuah contoh untuk dipikirkan).
Yang saya bingung: Jika saya memiliki 2 kota, di mana saya mencatat 3 fitur selama 365 hari. Bagaimana saya harus membentuk input saya sehingga model dapat menampilkan perkiraan untuk 365 hari untuk dua kota ini (yaitu 2 rangkaian waktu suhu selama 365 hari)?
Secara intuitif bentuk tensor akan (?, 365, 3)
selama 365 hari dan 3 fitur. Tetapi saya tidak yakin apa yang harus dimasukkan ke dimensi pertama dan, yang paling penting, saya akan terkejut jika itu harus untuk jumlah kota. Tetapi pada saat yang sama, saya tidak tahu bagaimana menentukan ke dalam model yang harus memahami dimensi dengan benar.
Petunjuk apa pun akan sangat membantu. Saya cukup akrab dengan sisa masalah (yaitu bagaimana Anda membangun jaringan di Keras dll karena saya telah melakukan ini untuk jaringan saraf lain, tetapi lebih khusus bagaimana cara terbaik untuk menyandikan urutan untuk input yang diinginkan.)
Oh dan juga , saya kira saya bisa melatih dan memprediksi untuk setiap kota secara mandiri, tetapi saya yakin semua orang akan setuju mungkin ada hal-hal yang harus dipelajari yang tidak khusus untuk kota mana pun tetapi yang hanya dapat dilihat jika mempertimbangkan beberapa dari mereka, maka dari itu mengapa saya pikir penting untuk menyandikannya dalam model.
Jawaban:
Bentuk input untuk LSTM harus
(num_samples, num_time_steps, num_features)
. Dalam contoh kasus Anda, menggabungkan kedua kota sebagai input,num_features
akan 2x3 = 6.Jika Anda mengelompokkan semua langkah 365 waktu Anda ke dalam satu sampel, maka dimensi pertama akan menjadi 1 - satu sampel tunggal! Anda juga dapat melakukan pemeriksaan kewarasan dengan menggunakan jumlah total poin data. Anda memiliki 2 kota, masing-masing dengan 365 langkah-waktu dan 3 fitur: 2x365x3 = 2190. Ini jelas sama dengan 1x365x6 (seperti yang saya katakan di atas) - jadi itu kemungkinan (Keras akan berjalan) - tetapi jelas tidak akan belajar untuk menggeneralisasi sama sekali, hanya memberikan satu sampel.
Lihatlah pertanyaan yang relevan ini , yang baru-baru ini saya jawab. Di sana saya berbicara sedikit tentang menggunakan jendela bergulir (periksa komentar jawabannya untuk info lebih lanjut). Itu akan membeli Anda lebih banyak sampel jika Anda membutuhkannya.
Jika Anda ingin melatih model tunggal dengan data untuk kedua kota sebagai input, maka membuat prediksi untuk kedua kota pada setiap langkah waktu adalah semudah mendefinisikan
Dense
lapisan akhir , yang menghasilkan 2 unit. Data validasi / tes Anda tentunya harus mengandung tuple of (city1, city2).Cara yang mungkin lebih canggih untuk melakukan pendekatan ini adalah dengan membuat set data berdasarkan kota tunggal, kemudian melatih beberapa sub-model pada setiap kota secara individual (katakanlah untuk 5 layer), lalu
Merge
/Concatenate
mereka dan letakkan beberapa layer lebih lanjut di atas. Ini berarti Anda menggabungkan fitur yang dipelajari dari setiap kota, yang pada gilirannya digabungkan ke tingkat abstraksi yang lebih tinggi. Ini adalah gambar pertama yang saya dapatkan dari mesin pencari , yang membuat sketsa ide.sumber