Algoritma pohon regresi dengan model regresi linier di setiap daun


14

Versi pendek: Saya mencari paket R yang dapat membangun pohon keputusan sedangkan setiap daun di pohon keputusan adalah model Regresi Linier penuh. AFAIK, perpustakaan rpartmembuat pohon keputusan di mana variabel dependen konstan di setiap daun. Apakah ada perpustakaan lain (atau rpartpengaturan yang saya tidak sadari) yang dapat membangun pohon seperti itu?

Versi panjang: Saya mencari algoritme yang membangun pohon keputusan berdasarkan kumpulan data pelatihan. Setiap keputusan di pohon membagi data pelatihan yang ditetapkan menjadi dua bagian, sesuai dengan kondisi pada salah satu variabel independen. Akar pohon berisi kumpulan data lengkap, dan setiap item dalam kumpulan data terkandung persis dalam satu simpul daun.

Algoritmanya seperti ini:

  1. Mulailah dengan dataset lengkap, yang merupakan simpul akar dari pohon. Memilih node ini dan menyebutnya N .
  2. Membuat model Regresi Linier pada data di .N
  3. Jika dari model linier lebih tinggi dari beberapa ambang , maka kita selesai dengan , jadi tandai sebagai daun dan lompat ke langkah 5. N θ R 2 N NR2NθR2NN
  4. Coba n putuskan secara acak, dan pilih yang menghasilkan R2 di subnode:
    • Pilih variabel independen acak vi , serta ambang acak θi .
    • Keputusan viθi membagi kumpulan data N menjadi dua node baru, N^ dan N~ .
    • Buat model Regresi Linier pada dan , dan hitung mereka (sebut saja dan ). ~ N R2 r ~ rN^N~R2r^r~
    • Dari semua tupel , pilih yang dengan maksimum . Ini menghasilkan keputusan baru di pohon, dan memiliki dua subnode baru dan .( v i , θ i , r , ~ r ) m i n ( r , ~ r ) N N ~ Nn(vi,θi,r^,r~)min(r^,r~)NN^N~
  5. Kami memiliki selesai pengolahan . Pilih node yang belum diproses dan kembali ke langkah 2. Jika semua node telah diproses, algoritma berakhir.NNN

Ini akan secara rekursif membangun pohon keputusan yang membagi data menjadi bagian-bagian yang lebih kecil, dan menghitung Model Linier pada masing-masing bagian tersebut.

Langkah 3 adalah kondisi keluar, yang mencegah algoritma overfitting. Tentu saja, ada kemungkinan kondisi keluar lainnya:

  • Keluar jika kedalaman di pohon di atasNθdepth
  • Keluar jika kumpulan data dalam lebih kecil dariNθdataset

Apakah ada algoritma seperti itu dalam paket R?


4
Lihatlah paket pesta dan lihat apakah ini sesuai dengan kebutuhan Anda. Itu dapat menangani sejumlah jenis model di simpul pohon IIRC.
Reinstate Monica - G. Simpson

Jawaban:


11

Walaupun mereka bekerja secara berbeda dari algoritma Anda, saya yakin Anda akan menemukan mob () dan FTtree menarik. Untuk massa Zeileis lihat http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf Untuk FTtree, pohon fungsional Gama, implementasi tersedia di Weka dan dengan demikian RWeka. Lihat http://cran.r-project.org/web/packages/RWeka/index.html untuk detailnya.


1
+1 untuk mob, yang memungkinkan memasukkan hampir semua model ke dalam kerangka partisi rekursif
etov

8

Paket RWeka menawarkan banyak metode regresi. Di antara mereka, Anda dapat menemukan M5P (M5 Prime), yang merupakan model regresi berbasis pohon dengan persamaan linear dalam daun. Untuk detail lebih lanjut tentang metode M5, lihat publikasi .

Contoh kode adalah:

library(RWeka)
M5_model = M5P (Dep_var ~ ., data = train, control = Weka_control(N=F, M=10))
train_predicted = predict(M5_model, train)
test_predicted = predict(M5_model, test)

Jika Anda ingin menggunakan ensemble bagging dengan metode M5, coba sesuatu seperti:

M5_bag = Bagging(Dep_var ~ ., data = train, control = Weka_control(P=100, I = 100, W = list("weka.classifiers.trees.M5P", M = 4)))

Untuk melihat opsi kontrol untuk model M5P, coba:

WOW(M5P)

Jika Anda ingin mengoptimalkan metode M5, ada solusi untuk itu dalam caretpaket:

library(caret)
Optimization = train (Dep_var ~ .,data = train, method = 'M5')

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.