Come gestire i dati gerarchici / nidificati nell'apprendimento automatico


29

Spiegherò il mio problema con un esempio. Supponiamo di voler prevedere il reddito di un individuo in base ad alcuni attributi: {Età, Genere, Paese, Regione, Città}. Hai un set di dati di allenamento come questo

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

Supponiamo ora di voler prevedere le entrate di una nuova persona che vive in Città 7. Il mio set di allenamento ha 3 campioni enormi con persone in Città 7 (supponiamo che questo sia molto) in modo da poter probabilmente usare il reddito medio in Città 7 per prevedere le entrate di questo nuovo individuo.

Ora supponiamo che io voglia prevedere il reddito di una nuova persona che vive in Città 2. Il mio set di allenamento ha solo 1 campione con Città 2, quindi il reddito medio in Città 2 probabilmente non è un predittore affidabile. Ma probabilmente posso usare il reddito medio nella Regione 1.

Estrapolando un po 'questa idea, posso trasformare il mio set di dati di allenamento come

    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

Quindi, l'obiettivo è quello di combinare in qualche modo CityIncome, RegionIncome e CountryIncome utilizzando il numero di campioni di allenamento per ciascuno di essi per dare un peso / credibilità a ciascun valore. (Idealmente, includendo comunque le informazioni di Age and Gender.)

Quali sono i suggerimenti per risolvere questo tipo di problema? Preferisco usare modelli basati su alberi come la foresta casuale o il potenziamento del gradiente, ma ho difficoltà a farli funzionare bene.

AGGIORNARE

Per chiunque sia disposto a prendersi una mancia per questo problema, ho generato dati di esempio per testare la soluzione proposta qui .


7
I modelli gerarchici bayesiani sono molto naturali per sfruttare la struttura come descritto nei dati. Guarda l'esempio classico sulla modellizzazione della contaminazione da Radon mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs,

Dai un'occhiata a questa sfida tutorial di Kaggle per iniziare: kaggle.com/c/titanic . Si tratta di un problema simile, vale a dire se una persona è sopravvissuta al disastro del Titanic dati vari attributi sulla persona come genere, tipo di biglietto ecc. Le migliori soluzioni presentate per questo utilizzano metodi avanzati come il potenziamento del gradiente e i modelli gerarchici bayesiani ecc.
Vihari Piratla,

6
@VihariPiratla Grazie per l'input, ma ho familiarità con il set di dati Titanic e la sfida e non vedo come si collega al problema dei dati nidificati di cui ho chiesto.
Ben

L'uso della regolarizzazione L2 / L1 per quei modelli, ad esempio la regressione logistica / SVM che la esegue, dovrebbe essere d'aiuto (bay gerarchici per i poveri). efficacemente penalizzi i coefficienti, quindi a meno che un coefficiente in modo significativo (cioè su molti dati) migliori l'errore, verrà impostato vicino a zero. e usi la crossvalidation per decidere il livello di penalizzazione
penalità

Vuoi anche essere in grado di prevedere le entrate di una persona che vive in città 9?
Jan-Glx,

Risposte:


14

Ho pensato a questo problema per un po ', con ispirazioni dalle seguenti domande su questo sito.

Vorrei prima introdurre i modelli a effetti misti per i dati gerarchici / nidificati e iniziare da un semplice modello a due livelli (campioni nidificati nelle città). Per il -esimo campione nella i -esima città, scriviamo il risultato y i j in funzione delle covariate x i j (un elenco di variabili tra cui sesso ed età), y i j = f ( x i j ) + u i + ϵ i j , dove u i è l'intercettazione casuale per ogni città, j = 1jioyiojXioj

yioj=f(Xioj)+uio+εioj,
uio . Se assumiamo uj=1,...,nio e ε i j seguire distribuzioni normali con media 0 e varianze σ 2 u e σ 2 , l'empirica Bayesiano (EB) stima di u i è u i = σ 2uioεiojσu2σ2uiodove ˉ y i. =1
u^io=σu2σu2+σ2/nio(y¯io.-f(X¯io.)),
,f( ˉ x i.)=1y¯io.=1nioΣionioyiojSe trattiamo( ˉ y i.-f( ˉ x i.))Come la stima OLS (ordinaria minima quadrata) diui, la stima EB è una somma ponderata di 0 e la stima OLS e il peso è un crescente funzione della dimensione del campioneni. La previsione finale è f (xij)+,dovef(X¯io.)=1nioΣioniof(Xioj).(y¯io.-f(X¯io.))uionio
f^(Xioj)+u^io,
è la stima dell'effetto fisso dalla regressione lineare o metodo di apprendimento automatico come foresta casuale. Questo può essere facilmente esteso a qualsiasi livello di dati, ad esempio campioni nidificati in città e quindi regioni e quindi paesi. Oltre ai metodi basati sugli alberi, esiste un metodo basato suSVM.f^(Xioj)

Per un metodo basato su foreste casuali, puoi provare MixRF()nel nostro pacchetto R MixRFsu CRAN.


iofio

fuioXioj'uio,

6

