Hutan acak terlalu cocok

15

Saya mencoba menggunakan Regresi Hutan Acak di scikits-learn. Masalahnya adalah saya mendapatkan kesalahan tes yang sangat tinggi:

train MSE, 4.64, test MSE: 252.25.

Beginilah tampilan data saya: (biru: data nyata, hijau: diperkirakan):

Regresi hutan dibersihkan

Saya menggunakan 90% untuk pelatihan dan 10% untuk ujian. Ini adalah kode yang saya gunakan setelah mencoba beberapa kombinasi parameter:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

Apa strategi yang mungkin untuk meningkatkan kecocokan saya? Apakah ada hal lain yang bisa saya lakukan untuk mengekstrak model yang mendasarinya? Tampaknya luar biasa bagi saya bahwa setelah begitu banyak pengulangan dari pola yang sama model tersebut berperilaku sangat buruk dengan data baru. Apakah saya punya harapan sama sekali mencoba mencocokkan data ini?

elyase
sumber
Apakah Anda melatih fungsi periodik ini dengan sumbu x sebagai input, dan sumbu y sebagai label untuk x <= 245, dan kemudian menguji untuk x> 245? Atau apakah saya salah menafsirkan plot Anda?
rrenaud
jenis, sebenarnya sumbu x adalah indeks pengamatan, secara total ada 300 pengamatan, jadi mulai 245, yaitu data uji yang tidak digunakan untuk melatih model, vektor fitur input terdiri dari bilangan bulat, berbentuk (300,2) dan sangat mirip dengan fungsi linear dari indeks pengamatan, jadi saya tidak menambahkan info tentang hal itu agar tidak terlalu rumit pertanyaan.
elyase
1
Anda mungkin ingin menghapus siklus (bagian musiman) terlebih dahulu dari data Anda (dan tren).
R. Prost
Sudahkah Anda melihat analisis deret waktu? Tidak jelas bagi saya apa yang ada di sumbu x Anda, tetapi sepertinya berkala bagi saya. Periksa di sini dan beri tahu saya jika ini membantu: otexts.org/fpp/7/5
Bram Van Camp

Jawaban:

21

Saya pikir Anda menggunakan alat yang salah; jika seluruh X Anda setara dengan indeks, Anda pada dasarnya memiliki beberapa fungsi sampel dan mencoba memperkirakannya. Pembelajaran mesin adalah semua tentang sejarah interpolasi, sehingga tidak mengherankan bahwa skor gagal spektakuler dalam kasus ini.f:RR

Yang Anda butuhkan adalah analisis deret waktu (yaitu tren ekstraksi, analisis spektrum dan penanganan otomatis atau sisanya) atau fisika (yaitu berpikir apakah ada ODE yang dapat menghasilkan output seperti itu dan mencoba menyesuaikan parameternya melalui jumlah yang dilestarikan).


