Ideas para generar una ecuación de predicción para bosques aleatorios

8

He leído las siguientes publicaciones que respondieron a la pregunta que iba a hacer:

Utilice el modelo de bosque aleatorio para hacer predicciones a partir de datos del sensor

Árbol de decisión para la predicción de salida

Esto es lo que he hecho hasta ahora: comparé la regresión logística con los bosques aleatorios y la RF superó a la logística. Ahora, los investigadores médicos con los que trabajo quieren convertir mis resultados de RF en una herramienta de diagnóstico médico. Por ejemplo:

Si usted es un hombre asiático entre 25 y 35 años, tiene vitamina D por debajo de xx y presión arterial por encima de xx, tiene un 76% de posibilidades de desarrollar la enfermedad xxx.

Sin embargo, RF no se presta a ecuaciones matemáticas simples (ver enlaces anteriores). Entonces, esta es mi pregunta: ¿qué ideas tienen para usar RF para desarrollar una herramienta de diagnóstico (sin tener que exportar cientos de árboles)?

Estas son algunas de mis ideas:

  1. Use RF para la selección de variables, luego use Logística (usando todas las interacciones posibles) para hacer la ecuación de diagnóstico.
  2. De alguna manera, agregue el bosque de RF en un "mega árbol", que de alguna manera promedia el nodo se divide entre los árboles.
  3. Similar a # 2 y # 1, use RF para seleccionar variables (digamos m variables en total), luego construya cientos de árboles de clasificación, todos los cuales usan cada variable m, luego elija el mejor árbol individual.

¿Alguna otra idea? Además, hacer el n. ° 1 es fácil, pero ¿alguna idea sobre cómo implementar el n. ° 2 y el n. ° 3?

dfife
fuente
¿Hacer una ecuación de predicción para cada árbol (serán puntos de división simples) y luego promediar las predicciones de cada ecuación? Obtendrá una ecuación de monstruo, pero representará completamente el bosque.
Zach
Buena idea @Zach. Pero desafortunadamente estoy tratando de evitar cualquier cosa "monstruo".
dfife
1
¿Le importaría repetir por qué los bosques aleatorios plantean problemas de implementación para usted? No son particularmente intensivos a menos que tenga miles de funciones. Podría podarlo, pero es poco probable que tenga una forma analítica que sea digerible.
Jessica Collins
@ Jacob: el problema es que RF tiene muchos árboles de decisión. Me encantaría informar una fórmula única (<unas pocas líneas de largo si es posible) que predice casi tan exactamente como la RF. Como publico mi trabajo para una audiencia de modesta sofisticación estadística, creo que exportar páginas sobre páginas de árboles limitaría severamente la probabilidad de que mis hallazgos se implementen en entornos clínicos.
dfife
He escrito una función para generar código SQL para un modelo de bosque aleatorio, consulte: gist.github.com/shanebutler
Shane

Respuestas:

6

Aquí hay algunos pensamientos:

  1. Todos los modelos de caja negra pueden inspeccionarse de alguna manera. Puede calcular la importancia variable para cada característica, por ejemplo, o también puede trazar la respuesta pronosticada y la respuesta real para cada característica ( enlace );
  2. Puede pensar en alguna poda del conjunto. No todos los árboles en el bosque son necesarios y podría usar solo unos pocos. Documento: [Búsqueda del bosque aleatorio más pequeño, Zhang]. De lo contrario, solo busque en Google "conjunto de poda" y eche un vistazo a "Métodos de conjunto: fundamentos y algoritmos" Capítulo 6 ;
  3. Puede construir un solo modelo mediante la selección de características como usted dijo. De lo contrario, también puede intentar utilizar el método de Domingos en [Adquisición de conocimiento a partir de ejemplos a través de múltiples modelos] que consiste en construir un nuevo conjunto de datos con predicciones de recuadro negro y construir un árbol de decisión sobre él.
  4. Como se menciona en esta respuesta de Cambio de pila, un modelo de árbol puede parecer interpretable pero es propenso a altos cambios sólo por pequeñas perturbaciones de los datos de entrenamiento. Por lo tanto, es mejor usar un modelo de caja negra. El objetivo final de un usuario final es comprender por qué un nuevo registro se clasifica como una clase particular. Puede pensar en algunas características importantes solo para ese registro en particular.

