Makine öğrenmesinde hiyerarşik / iç içe geçmiş verilerle nasıl baş edilir


29

Sorunumu bir örnekle açıklayacağım. Bazı nitelikler verilen bir bireyin gelirini tahmin etmek istediğinizi varsayalım: {Yaş, Cinsiyet, Ülke, Bölge, Şehir}. Bunun gibi bir eğitim veri setine sahipsiniz

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

Şimdi, Şehir 7'de yaşayan yeni bir insanın gelirini tahmin etmek istediğimi varsayalım. Eğitim setimde, Şehir 7'deki insanlarla dolu bir 3 örnek var (bunun çok fazla olduğunu varsayalım). bu yeni bireyin gelirini tahmin et.

Şimdi, Şehir 2'de yaşayan yeni bir insanın gelirini tahmin etmek istediğimi varsayalım. Eğitim setimde sadece City 2 ile birlikte 1 örnek var, bu yüzden City 2'deki ortalama gelir muhtemelen güvenilir bir tahmin değil. Ama muhtemelen Bölge 1'deki ortalama geliri kullanabilirim.

Bu fikri bir miktar ekstrapolasyonla, eğitim veri kümemi şu şekilde dönüştürebilirim

    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

Bu nedenle amaç, her bir değere ağırlık / güvenilirlik kazandırmak için her biri için eğitim örneği sayısını kullanırken ortalama Şehir Gelirini, Bölge Gelirini ve Ülke Gelirini birleştirmektir. (İdeal olarak, hala Yaş ve Cinsiyet bilgileri dahil)

Bu tür bir sorunu çözmek için ipuçları nelerdir? Rastgele orman veya gradyan artırma gibi ağaç tabanlı modelleri kullanmayı tercih ediyorum, ancak bunların iyi performans göstermesinde sorun yaşıyorum.

GÜNCELLEŞTİRME

Bu problemi aşmak isteyen herkes için, önerilen çözümünüzü burada test etmek için örnek veriler oluşturdum .


7
Hiyerarşik bayesian modelleri, verilerinizde açıklandığı şekilde yapıyı kullanmak için çok doğaldır. Radon kontaminasyon modellemesinde klasik örneği inceleyin mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs

Bu Kaggle Başlarken eğitim sorununa bir göz atın: kaggle.com/c/titanic . Benzer bir problemle uğraşır, yani bir kişinin Cinsiyet, bilet türü vb. Gibi kişi hakkında çeşitli nitelikler verilen Titanik felaketinden kurtulduğunu tahmin etmek. Bu kullanım için en iyi sunulan çözümler, Gradyan Artırma ve Hiyerarşik Bayesian Modelleri gibi gelişmiş yöntemler kullanır. vs
Vihari Piratla

6
@VihariPiratla Girişiniz için teşekkürler, ancak Titanik veri kümesi ve sorunlarına aşinayım ve bunun hakkında sorduğum iç içe geçmiş veri sorunu ile nasıl bir ilgisi olduğunu anlamıyorum.
Ben

Bu modeller için L2 / L1 düzenlileştirmesi kullanmak, örneğin, yardımcı olması gereken lojistik regresyon / SVM (fakir hiyerarşik bölümler). etkili bir şekilde katsayıları cezalandırırsınız, bu nedenle önemli bir katsayı (yani, çok fazla veride) hatayı iyileştirmezse, sıfıra yakın olarak ayarlanır. ve
ceza

Ayrıca 9 şehirde yaşayan bir kişinin gelirini tahmin edebilmek ister misiniz?
jan-glx

Yanıtlar:


14

Bir süredir bu problemi düşünüyordum, bu sitede aşağıdaki sorulardan ilham alarak.

Öncelikle hiyerarşik / iç içe geçmiş veriler için karma efekt modellerini tanıtayım ve iki seviyeli basit bir modelden (şehirler içine yerleştirilmiş örnekler) başlayalım. İçin de inci örnek i -inci şehir, sonucun bilgileri y ı j eş değişken bir fonksiyonu olarak x i j , (cinsiyet ve yaş dahil olmak üzere değişken bir listesi) y i j = f ( x i j ) + u ı + ε i j , u ı her bir şehir için rasgele mesafesidir, j = 1jiyijxij