sumber
bukankah pembelajaran mesin tentang mengekstraksi model yang dapat digeneralisasi dari data? Setelah seseorang memiliki set tertentu yang interpolasi dengan baik data, kita dapat memilih yang dengan sifat ekstrapolasi / generalisasi yang lebih baik menggunakan misalnya validasi silang. Apakah ada yang salah dalam pemahaman saya?
elyase
Ekstrapolasi berbeda dari generalisasi - bayangkan Anda adalah subjek dari percobaan berikut: Anda melihat layar dan memiliki tombol merah dan hijau. Pertama, layar memperlihatkan video dari ruangan tempat Anda berada, di mana orang lain menekan tombol hijau untuk kucing, singa dan harimau ditampilkan di layar dan kemudian merah untuk serigala dan anjing dan dengan cara ini mengumpulkan 5 cookie lezat.
1
Sekarang, layar menunjukkan kucing hutan; Anda melakukan interpolasi yang tepat dan dapat digeneralisasikan dari sejarah, tekan tombol hijau dan dapatkan sengatan listrik sebagai ganti cookie. Mengapa ini terjadi? Karena solusinya adalah siklus (gggrrr) dan gambar binatang hanyalah tipuan. Anda telah melakukan hal yang sama pada hutan Anda - memancingnya menjadi reproduksi bodoh dari set latihan Anda sambil menyembunyikan informasi asli.
Contoh yang baik tetapi tidak melihatnya seperti yang Anda lakukan. Dalam contoh Anda, kami memiliki data berikut: target ( gatau r) dan 2 fitur ( index(sementara) dan animal). Dari data ini saya dapat memuat beberapa model yang dapat memberikan bobot lebih atau kurang untuk fitur 1 atau 2 (atau sama dengan keduanya). Validasi silang (dengan asumsi data cukup) harus sampai pada model dengan fitur 2 (hewan) kurang penting. Saya dapat melihat bahwa model saya overfitting data, tetapi saya masih berpikir bahwa saya harus dapat mengekstraksi model yang mengikuti pola ini (karena perilaku tidak berubah) dengan ruang model yang cukup besar.
elyase
1
Nggak; bahkan jika Anda meminta lebih banyak data, pencoba masih dapat memperluas penipuan hewan dan lebih lanjut mengaburkan pola untuk menahannya tidak jelas. Yaitu, ekstrapolasi tidak dapat dilakukan dengan pembelajaran karena menurut definisi itu memerlukan informasi yang tidak ada dalam pelatihan - dengan cara ini Anda harus menerapkan beberapa asumsi atau mengumpulkan data tambahan sehingga masalah akan menjadi interpolasi.
9

Masalah terbesar adalah bahwa pohon regresi (dan algoritma berdasarkan pada mereka seperti hutan acak) memprediksi fungsi konstan piecewise, memberikan nilai konstan untuk input yang jatuh di bawah setiap daun. Ini berarti bahwa ketika mengekstrapolasi di luar domain pelatihan mereka, mereka hanya memperkirakan nilai yang sama seperti yang mereka lakukan untuk titik terdekat di mana mereka memiliki data pelatihan. @ MBQ benar bahwa ada alat khusus untuk mempelajari deret waktu yang mungkin akan lebih baik daripada teknik pembelajaran mesin umum. Namun, hutan acak sangat buruk untuk contoh ini, dan ada teknik ML umum lainnya mungkin akan jauh lebih baik daripada apa yang Anda lihat. SVM dengan kernel nonlinier adalah salah satu opsi yang terlintas dalam pikiran. Karena fungsi Anda memiliki struktur periodik, ini juga menyarankan bekerja domain frekuensi,

Daniel Mahler
sumber
AFAIK SVM memiliki masalah hutan acak yang sama. Mereka tidak memprediksi dengan baik di luar ruang di mana mereka telah dilatih. Mungkin jaringan saraf akan menjadi solusi yang lebih baik
Donbeo
Jika data terletak pada kurva dan kernel adalah jenis yang sesuai untuk kurva itu, maka SVM akan dapat melakukan ekstrapolasi di sepanjang kurva itu. jika data memiliki tren linier, maka SVM linier akan sesuai dengan garis yang akan diekstrapolasi di sepanjang garis itu. Kernel yang lebih kompleks dapat memuat dan memperkirakan perilaku yang lebih kompleks. Itu tergantung pada jenis kernel yang tepat. Bahwa tidak menjadikan SVM alat yang tepat untuk ekstrapolasi dan prediksi TS, tetapi menjadikannya lebih baik daripada hutan acak.
Daniel Mahler
3

Ini adalah contoh buku teks untuk data yang terlalu pas, model ini bekerja sangat baik pada data yang terlatih tetapi runtuh pada data uji baru. Ini adalah salah satu strategi untuk mengatasinya: Buat validasi silang sepuluh kali lipat dari data pelatihan untuk mengoptimalkan parameter.

Langkah 1. Buat fungsi meminimalkan MSE menggunakan optimasi NM. Contohnya dapat dilihat di sini: http://glowingpython.blogspot.de/2011/05/curve-fitting-using-using-fmin.html

Langkah 2. Dalam fungsi minimisasi ini, tujuannya adalah untuk mengurangi MSE. Untuk melakukan ini, buat sepuluh kali lipat data di mana model baru dipelajari pada 9 lipatan dan diuji pada lipatan ke 10. Proses ini diulang sepuluh kali, untuk mendapatkan MSE pada setiap lipatan. UMK agregat dikembalikan sebagai hasil dari tujuan.