Yo iría por 1. o 2.

Simone
fuente
11

Tuve que lidiar con la misma situación de usar RF en un entorno de diagnóstico, con partes interesadas que están acostumbradas a algoritmos que se reducen a una sola ecuación legible. Descubrí que si comienzas explicando un árbol de decisión simple (aquí puedes usar ecuaciones), luego uno muy complicado, y luego explicas los inconvenientes del sobreajuste, comienzas a obtener algunos movimientos de cabeza. Una vez que explica que muchos árboles pequeños pueden mitigar la inexactitud al crecer de manera diferente ("al azar"), y que se pueden tomar como un voto conjunto o promedio para evitar un ajuste excesivo, pero aún dar cuenta de los casos extremos, se entiende. Aquí hay algunos ejemplos de diapositivas que he usado con buena recepción:

No se puede escapar de los árboles en un bosque, y son los que le dan al algoritmo tanto poder predictivo y robustez, por lo que rara vez hay una mejor solución si la RF está funcionando muy bien para usted. Los que se compararán, como SVM (dependiendo de sus datos), serán igual de complejos. Debe hacerles entender que cualquier buena solución será una especie de caja negra (para el usuario). Su mejor movimiento es crear una implementación consumible que no requiera más esfuerzo que una sola ecuación. He tenido éxito con la construcción de un modelo de RF en Python (a través de sklearn) y crear una API REST de servidor web simple que cargue ese modelo en la memoria y acepte las variables en una POST para generar la predicción. También puede hacer esto en Java o R muy fácilmente, u omitir la API y simplemente crear un binario / jar ejecutable que tome los datos como argumentos.

wwwslinger
fuente
Buen punto: agregar los resultados de RF en una sola ecuación inevitablemente perderá algunas de sus ventajas. No había pensado en eso.
dfife
2
Más probable es que sí. Sin embargo, el uso de RF para calcular la importancia variable para reducir la dimensionalidad, seguido de un método con el que su audiencia está más familiarizado, es un compromiso común. Es importante saber que la importancia variable en RF generalmente se calcula en función del rendimiento dentro de RF (levantar, reducir error, etc.) y es posible que no todos tengan un peso similar en otros métodos.
wwwslinger
2

Tengo experiencia en la implementación de bosques aleatorios en un entorno de SQL Server a través de User Defined Function. El truco consiste en convertir las IF-THEN ELSEreglas que obtienes de cada árbol en una CASE-WHEN ENDo cualquier otra Conditional Processingconstrucción (es cierto que he usado la implementación de Bootstrap Forest de JMP Pro: 500k líneas de código SQL).

No hay absolutamente ninguna razón por la cual esto no se pueda lograr usando el rattle Rpaquete. Echa un vistazo a randomForest2Rules& printRandomForestsfunciones en ese paquete. Ambos toman el random forestobjeto como entrada y visitan cada árbol en el bosque y generan un conjunto de IF-THEN ELSEreglas. Tomando esto como punto de partida, no debería ser difícil convertir esta lógica en el idioma deseado de forma automática, ya que el resultado de la función mencionada anteriormente es texto estructurado.

Lo anterior, también hace que sea importante decidir el no más pequeño. de los árboles que necesita en el bosque para hacer predicciones con el nivel de precisión deseado (la sugerencia: plot (rf.object) le muestra en qué punto las predicciones del bosque no mejoran a pesar de agregar más árboles) para mantener el no. de líneas para representar el bosque hacia abajo.


fuente