Saya akan menjelaskan masalah saya dengan sebuah contoh. Misalkan Anda ingin memprediksi penghasilan seseorang yang diberikan beberapa atribut: {Usia, Jenis Kelamin, Negara, Wilayah, Kota}. Anda memiliki dataset pelatihan seperti itu
train <- data.frame(CountryID=c(1,1,1,1, 2,2,2,2, 3,3,3,3),
RegionID=c(1,1,1,2, 3,3,4,4, 5,5,5,5),
CityID=c(1,1,2,3, 4,5,6,6, 7,7,7,8),
Age=c(23,48,62,63, 25,41,45,19, 37,41,31,50),
Gender=factor(c("M","F","M","F", "M","F","M","F", "F","F","F","M")),
Income=c(31,42,71,65, 50,51,101,38, 47,50,55,23))
train
CountryID RegionID CityID Age Gender Income
1 1 1 1 23 M 31
2 1 1 1 48 F 42
3 1 1 2 62 M 71
4 1 2 3 63 F 65
5 2 3 4 25 M 50
6 2 3 5 41 F 51
7 2 4 6 45 M 101
8 2 4 6 19 F 38
9 3 5 7 37 F 47
10 3 5 7 41 F 50
11 3 5 7 31 F 55
12 3 5 8 50 M 23
Sekarang anggaplah saya ingin memprediksi pendapatan orang baru yang tinggal di City 7. Set pelatihan saya memiliki 3 sampel kekalahan dengan orang-orang di City 7 (anggap ini banyak) jadi saya mungkin dapat menggunakan penghasilan rata-rata di City 7 untuk prediksi pendapatan individu baru ini.
Sekarang anggaplah saya ingin memprediksi pendapatan orang baru yang tinggal di City 2. Set pelatihan saya hanya memiliki 1 sampel dengan City 2 sehingga pendapatan rata-rata di City 2 mungkin bukan prediktor yang andal. Tapi saya mungkin bisa menggunakan penghasilan rata-rata di Wilayah 1.
Mengekstrapolasi ide ini sedikit, saya bisa mengubah dataset pelatihan saya sebagai
Age Gender CountrySamples CountryIncome RegionSamples RegionIncome CitySamples CityIncome
1: 23 M 4 52.25 3 48.00 2 36.5000
2: 48 F 4 52.25 3 48.00 2 36.5000
3: 62 M 4 52.25 3 48.00 1 71.0000
4: 63 F 4 52.25 1 65.00 1 65.0000
5: 25 M 4 60.00 2 50.50 1 50.0000
6: 41 F 4 60.00 2 50.50 1 51.0000
7: 45 M 4 60.00 2 69.50 2 69.5000
8: 19 F 4 60.00 2 69.50 2 69.5000
9: 37 F 4 43.75 4 43.75 3 50.6667
10: 41 F 4 43.75 4 43.75 3 50.6667
11: 31 F 4 43.75 4 43.75 3 50.6667
12: 50 M 4 43.75 4 43.75 1 23.0000
Jadi, tujuannya adalah untuk entah bagaimana menggabungkan rata-rata CityIncome, RegionIncome, dan CountryIncome sambil menggunakan jumlah sampel pelatihan untuk masing-masing untuk memberikan bobot / kredibilitas untuk setiap nilai. (Idealnya, masih termasuk informasi dari Zaman dan Jender.)
Apa tips untuk mengatasi masalah seperti ini? Saya lebih suka menggunakan model berbasis pohon seperti meningkatkan hutan acak atau gradien, tapi saya mengalami kesulitan untuk melakukan ini dengan baik.
MEMPERBARUI
Bagi siapa pun yang mau mencoba masalah ini, saya telah menghasilkan data sampel untuk menguji solusi yang Anda usulkan di sini .
sumber
Jawaban:
Saya telah memikirkan masalah ini untuk sementara waktu, dengan inspirasi dari pertanyaan-pertanyaan berikut di situs ini.
Bagaimana saya bisa memasukkan efek acak ke dalam randomForest?
Hutan acak pada data yang dikelompokkan
Hutan Acak / adaboost dalam pengaturan regresi panel
Hutan acak untuk data panel biner
Pemodelan data cluster menggunakan pohon regresi yang dikuatkan
Pertama-tama saya perkenalkan model efek-campuran untuk data hierarkis / bersarang dan mulai dari model dua tingkat sederhana (sampel disarangkan di dalam kota). Untuk sampel -th di kota ke- i , kami menulis hasilnya y i j sebagai fungsi kovariat (daftar variabel termasuk jenis kelamin dan usia), mana adalah intersep acak untuk setiap kota, . Jika kita menganggap dan ikuti distribusi normal dengan mean 0 dan varians danj saya ysaya j y i j = f ( x i jxsaya j u i j = 1 , ... , n i u i ε i j σ 2 u σ 2 u i u i = σ 2 u
Untuk metode berbasis hutan acak, Anda dapat mencoba
MixRF()
dalam paket R kamiMixRF
di CRAN.sumber
Mengingat bahwa Anda hanya memiliki dua variabel dan penyatuan langsung, saya akan menggemakan komentar orang lain yang menyebutkan model hierarki Bayes. Anda menyebutkan preferensi untuk metode berbasis pohon, tetapi apakah ada alasan khusus untuk ini? Dengan jumlah prediktor yang minimal, saya menemukan bahwa linearitas sering merupakan asumsi yang valid yang bekerja dengan baik, dan setiap model salah spesifikasi dapat dengan mudah diperiksa melalui plot residual.
Jika Anda memang memiliki sejumlah besar prediktor, contoh RF berdasarkan pendekatan EM yang disebutkan oleh @Randel tentu akan menjadi pilihan. Satu pilihan lain yang belum saya lihat adalah menggunakan boosting berbasis model (tersedia melalui paket mboost di R ). Pada dasarnya, pendekatan ini memungkinkan Anda untuk memperkirakan bentuk fungsional efek tetap Anda menggunakan berbagai pelajar dasar (linier dan non-linear), dan perkiraan efek acak diperkirakan menggunakan penalti berbasis punggungan untuk semua level dalam faktor tertentu. Makalah ini adalah tutorial yang sangat bagus (peserta didik berbasis efek acak dibahas pada halaman 11).
Saya melihat data sampel Anda, tetapi sepertinya itu hanya memiliki variabel efek acak Kota, Wilayah, dan Negara. Dalam hal ini, hanya akan berguna untuk menghitung perkiraan Teluk Empiris untuk faktor-faktor tersebut, terlepas dari setiap prediktor. Itu mungkin sebenarnya latihan yang baik untuk memulai secara umum, karena mungkin level yang lebih tinggi (Negara, misalnya), memiliki varians minimal yang dijelaskan dalam hasil, dan mungkin tidak ada gunanya menambahkannya dalam model Anda.
sumber
mboost
paket.mboost
Kedengarannya menarik - saya akan melihatnya. Terima kasihIni lebih merupakan komentar atau saran daripada jawaban, tetapi saya pikir Anda mengajukan pertanyaan penting di sini. Sebagai seseorang yang bekerja secara eksklusif dengan data bertingkat, saya dapat mengatakan bahwa saya telah menemukan sangat sedikit tentang pembelajaran mesin dengan data bertingkat. Namun, Dan Martin, lulusan PhD baru-baru ini dalam psikologi kuantitatif di University of Virginia, melakukan disertasinya tentang penggunaan pohon regresi dengan data bertingkat. Di bawah ini adalah tautan ke paket R yang ia tulis untuk beberapa tujuan ini:
https://github.com/dpmartin42/mleda/blob/master/README.md
Anda juga dapat menemukan disertasinya di sini:
http://dpmartin42.github.io/about.html
sumber
Fungsi
RFcluster()
dari paket gamclass untuk R "mengadaptasi hutan acak untuk bekerja (walaupun dengan kikuk dan tidak efisien) dengan data hasil kategoris yang berkelompok". Contoh berikut berasal dari halaman bantuan untukRFcluster
:Ini mengembalikan akurasi OOB (di mana "tas" adalah kantong speaker, bukan kantong sampel speaker individu), yang mesin saya berikan sebagai 0,57.
sumber
Anda mungkin ingin melihat metboost : Miller PJ et al. metboost: Analisis regresi eksplorasi dengan data yang dikelompokkan secara hierarkis.arXiv: 1702.03994
Kutipan dari abstrak: Kami mengusulkan ekstensi untuk mendorong pohon keputusan pengambilan keputusan yang disebut metboost untuk data yang dikelompokkan secara hierarkis. Ia bekerja dengan membatasi struktur setiap pohon agar sama di seluruh kelompok, tetapi memungkinkan simpul terminal berbeda. Ini memungkinkan prediktor dan titik perpecahan untuk mengarah ke prediksi berbeda dalam setiap kelompok, dan mendekati efek spesifik kelompok nonlinier. Yang penting, metboost tetap layak secara komputasi untuk ribuan pengamatan dan ratusan prediktor yang mungkin mengandung nilai yang hilang.
Ini diimplementasikan dalam paket R mvtboost
sumber