Umgang mit hierarchischen / verschachtelten Daten beim maschinellen Lernen

29

Ich werde mein Problem mit einem Beispiel erklären. Angenommen, Sie möchten das Einkommen einer Person anhand einiger Attribute vorhersagen: {Alter, Geschlecht, Land, Region, Stadt}. Sie haben einen Trainingsdatensatz wie diesen

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

Angenommen, ich möchte das Einkommen einer neuen Person, die in Stadt 7 lebt, vorhersagen. In meinem Trainingsset befinden sich sage und schreibe 3 Stichproben mit Personen in Stadt 7 (nehmen wir an, dies ist eine Menge) prognostizieren Sie das Einkommen dieser neuen Person.

Angenommen, ich möchte das Einkommen einer neuen Person vorhersagen, die in Stadt 2 lebt. Mein Trainingssatz enthält nur 1 Stichprobe mit Stadt 2, sodass das durchschnittliche Einkommen in Stadt 2 wahrscheinlich kein verlässlicher Prädiktor ist. Aber ich kann wahrscheinlich das Durchschnittseinkommen in Region 1 verwenden.

Wenn ich diese Idee ein wenig extrapoliere, kann ich meinen Trainingsdatensatz als transformieren

    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

Das Ziel ist es also, das durchschnittliche CityIncome, das RegionIncome und das CountryIncome zu kombinieren und gleichzeitig die Anzahl der Trainingsbeispiele zu verwenden, um jedem Wert ein Gewicht / eine Glaubwürdigkeit zu verleihen. (Im Idealfall immer noch mit Informationen aus Alter und Geschlecht.)

Was sind Tipps zur Lösung dieses Problems? Ich bevorzuge baumbasierte Modelle wie zufällige Wald- oder Gradientenverstärkung, aber ich habe Probleme, diese für eine gute Leistung zu bekommen.

AKTUALISIEREN

Für jemanden bereit , einen Stich an diesem Problem zu nehmen, habe ich Beispieldaten erzeugt Ihre vorgeschlagene Lösung testen hier .

Ben
quelle
7
Hierarchische Bayes'sche Modelle sind sehr natürlich, um die in Ihren Daten beschriebene Struktur auszunutzen. Schauen Sie sich das klassische Beispiel zur Radon-Kontaminationsmodellierung an: mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs
Schauen Sie sich dieses Kaggle Getting Started-Tutorial an: kaggle.com/c/titanic . Es handelt sich um ein ähnliches Problem, nämlich vorauszusagen, ob eine Person die Titanic-Katastrophe überlebt hat, wenn verschiedene Attribute über die Person wie Geschlecht, Tickettyp usw. vorliegen usw.
Vihari Piratla
6
@VihariPiratla Vielen Dank für die Eingabe, aber ich bin mit dem Titanic-Dataset und der Titanic-Challenge vertraut und sehe keinen Zusammenhang mit dem Problem mit verschachtelten Daten, nach dem ich gefragt habe.
Ben
Die Verwendung der L2 / L1-Regularisierung für die Modelle, z. B. logistische Regression / SVM, die sie ausführen, sollte helfen (hierarchische Bayes für arme Männer). Effektiv bestrafen Sie Koeffizienten. Wenn ein Koeffizient (z. B. bei vielen Daten) den Fehler nicht signifikant verbessert, wird er auf nahe Null gesetzt. und Sie Kreuzvalidierung verwenden, um die Ebene der Bestrafung zu entscheiden
Seanv507
Möchten Sie auch das Einkommen einer Person vorhersagen können, die in Stadt 9 lebt?
Jan-Glx

Antworten:

14

Ich habe eine Weile über dieses Problem nachgedacht und mich dabei von den folgenden Fragen auf dieser Website inspirieren lassen.

Lassen Sie mich zunächst die Modelle mit gemischten Effekten für hierarchische / verschachtelte Daten einführen und von einem einfachen zweistufigen Modell ausgehen (Beispiele, die in Städten verschachtelt sind). Für die - ten Probe in der i - ten Stadt, schreiben wir das Ergebnis y i j als Funktion der Kovariaten x i j (eine Liste von Variablen wie Geschlecht und Alter), y i j = f ( x i j ) + u i + ϵ i j , wobei u i der zufällige Schnittpunkt für jede Stadt ist, j = 1jiyijxij

yij=f(xij)+ui+ϵij,
ui . Wenn wir annehmen , u i und ε i j folgen Normalverteilungen mitMittelwert0 und Varianzen σ 2 u und & sgr; 2 , die empirische Bayes (EB) Schätzung von u i ist u i = σ 2 uj=1,,niuiϵijσu2σ2uiwobei ˉ y i. =1
u^i=σu2σu2+σ2/ni(y¯i.f(x¯i.)),
,f( ˉ x i.)=1y¯i.=1niiniyijWenn wir( ˉ y i.-f( ˉ x i.))Als die OLS-Schätzung (gewöhnliche kleinste Quadrate) vonui behandeln, dann ist die EB-Schätzung eine gewichtete Summe von 0 und die OLS-Schätzung, und die Gewichtung ist eine zunehmende Funktion der Stichprobengrößeni. Die endgültige Vorhersage ist f (xij)+ u if(x¯i.)=1niinif(xij).(y¯i.f(x¯i.))uini
f^(xij)+u^i,
f^(xij)

Für eine Zufalls-Gesamtstruktur-basierte Methode können Sie MixRF()unser R-Paket MixRFauf CRAN ausprobieren .

