¿Debo escribir el código de Random Forest por mi cuenta o usar implementaciones existentes?

Oooh nadie ha respondido esto todavía!

Aquí están mis dos centavos:

  • ¿Quieres implementar árboles de decisión? Si no, considere usar una biblioteca DT preexistente que contenga submuestreo variable durante las divisiones de nodo.
  • Más allá de los árboles de decisión, ¿realmente necesita comprender el algoritmo a través de la implementación? Yo diría ‘no’ por bosque aleatorio. Lo que quiero decir es, para algo como SVMs o Neural Nets, donde se puede obtener mucho de su implementación porque hay muchos detalles complicados que pasamos por alto al describirlos teóricamente … Los bosques aleatorios realmente no son tan malos.

No hay muchas opciones de diseño en la parte superior del árbol de decisiones:

  1. Decide sobre los # árboles que deseas.
  2. Proporción de características a la submuestra,
  3. Datos de submuestra (o potencialmente bootstrap) para cada árbol de decisión,
  4. Pase algunas opciones sobre qué tan grande desea que sean sus árboles de decisión (es decir, un máximo de # nodos o una profundidad máxima) y luego recupere el voto de predicción de cada árbol.

Si suena como un proyecto divertido, ¡adelante! Recomiendo usar una biblioteca de árbol de decisión preexistente para llevarlo directamente al objeto de curiosidad: el conjunto.

Comenzaré diciendo que he implementado mi propio código para bosques aleatorios. Hice esto porque no pude encontrar un paquete o biblioteca existente que fuera bastante adecuado para manejar las propiedades de los datos con los que estaba trabajando.

No es difícil, ni lleva mucho tiempo implementar las funciones básicas. Suponiendo que tiene habilidades de codificación decentes, debería poder manejarlo con la suficiente facilidad. Dado que en la versión básica cada árbol se construye completamente sin podar, solo debe asegurarse de no encontrarse con algún tipo de caso de borde, una recursión infinita. El resto es bastante trivial con las estructuras de datos correctas para manejar los vectores de entrada de muestreo con reemplazo, hacer una evaluación OOB, etc.

¿Pero deberías? Ciertamente, es valioso implementar su propio código para apreciar los algoritmos en general. Sin embargo, en el caso del bosque aleatorio, no estoy seguro de tener una comprensión mucho más profunda después de implementarlo yo mismo que antes. Los bosques aleatorios son clasificadores potentes y robustos, pero son bastante fáciles de entender e implementar. Hay muy pocos parámetros:

  • numero de arboles
  • Número de características para muestrear en cada nodo

Eso es todo por el algoritmo de referencia. Puede ajustar y ajustar aún más el algoritmo (con poda, interrupción anticipada, diferentes funciones de división), pero esas no son realmente parte del algoritmo “central”.

Realmente no necesita recursos adicionales, excepto el documento original, y tal vez wikipedia.

En resumen, no lo haría por la experiencia de aprendizaje , pero si tiene una razón convincente para necesitar su propia versión (como no poder usar una licencia de código abierto), debería poder hacerlo con relativa facilidad y rápidamente, mucho más que si estuviera implementando SVM.

Sí, deberías , pero probablemente no deberías usarlo

¿Porqué es eso?

Creo que un científico de datos / desarrollador de algoritmos tiene que implementar varios algoritmos clásicos por su cuenta y probarlos en problemas reales. Deben ajustar los algoritmos, jugar con diferentes decisiones de diseño, como estructuras de datos, parámetros predeterminados y variaciones de algoritmos. Este tipo de experiencia le dará una comprensión profunda de cómo funciona el algoritmo, qué puede y qué no puede hacer. También obtendrá la capacidad de analizar críticamente otros algoritmos.
Por otro lado, hay equipos que trabajan duro para ajustar los algoritmos, jugar con diferentes decisiones de diseño, como estructuras de datos, parámetros predeterminados y variaciones de algoritmos. Estos esfuerzos crean excelentes paquetes listos para la producción que probablemente serán una mejor opción para su proyecto de producción / investigación.

Escribir un algoritmo de bosque aleatorio simple no debería llevar demasiado tiempo, y sería una gran experiencia de aprendizaje.

Quizás juegue con algunas implementaciones alternativas antes de intentar escribir la suya propia para ver las diferencias y aprender de ellas. También sugeriría leer el código para algunos de ellos, pero tal vez después de escribir el suyo.

En cualquier caso, este es un ejercicio de aprendizaje, si necesita resultados, ¡use implementaciones probadas!

Escribir su propio algoritmo de bosque aleatorio le daría experiencia para comprender completamente cómo funciona este popular método de aprendizaje estadístico. Dicho esto, dudo que quieras usar tu versión de preparación casera en lugar de una de las muchas implementaciones probadas. Como observó, le tomará mucho tiempo escribir el suyo propio, por lo que hay un intercambio aquí.

Conocí a un equipo de ciencia de datos que programó su propio RF Alg porque necesitaban ejecutarlo en un dispositivo portátil y no había una versión lista para producción para ese entorno. Aparte de eso, no puedo pensar en una razón por la que quieras rodar la tuya.

¡Seguro! Por qué no? Si está interesado en la comprensión práctica y teórica de cualquier algoritmo, una de las mejores maneras de aprenderlo es escribirlo usted mismo. Lo bueno de los bosques aleatorios (y solo los “documentos de Google sobre la implementación de bosques aleatorios”, o posiblemente ir a arxiv y buscar términos similares, o, para algo relativamente bien entendido como RF, puede probar Wikipedia) es que son bastante bien entendido y hay muchas implementaciones. Entonces, no solo puede codificar los suyos, después de haberlo hecho, puede verificar sus resultados y observar la forma en que se implementaron antes para comprenderlos mejor .

He hecho un estudio especial de árboles y bosques. Una de las razones por las que lo hice es porque durante uno de mis contratos, quería usar un bosque aleatorio para algo. Y solo podía usar R y C y nada más (historia realmente muy larga). Fue hace algún tiempo, y quería probar la utilidad de mis imputaciones. Pero estaba atascado, ya que el paquete randomForest R no permite la falta de datos. (Sé que ahora se imputa, y varias otras cosas). Lo que quería era un algoritmo de bosque aleatorio que permitiera valores perdidos a través de divisiones sustitutas como árboles regulares.

Entonces escribí uno. (OK. Tiempo de divulgación. De hecho, desgarré el bosque aleatorio, principalmente para asegurarme de que estaba haciendo las cosas correctas de la manera correcta, y, lo que es más importante, el código rpart lo más posible y modifiqué lo más que pude por lo menos tiempo dedicado pero máxima adherencia para crear un bosque aleatorio a partir de árboles rpart.) No tenía que ser un código terriblemente eficiente, lo cual era bueno, porque no tenía todo el tiempo del mundo para escribirlo, y fue una prueba de concepto para datos no enormes.

Y a pesar de que realmente había estudiado árboles y bosques antes, mi comprensión de ellos realmente mejoró.

Incluso si nunca lo usa, porque ya hay otras implementaciones que están optimizadas, las comprenderá mejor. ¿Y quien sabe? Esa comprensión podría conducir a una mejor versión del algoritmo.

Es una gran idea tomar la iniciativa de codificar su propio algoritmo RF. Esto le permitirá comprender realmente los fundamentos y las matemáticas detrás de este importante método de aprendizaje estadístico. Esta sería una tarea para un verdadero científico de datos. Dicho esto, en realidad no desplegaría su propio algoritmo ya que es poco probable que su algoritmo funcione tan bien como los algoritmos disponibles a través de entornos como R. Los algoritmos han existido durante mucho tiempo y se han depurado y evaluado a fondo.

More Interesting

¿Los LSTM tienen significativamente más parámetros que los RNN estándar?

¿Cuál es un ejemplo de un espacio de Hilbert que no es un espacio de reproducción del núcleo de Hilbert?

Cómo predecir una variable de salida a partir de entradas dadas si la variable de salida y la variable de entrada se muestrean en diferentes intervalos de tiempo

¿Cuáles son algunos marcos de tiempo realistas para dominar diversas habilidades de programación, como el dominio de Python para la ciencia de datos, git, etc.?

Durante la limpieza de datos cuando tiene un número decimal que representa el número de personas, ¿debe redondear hacia arriba o hacia abajo? Además, ¿qué sucede si el número total de todos los números redondeados no coincide con el número total de personas, es un error?

¿El antiguo guardia de IA ha frenado la investigación de aprendizaje automático en el MIT?

¿Cómo utiliza Quora el aprendizaje automático en 2015?

¿Cómo calcula Google los sinónimos de los términos en una consulta de búsqueda?

¿Cuáles son algunas ideas importantes / brillantes en el aprendizaje automático?

Cómo configurar las dimensiones de la capa y la conectividad en Caffe para reproducir una CNN a partir de un trabajo de investigación

Cómo planear mover mi carrera hacia el aprendizaje automático en India

¿Qué es este aprendizaje automático y big data?

¿Cuáles son los modelos actuales de análisis de sentimiento de arte independientemente de la efectividad?

Después de lograr una precisión de aproximadamente el 82% en los datos de prueba mediante regresión logística, ¿cómo puedo estar seguro / seguro de que mi algoritmo se generalizará bien para toda la población?

Cómo construir un sistema de aprendizaje automático para la revisión automática de código