Mi pregunta es sobre la clasificación binaria, por ejemplo, separar a los buenos clientes de los malos clientes, pero no la regresión o la clasificación no binaria. En este contexto, un bosque aleatorio es un conjunto de árboles de clasificación. Para cada observación, cada árbol vota un "sí" o "no", y el voto promedio de todos los árboles es la probabilidad final del bosque.
Mi pregunta es sobre la modificación del comportamiento de los árboles subyacentes: ¿Cómo podemos modificar la función randomForest (del paquete randomForest de R) para que cada árbol vote un decimal en lugar de un binario sí / no. Para comprender mejor lo que quiero decir con decimal, pensemos en cómo funcionan los árboles de decisión.
Un árbol de decisión completamente desarrollado tiene 1 instancia buena o 1 mala en sus nodos terminales. Suponga que limito el tamaño del nodo terminal a 100. Entonces los nodos terminales se verán así:
Nodo1 = 80 malo, 20 bueno
Nodo2 = 51 malo, 49 bueno
Nodo3 = 10 malo, 90 bueno
Tenga en cuenta que, aunque el Nodo1 y el Nodo2 votan "malo", su "fuerza de maldad" es muy diferente. Eso es lo que busco. En lugar de hacer que produzcan 1 o 0 (que es el comportamiento predeterminado), ¿se puede modificar el paquete R para que vote 80/100, 51/100, 10/100, etc.?
fuente
Respuestas:
Este es un punto sutil que varía de un software a otro. Hay dos métodos principales que conozco:
randomForest
funciona en R, incluso cuando se usapredict(..., type="prob")
sklearn.ensemble.RandomForestClassifier.predict_proba
funciona. En otra respuesta, @ usεr11852 señala que elranger
paquete de R también proporciona esta funcionalidad. Afortunadamente, puedo dar fe de que mi uso limitadoranger
también es mucho, mucho más rápido querandomForest
.No creo que haya una manera fácil
randomForest
de usar el método de hoja proporcional, ya que el software R es en realidad un gancho en un programa C & FORTRAN. A menos que disfrute de modificar el código de otra persona, tendrá que escribir el suyo propio o buscar otra implementación de software.fuente
randomForest
puede modificarse para acompañar esto?randomForest
es solo una interfaz R en el código FORTRAN, por lo que puede requerir recursos considerables para lograrlo.Es perfectamente posible cultivar un "bosque de probabilidad". La metodología en Malley et al. (2012) " Máquinas de probabilidad: estimación de probabilidad consistente usando máquinas de aprendizaje no paramétricas " que describe cómo se hace esto y cómo se compara con la implementación forestal aleatoria estándar. Además, el excelente R package ranger ya implementa esta funcionalidad; solo configúrelo
probability = TRUE
cuando realice la llamada a la funciónranger
.fuente
Simplemente use
predict.randomForest(..., type="prob")
. Estás haciendo algo bueno .fuente
predict.all
losnorm.votes
parámetros y, esto no parece posible. Si realmente quieres esto, probablemente necesites codificar tu propio bosque aleatorio. Estoy de acuerdo con @psarka en que esto tiene mucho sentido. (Eliminaría esta respuesta, pero luego perderíamos esta discusión en los comentarios.)