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?

cheesus mengatakan berhenti menembakkan mod
sumber
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:

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')
JerryTheForester
sumber