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:
- 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.
- De alguna manera, agregue el bosque de RF en un "mega árbol", que de alguna manera promedia el nodo se divide entre los árboles.
- 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?
fuente
Respuestas:
Aquí hay algunos pensamientos:
Yo iría por 1. o 2.
fuente
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.
fuente
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 lasIF-THEN ELSE
reglas que obtienes de cada árbol en unaCASE-WHEN END
o cualquier otraConditional Processing
construcció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
R
paquete. Echa un vistazo arandomForest2Rules
&printRandomForests
funciones en ese paquete. Ambos toman elrandom forest
objeto como entrada y visitan cada árbol en el bosque y generan un conjunto deIF-THEN ELSE
reglas. 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