yij=f(xij)+ui+ϵij,
ui . Biz kabul edersek u i ve ε i j ortalama 0 ve varyansları normal dağılımlar izleyin σ 2 uj=1,,niuiϵijσu2 ve , ampirik Bayes (EB) tahmin u i ise u i = σ 2 uσ2uiburada ˉ y i. =1
u^i=σu2σu2+σ2/ni(y¯i.f(x¯i.)),
,f( ˉ x i.)=1y¯i.=1niiniyijEğer tedavi edersek( ˉ y i.-f( ˉ x i.))f(x¯i.)=1niinif(xij).(y¯i.f(x¯i.)) En küçük kareler (OLS) tahmini olarak ağırlığı, daha sonra EB tahmini 0 ağırlıklı toplamı ve en küçük kareler tahmin ve örneklem büyüklüğünün arttırıcı işlevi n i . Nihai öngörü f ( x i j ) + u iuiniF ( x i j ) lineer regresyon veya rasgele orman gibi makine öğrenme yöntemi sabit etkinin tahminidir. Bu, herhangi bir veri seviyesine kolayca genişletilebilir, örneğin şehirlerde ve daha sonra bölgeler ve daha sonra ülkelerdeki iç içe örnekler. Ağaç tabanlı yöntemler dışında,SVM'yedayanan bir yöntem vardır.
f^(xij)+u^i,
f^(xij)

Rastgele orman temelli yöntem için, CRAN'daki MixRF()R paketimizi deneyebilirsiniz MixRF.


Eğer yolunu kesmek ile değişmesine izin verilir neden açıklayabilir misiniz ifi

fubenxbenj'uben,

6

Sadece iki değişkene ve basit yuvalamaya sahip olduğunuzdan, hiyerarşik bir Bayes modelinden bahseden başkalarının yorumlarını da yankı veririm. Ağaç tabanlı yöntemler için tercihten bahsediyorsunuz, ancak bunun özel bir nedeni var mı? Minimum sayıda tahminciyle, doğrusallığın genellikle iyi çalışan geçerli bir varsayım olduğunu ve yanlış yapılan herhangi bir modelin kalıntı grafikler üzerinden kolayca kontrol edilebildiğini tespit ediyorum.

Çok sayıda tahminciniz varsa, @Randel tarafından belirtilen EM yaklaşımına dayanan RF örneği kesinlikle bir seçenek olacaktır. Henüz görmediğim bir diğer seçenek ise, model tabanlı güçlendirmeyi kullanmaktır ( R'deki mboost paketi ile kullanılabilir ). Temel olarak, bu yaklaşım, çeşitli temel öğrenenler (doğrusal ve doğrusal olmayan) kullanarak sabit etkilerinizin işlevsel biçimini tahmin etmenize izin verir ve rastgele etki tahminleri, söz konusu faktördeki tüm seviyeler için sırt temelli bir ceza kullanılarak yaklaşık olarak hesaplanır. Bu makale oldukça iyi bir öğreticidir (rastgele etkiler bazında öğrenenler sayfa 11'de tartışılmaktadır).

Örnek verilerinize baktım, ancak yalnızca City, Region ve Country'nin rastgele efekt değişkenlerine sahip görünüyor. Bu durumda, bu faktörlere ilişkin Ampirik Bayes tahminlerini herhangi bir tahminciden bağımsız olarak hesaplamak faydalı olacaktır. Genel olarak başlamak için iyi bir alıştırma olabilir, belki de daha yüksek seviyeler (örneğin, Ülke), sonuçta açıklanacak en az sapmaya sahipti ve bu nedenle bunları modelinize eklemeniz faydalı olmayacaktır.


1
mboostPaketi tanıtmak için +1 .
Randel