Langkah 3. Fmin dengan python akan melakukan iterasi untuk Anda. Periksa parameter hiper mana yang perlu disetel (n_estimators, max_features, dll.) Dan berikan kepada fmin.

Hasilnya akan menjadi parameter hiper terbaik yang akan mengurangi kemungkinan over-fitting.

Vikram
sumber
Ya, tampaknya overfitting (yang Regresi Hutan Acak biasanya tidak, maka pertanyaannya). Sekarang saya telah mengamati bahwa mengubah parameter tidak banyak berpengaruh dengan RF Regressors. Sekarang validasi silang memerlukan model dasar yang cukup fleksibel untuk dioptimalkan. Model / algoritme ML jenis apa yang Anda rekomendasikan untuk jenis data ini.
elyase
3

Beberapa saran:

  1. Setel parameter Anda menggunakan pendekatan rolling window (model Anda harus dioptimalkan untuk memprediksi nilai berikutnya dalam rangkaian waktu, bukan untuk memprediksi nilai di antara yang disediakan)
  2. Coba model lain (bahkan yang lebih sederhana, dengan pemilihan fitur yang tepat dan strategi rekayasa fitur, mungkin terbukti lebih cocok untuk masalah Anda)
  3. Cobalah untuk belajar transformasi optimal dari variabel target (tune this juga, ada kecenderungan linear / eksponensial negatif, Anda mungkin dapat memperkirakannya)
  4. Analisis spektral mungkin
  5. Maxima / minima sepertinya sama-sama berjarak. Pelajari di mana mereka diberi fitur Anda (tanpa input operator, buat algoritme temukan untuk menghilangkan bias) dan tambahkan ini sebagai fitur. Juga merekayasa fitur nearest maximum. Entahlah, itu mungkin berhasil, atau mungkin tidak, Anda hanya bisa tahu jika Anda mengujinya :)
Pembakar
sumber
Tetapi, seperti yang dikatakan oleh Daniel dalam jawabannya, hutan acak tidak akan bekerja untuk masalah semacam ini dengan desain karena tidak dapat memprediksi nilai di luar kisaran yang diamati dalam sampel kereta. Parameter tuning dll tidak akan mengarah ke mana pun.
Tim
1
Saran # 2 @Tim. Dan Random Forests tidak akan bekerja secara naif pada data ini, tetapi ekstraksi fitur yang cerdas mungkin membuatnya berfungsi.
Firebug
1

Ini masalah yang menarik. Data Anda menyarankan beberapa keteraturan (berkalax2suka fungsi) tetapi memiliki puncak tajam pada transisi. Semua ini menunjukkan model yang sedikit rumit. Saya akan memodelkan data ini dengan suksesix2 fungsi parametrized oleh koefisien dan parameter perpindahan.

Vladislavs Dovgalecs
sumber
0

Setelah membaca posting di atas, saya ingin memberikan jawaban lain yang berbeda.

Untuk model berbasis pohon, seperti hutan acak, mereka tidak dapat memperkirakan nilai di luar set pelatihan. Jadi, saya tidak berpikir itu masalah yang terlalu pas, tetapi strategi pemodelan yang salah.

Jadi, apa yang bisa kita lakukan untuk prediksi deret waktu dengan model pohon?

Cara yang mungkin adalah menggabungkannya dengan regresi linier: pertama, detrend deret waktu (atau tren pemodelan dengan regresi linier), kemudian memodelkan residual dengan pohon (residual dibatasi, sehingga model pohon dapat mengatasinya).

Selain itu, ada model pohon yang dikombinasikan dengan regresi linier dapat memperkirakan, yang disebut cubist, melakukan regresi linier pada daun.

serigala
sumber
0

Jika Anda hanya ingin memprediksi dalam batas-batas grafik, maka cukup dengan mengacak pengamatan sebelum memecah kumpulan data harus memecahkan masalah. Ini kemudian menjadi masalah interpolasi dari yang ekstrapolasi seperti yang ditunjukkan.

Deepon GhoseRoy
sumber