Randel
quelle
Könnten Sie erklären, warum der Achsenabschnitt variieren darf? ich, aber f hat einen einzigen Parametersatz für alle ich? Ist es eine vereinfachende Annahme, eine Überanpassung zu vermeiden oder das Problem lösbar zu machen?
User20160
@ user20160 Ja, wir rufen an f Teil als Festeffektteil, und uichals zufälliger Effekt. Wir können auch einige zufällige Steigungen wie habenxichjuich,sollte aber die Anzahl der zufälligen Steigungen begrenzen, da dies eine große Anzahl von Varianzkomponenten in die Kovarianzmatrix der Zufallseffekte einbringen würde, wenn sie unstrukturiert ist.
Randel
6

Da Sie nur zwei Variablen und eine einfache Verschachtelung haben, würde ich die Kommentare anderer wiederholen, die ein hierarchisches Bayes-Modell erwähnen. Sie erwähnen eine Präferenz für baumbasierte Methoden, aber gibt es dafür einen bestimmten Grund? Mit einer minimalen Anzahl von Prädiktoren stelle ich fest, dass die Linearität häufig eine gültige Annahme ist, die gut funktioniert, und dass jede Modellfehlspezifikation leicht über Residuendiagramme überprüft werden kann.

Wenn Sie eine große Anzahl von Prädiktoren hätten, wäre das RF-Beispiel, das auf dem von @Randel erwähnten EM-Ansatz basiert, sicherlich eine Option. Eine andere Option, die ich noch nicht gesehen habe, ist die Verwendung von modellbasiertem Boosten (verfügbar über das mboost-Paket in R ). Im Wesentlichen können Sie mit diesem Ansatz die funktionale Form Ihrer Fixeffekte mithilfe verschiedener Basislerner (linear und nichtlinear) abschätzen. Die Schätzungen der Zufallseffekte werden mithilfe einer kammbasierten Strafe für alle Ebenen in diesem bestimmten Faktor approximiert. Dieser Artikel ist ein ziemlich nettes Tutorial (Grundlegende Informationen zu Zufallseffekten finden Sie auf Seite 11).

Ich habe mir Ihre Beispieldaten angesehen, aber es sieht so aus, als ob sie nur die Zufallseffektvariablen Stadt, Region und Land enthalten. In diesem Fall wäre es nur sinnvoll, die empirischen Bayes-Schätzungen für diese Faktoren unabhängig von Prädiktoren zu berechnen. Dies könnte im Allgemeinen eine gute Übung sein, da die höheren Ebenen (z. B. Land) möglicherweise nur minimale Abweichungen aufweisen und es sich daher wahrscheinlich nicht lohnt, sie in Ihr Modell aufzunehmen.

dmartin
quelle
1
+1 für die Einführung des mboostPakets.
Randel
Die realen Daten, mit denen ich arbeite, haben viel mehr als zwei Variablen, die eine Menge realer Unordnung hinzufügen, die von meinem einfachen Beispiel nicht erfasst wird (z. B. Nichtlinearität, Codependenz, fehlende Werte, kategoriale Werte usw.). . Nach meiner Erfahrung leisten baumbasierte Lernende den besten Job im Umgang mit all dem Chaos in der realen Welt. Deshalb neige ich dazu, sie zu nutzen. (Es gibt einen Grund, warum XGBoost fast alle strukturierten Datenwettbewerbe auf Kaggle gewinnt.) Klingt mboostinteressant - ich werde es mir ansehen. Danke
Ben
1
Ich sehe, einverstanden, dass Bäume in dieser Situation sicherlich nützlich sein können. In diesem Fall wäre es eine gute Option, sich an @ Randels Vorschlag zu halten. Mboost hat auch einen Tree Base Lerner, der sich in Kombination mit den Random Effects Base Learnern als nützlich erweisen könnte.
dmartin
3

Dies ist eher ein Kommentar oder ein Vorschlag als eine Antwort, aber ich denke, Sie stellen hier eine wichtige Frage. Als jemand, der ausschließlich mit mehrstufigen Daten arbeitet, kann ich sagen, dass ich sehr wenig über maschinelles Lernen mit mehrstufigen Daten erfahren habe. Dan Martin, ein kürzlich an der University of Virginia in quantitativer Psychologie promovierter Wissenschaftler, promovierte jedoch über die Verwendung von Regressionsbäumen mit mehrstufigen Daten. Unten ist ein Link zu einem R-Paket, das er für einige dieser Zwecke geschrieben hat:

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

Auch seine Dissertation finden Sie hier:

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

Erik Ruzek
quelle
2
Thanks for the reference, Erik! One thing to keep in mind with my dissertation is that it only evaluated how forest methods perform "out of the box" when exposed to multi-level data structures. Methods that @Randel mentioned are discussed in Chapter 3 as a literature review, but the simulation study investigated mainly Breiman's original algorithm and conditional inference trees/forests.
dmartin
1

The function RFcluster() from the gamclass package for R "adapts random forests to work (albeit clumsily and inefficiently) with clustered categorical outcome data". The following example is from the help page for 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)

This returns an OOB accuracy (where the "bags" are bags of speakers, not bags of individual speaker samples), that my machine gives as 0.57 .

John Maindonald
quelle
0

You may want to have a look at metboost: Miller PJ et al. metboost: Exploratory regression analysis with hierarchically clustered data.arXiv:1702.03994

Quote from the abstract: We propose an extension to boosted decision decision trees called metboost for hierarchically clustered data. It works by constraining the structure of each tree to be the same across groups, but allowing the terminal node means to differ. This allows predictors and split points to lead to different predictions within each group, and approximates nonlinear group specific effects. Importantly, metboost remains computationally feasible for thousands of observations and hundreds of predictors that may contain missing values.

It is implemented in the R package mvtboost

Koen Pouwels
quelle
1
please provide references instead of just links (especially for your first link), as links can die
Antoine