Gerçek Ben ile çalışıyorum verilerim basit örnekle çekilmiyor gerçek dünya karışıklık bir sürü eklemek çok ikiden fazla değişken vardır (örneğin sigara doğrusallık, codependence vb eksik değerler, kategorik değerleri) . Tecrübelerime göre, ağaç tabanlı öğrenciler tüm gerçek dünyadaki karışıklıklarla başa çıkmak için en iyi işi yapıyorlar, bu yüzden onları kullanmaya eğildim. (XGBoost'un Kaggle'daki yapılandırılmış veri yarışmalarının neredeyse hepsini kazanmasının bir nedeni var.) mboostİlginç geliyor - Ben bir göz atacağım . Teşekkürler
Ben

1
Görüyorum ki ağaçların bu durumda kesinlikle faydalı olabileceği konusunda hemfikirler. Bu durumda @ Randel'in önerisine sadık kalmak iyi bir seçenek olabilir. Mboost ayrıca, rastgele etkiler temelli öğrenicilerle birlikte faydalı olabileceğini kanıtlayacak bir ağaç tabanı öğrenicisine de sahiptir.
dmartin,

3

Bu bir cevaptan çok bir yorum veya öneridir, ancak burada önemli bir soru sorduğunuzu düşünüyorum. Yalnızca çok düzeyli verilerle çalışan biri olarak, çok düzeyli verilerle makine öğrenimi hakkında çok az şey bulduğumu söyleyebilirim. Bununla birlikte, Virginia Üniversitesi'nde nicel psikoloji alanında yeni bir doktora mezunu olan Dan Martin, çok düzeyli verilerle regresyon ağaçlarının kullanımı üzerine tezini yaptı. Aşağıda, bu amaçlardan bazıları için yazdığı bir R paketine bir link verilmiştir:

https://github.com/dpmartin42/mleda/blob/master/README.md

Ayrıca, burada tezini burada bulabilirsiniz:

http://dpmartin42.github.io/about.html


2
Referans için teşekkürler, Erik! Tezimle ilgili aklımda tutulması gereken şeylerden biri, orman yöntemlerinin yalnızca çok seviyeli veri yapılarına maruz kaldıklarında "kutudan" nasıl performans gösterdikleridir. @Randel'in bahsettiği yöntemler literatür taraması olarak Bölüm 3'te tartışılmaktadır, ancak simülasyon çalışması temel olarak Breiman'ın orijinal algoritmasını ve koşullu çıkarım ağaçlarını / ormanlarını araştırmıştır.
dmartin,

1

RFcluster()R "gamclass paketindeki fonksiyon ," kümelenmiş kategorik sonuç verileriyle rastgele ormanları çalışmaya (beceriksiz ve verimsiz olarak) çalışmaya adapte eder ". Aşağıdaki örnek, yardım sayfasındandır 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)

Bu, makinemin 0.57 olarak verdiği OOB doğruluğunu ("çantaların" konuşmacıların hoparlörleri olduğu, her bir hoparlör örneğinin çantaları değil) verir.


0

Bakmak isteyebilirsiniz Metboost'a isteyebilirsiniz : Miller PJ et al. metboost: Hiyerarşik olarak kümelenmiş verilerle açımlayıcı regresyon analizi.arXiv: 1702.03994

Özetten alıntı: Biz hiyerarşik kümelenmiş veriler için metboost adı artırdığını karar karar ağaçlarına bir uzantısı olan. Her ağacın yapısını gruplar arasında aynı olacak şekilde sınırlandırarak çalışır, ancak terminal düğüm araçlarının farklılık göstermesine izin verir. Bu, öngörücülerin ve ayrık noktaların, her grup içinde farklı tahminlere yol açmasına izin verir ve doğrusal olmayan gruba özgü etkilere yaklaşır. Daha önemlisi, metboost, binlerce gözlem ve eksik değerler içerebilen yüzlerce tahminci için hesaplamalı olarak kalır.

R paketi mvtboost içinde uygulanır


1
lütfen sadece bağlantılar yerine referanslar sağlayın (özellikle ilk bağlantınız için), linkler ölebilir
Antoine
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.