Explicaré mi problema con un ejemplo. Suponga que desea predecir el ingreso de un individuo dados algunos atributos: {Edad, Sexo, País, Región, Ciudad}. Tienes un conjunto de datos de entrenamiento como este
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
Ahora suponga que quiero predecir el ingreso de una nueva persona que vive en la Ciudad 7. Mi conjunto de entrenamiento tiene 3 muestras con personas en la Ciudad 7 (suponga que esto es mucho), por lo que probablemente pueda usar el ingreso promedio en la Ciudad 7 para predecir los ingresos de este nuevo individuo.
Ahora suponga que quiero predecir los ingresos de una nueva persona que vive en la Ciudad 2. Mi conjunto de entrenamiento solo tiene 1 muestra con la Ciudad 2, por lo que el ingreso promedio en la Ciudad 2 probablemente no sea un predictor confiable. Pero probablemente pueda usar el ingreso promedio en la Región 1.
Extrapolando un poco esta idea, puedo transformar mi conjunto de datos de entrenamiento como
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
Por lo tanto, el objetivo es combinar de alguna manera el promedio CityIncome, RegionIncome y CountryIncome mientras se usa el número de muestras de entrenamiento para cada una para dar un peso / credibilidad a cada valor. (Idealmente, aún incluye información de Edad y Género).
¿Cuáles son los consejos para resolver este tipo de problema? Prefiero usar modelos basados en árboles como bosque aleatorio o aumento de gradiente, pero tengo problemas para que estos funcionen bien.
ACTUALIZAR
Para cualquiera que esté dispuesto a probar este problema, he generado datos de muestra para probar su solución propuesta aquí .
fuente
Respuestas:
He estado pensando en este problema por un tiempo, con inspiraciones de las siguientes preguntas en este sitio.
¿Cómo puedo incluir efectos aleatorios en un bosque aleatorio?
Bosque aleatorio en datos agrupados
Bosques aleatorios / adaboost en configuración de regresión de panel
Bosque aleatorio para datos de panel binario
Modelado de datos agrupados utilizando árboles de regresión potenciados
Para el método aleatorio basado en el bosque, puede probar
MixRF()
en nuestro paquete RMixRF
en CRAN.fuente
Dado que solo tiene dos variables y un anidamiento directo, me haría eco de los comentarios de otros que mencionan un modelo jerárquico de Bayes. Menciona una preferencia por los métodos basados en árboles, pero ¿hay alguna razón particular para esto? Con un número mínimo de predictores, encuentro que la linealidad es a menudo una suposición válida que funciona bien, y cualquier especificación errónea del modelo podría verificarse fácilmente a través de gráficos residuales.
Si tuviera una gran cantidad de predictores, el ejemplo de RF basado en el enfoque EM mencionado por @Randel sería ciertamente una opción. Otra opción que aún no he visto es utilizar el refuerzo basado en modelos (disponible a través del paquete mboost en R ). Esencialmente, este enfoque le permite estimar la forma funcional de sus efectos fijos utilizando varios aprendices básicos (lineales y no lineales), y las estimaciones de efectos aleatorios se aproximan usando una penalización basada en crestas para todos los niveles en ese factor en particular. Este documento es un tutorial bastante bueno (los alumnos de base de efectos aleatorios se discuten en la página 11).
Eché un vistazo a sus datos de muestra, pero parece que solo tiene las variables de efectos aleatorios de Ciudad, Región y País. En este caso, solo sería útil calcular las estimaciones empíricas de Bayes para esos factores, independientemente de cualquier predictor. En general, podría ser un buen ejercicio para comenzar, ya que tal vez los niveles más altos (País, por ejemplo), tienen una variación mínima explicada en el resultado, por lo que probablemente no valga la pena agregarlos a su modelo.
fuente
mboost
paquete.mboost
Suena interesante: lo echaré un vistazo. GraciasEsto es más un comentario o sugerencia que una respuesta, pero creo que hace una pregunta importante aquí. Como alguien que trabaja exclusivamente con datos multinivel, puedo decir que he encontrado muy poco sobre el aprendizaje automático con datos multinivel. Sin embargo, Dan Martin, un doctorado reciente en psicología cuantitativa en la Universidad de Virginia, hizo su disertación sobre el uso de árboles de regresión con datos multinivel. A continuación hay un enlace a un paquete R que escribió para algunos de estos propósitos:
https://github.com/dpmartin42/mleda/blob/master/README.md
Además, puedes encontrar su disertación aquí:
http://dpmartin42.github.io/about.html
fuente
La función
RFcluster()
del paquete gamclass para R "adapta bosques aleatorios para trabajar (aunque de forma torpe e ineficiente) con datos de resultados categóricos agrupados". El siguiente ejemplo es de la página de ayuda paraRFcluster
:Esto devuelve una precisión OOB (donde las "bolsas" son bolsas de altavoces, no bolsas de muestras de altavoces individuales), que mi máquina da como 0,57.
fuente
Es posible que desee echar un vistazo a metboost : Miller PJ et al. metboost: análisis de regresión exploratoria con datos agrupados jerárquicamente. arXiv: 1702.03994
Cita del resumen: Proponemos una extensión a los árboles de decisión de decisión potenciados llamada metboost para datos agrupados jerárquicamente. Funciona al limitar la estructura de cada árbol para que sea la misma en todos los grupos, pero permitir que el nodo terminal signifique diferir. Esto permite que los predictores y los puntos divididos conduzcan a diferentes predicciones dentro de cada grupo, y aproxima los efectos específicos no lineales del grupo. Es importante destacar que metboost sigue siendo computacionalmente factible para miles de observaciones y cientos de predictores que pueden contener valores faltantes.
Se implementa en el paquete R mvtboost
fuente