Cara menangani data hierarkis / bersarang dalam pembelajaran mesin

29

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 .

Ben
sumber
7
Model bayesian hierarkis sangat alami untuk mengeksploitasi struktur seperti yang dijelaskan dalam data Anda. Lihatlah contoh klasik tentang pemodelan kontaminasi Radon mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs
Lihatlah tantangan tutorial Memulai Kaggle ini : kaggle.com/c/titanic . Ini berkaitan dengan masalah yang sama, yaitu untuk memprediksi apakah seseorang selamat dari bencana Titanic yang diberikan berbagai atribut tentang orang seperti Jenis Kelamin, jenis tiket dll. Solusi terbaik yang diajukan untuk ini menggunakan metode canggih seperti Gradient Boosting dan Hierarchical Bayesian Models dll
Vihari Piratla
6
@ VihariPiratla Terima kasih atas masukannya, tapi saya terbiasa dengan dataset dan tantangan Titanic, dan saya tidak melihat bagaimana ini terkait dengan masalah data bersarang yang saya tanyakan.
Ben
Menggunakan regularisasi L2 / L1 untuk model-model tersebut misalnya regresi logistik / SVM yang melakukan itu harus membantu (orang miskin bay hierarkis). efektif Anda menghukum koefisien, jadi kecuali jika koefisien secara signifikan (yaitu pada banyak data) meningkatkan kesalahan itu akan ditetapkan mendekati nol. dan Anda menggunakan crossvalidation untuk memutuskan tingkat hukuman
seanv507
Apakah Anda juga ingin dapat memprediksi penghasilan seseorang yang tinggal di kota 9?
jan-glx

Jawaban:

14

Saya telah memikirkan masalah ini untuk sementara waktu, dengan inspirasi dari pertanyaan-pertanyaan berikut di situs ini.

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 danjiyij y i j = f ( x i jxiju i j = 1 , ... , n i u i ε i j σ 2 u σ 2 u i u i = σ 2 u

yij=f(xij)+ui+ϵij,
uij=1,,niuiϵijσkamu2σ2, perkiraan Bayesian (EB) empiris adalah mana ,Jika kita memperlakukan Sebagai estimasi OLS (ordinary least square) dari , maka EB taksiran adalah jumlah tertimbang dari 0 dan taksiran OLS, dan berat adalah fungsi yang meningkat dari ukuran sampel . Prediksi terakhir adalah manakamusaya
kamu^saya=σkamu2σkamu2+σ2/nsaya(y¯saya.-f(x¯saya.)),
y¯saya.=1nsayasayansayaysayaj( ˉ y i.-f( ˉ x i.))Uini f (xij)+ u i, f (xij)f(x¯saya.)=1nsayasayansayaf(xsayaj).(y¯saya.-f(x¯saya.))kamusayansaya
f^(xsayaj)+kamu^saya,
f^(xsayaj) adalah perkiraan efek tetap dari regresi linier atau metode pembelajaran mesin seperti hutan acak. Ini dapat dengan mudah diperluas ke tingkat data apa pun, misalnya sampel yang bersarang di kota dan kemudian wilayah dan kemudian negara. Selain metode berbasis pohon, ada metode berbasis SVM .

Untuk metode berbasis hutan acak, Anda dapat mencoba MixRF()dalam paket R kami MixRFdi CRAN.

Randel
sumber
Bisakah Anda menjelaskan mengapa intersepsi diperbolehkan bervariasi dengan , tetapi memiliki satu set parameter untuk semua ? Apakah ini asumsi yang disederhanakan untuk menghindari overfitting atau membuat masalah bisa diselesaikan? f isayafsaya
user20160
@ user20160 Ya, kami menyebut bagian sebagai bagian efek tetap, dan sebagai efek acak. Kami juga dapat memiliki beberapa lereng acak seperti tetapi harus membatasi jumlah lereng acak karena ini akan memperkenalkan sejumlah besar komponen varians dalam matriks kovarians dari efek-acak jika tidak terstruktur. u i xfkamusayaxsayajkamusaya,
Randel
6

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.

dmartin
sumber
1
+1 untuk memperkenalkan mboostpaket.
Randel
The nyata data yang saya sedang bekerja dengan memiliki banyak lebih dari dua variabel yang menambah banyak kekacauan dunia nyata yang tidak dijemput oleh contoh sederhana saya (misalnya non linearitas, codependence, nilai-nilai yang hilang, nilai-nilai kategoris, dll) . Dalam pengalaman saya, pelajar berbasis pohon melakukan pekerjaan terbaik dalam menangani semua kekacauan dunia nyata, itulah sebabnya saya condong ke arah menggunakannya. (Ada alasan mengapa XGBoost memenangkan hampir semua kompetisi data terstruktur di Kaggle.) mboostKedengarannya menarik - saya akan melihatnya. Terima kasih
Ben
1
Begitu ya, sepakat bahwa pohon tentu saja bisa bermanfaat dalam situasi itu. Dalam hal ini tetap dengan saran @ Randel akan menjadi pilihan yang baik. Mboost juga memiliki pelajar berbasis pohon yang mungkin terbukti berguna dalam kombinasi dengan pelajar berbasis efek acak.
dmartin
3

Ini 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

Erik Ruzek
sumber
2
Terima kasih untuk referensi, Erik! Satu hal yang perlu diingat dengan disertasi saya adalah bahwa itu hanya mengevaluasi bagaimana metode hutan melakukan "out of the box" ketika terkena struktur data multi-level. Metode yang disebutkan oleh @Randel dibahas dalam Bab 3 sebagai tinjauan pustaka, tetapi studi simulasi menyelidiki terutama algoritma asli Breiman dan pohon / hutan inferensi bersyarat.
dmartin
1

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 untuk RFcluster:

 library(randomForest)
 library(gamclass)
 data(mlbench::Vowel)
 RFcluster(formula=Class ~., id = V1, data = Vowel, nfold = 15,
           tree=500, progress=TRUE, printit = TRUE, seed = 29)

Ini mengembalikan akurasi OOB (di mana "tas" adalah kantong speaker, bukan kantong sampel speaker individu), yang mesin saya berikan sebagai 0,57.

John Maindonald
sumber
0

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

Koen Pouwels
sumber
1
tolong berikan referensi alih-alih hanya tautan (terutama untuk tautan pertama Anda), karena tautan dapat mati
Antoine