Dato che hai solo due variabili e una nidificazione semplice, farei eco ai commenti di altri che menzionano un modello gerarchico di Bayes. Lei menziona una preferenza per i metodi basati su alberi, ma c'è un motivo particolare per questo? Con un numero minimo di predittori, trovo che la linearità sia spesso un presupposto valido che funzioni bene e che qualsiasi errata specifica del modello potrebbe essere facilmente verificata tramite grafici residui.

Se tu avessi un gran numero di predittori, l'esempio RF basato sull'approccio EM menzionato da @Randel sarebbe sicuramente un'opzione. Un'altra opzione che non ho ancora visto è quella di utilizzare il potenziamento basato sul modello (disponibile tramite il pacchetto mboost in R ). In sostanza, questo approccio consente di stimare la forma funzionale dei propri effetti fissi utilizzando vari apprendenti di base (lineari e non lineari) e le stime degli effetti casuali vengono approssimate utilizzando una penalità basata sulla cresta per tutti i livelli in quel particolare fattore. Questo documento è un tutorial molto carino (gli studenti di base sugli effetti casuali sono discussi a pagina 11).

Ho dato un'occhiata ai tuoi dati di esempio, ma sembra che abbia solo le variabili degli effetti casuali di Città, Regione e Paese. In questo caso, sarebbe utile solo calcolare le stime di Bayes empiriche per quei fattori, indipendentemente da qualsiasi predittore. Questo potrebbe effettivamente essere un buon esercizio per iniziare in generale, poiché forse i livelli più alti (Paese, ad esempio), hanno una varianza minima spiegata nel risultato, e quindi probabilmente non varrebbe la pena aggiungerli nel modello.


1
+1 per l'introduzione del mboostpacchetto.
Randel,

I dati reali con cui sto lavorando hanno molto più di due variabili che aggiungono un sacco di disordine nel mondo reale che non viene raccolto dal mio semplice esempio (ad esempio non linearità, codipendenza, valori mancanti, valori categorici, ecc.) . Nella mia esperienza, gli studenti che fanno base agli alberi fanno il miglior lavoro nel gestire tutto il disordine del mondo reale, motivo per cui mi propongo di usarli. (C'è un motivo per cui XGBoost vince quasi tutte le competizioni di dati strutturati su Kaggle.) mboostSembra interessante: lo darò. Grazie
Ben

1
Vedo, d'accordo sul fatto che gli alberi possono certamente essere utili in quella situazione. In tal caso, attenersi al suggerimento di @ Randel sarebbe una buona opzione. Mboost ha anche uno studente di base d'albero che potrebbe rivelarsi utile in combinazione con gli apprendenti della base di effetti casuali.
dmartin,

3

Questo è più un commento o un suggerimento piuttosto che una risposta, ma penso che tu faccia una domanda importante qui. Come persona che lavora esclusivamente con dati multilivello, posso dire di aver trovato ben poco sull'apprendimento automatico con dati multilivello. Tuttavia, Dan Martin, recentemente laureato in psicologia quantitativa presso l'Università della Virginia, ha svolto la sua tesi di laurea sull'uso degli alberi di regressione con dati multilivello. Di seguito è riportato un collegamento a un pacchetto R che ha scritto per alcuni di questi scopi:

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

Inoltre, puoi trovare la sua tesi qui:

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


2
Grazie per il riferimento, Erik! Una cosa da tenere a mente con la mia tesi è che ha valutato solo il modo in cui i metodi forestali eseguono "out of the box" quando esposti a strutture di dati multilivello. I metodi citati da @Randel sono discussi nel capitolo 3 come revisione della letteratura, ma lo studio di simulazione ha studiato principalmente l'algoritmo originale di Breiman e gli alberi / le foreste di inferenza condizionale.
dmartin,

1

La funzione RFcluster()del pacchetto gamclass per R "adatta le foreste casuali al lavoro (anche se goffamente e in modo inefficiente) con dati di risultati categorici raggruppati". Il seguente esempio è dalla pagina di aiuto per 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)

Ciò restituisce una precisione OOB (dove i "sacchetti" sono sacchetti di altoparlanti, non sacchetti di singoli campioni di altoparlanti), che la mia macchina fornisce come 0,57.


0

Potresti dare un'occhiata a metboost : Miller PJ et al. metboost: analisi di regressione esplorativa con dati gerarchicamente raggruppati.arXiv: 1702.03994

Citazione dall'abstract: dall'abstract Proponiamo un'estensione agli alberi decisionali potenziati chiamata metboost per dati gerarchicamente raggruppati. Funziona vincolando la struttura di ciascun albero in modo che sia la stessa tra i gruppi, ma consentendo al nodo terminale di differire. Ciò consente ai predittori e ai punti di divisione di condurre a previsioni diverse all'interno di ciascun gruppo e approssima effetti specifici non lineari di gruppo. È importante sottolineare che metboost rimane computazionalmente fattibile per migliaia di osservazioni e centinaia di predittori che possono contenere valori mancanti.

È implementato nel pacchetto R mvtboost


1
si prega di fornire riferimenti anziché solo collegamenti (in particolare per il primo collegamento), in quanto i collegamenti possono morire
Antoine
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.