Random Forest (Bosque Aleatorio) para Clasificación con Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ก.ค. 2024
  • Para citar este recurso educativo utiliza la siguiente referencia:
    Gutiérrez-García, J.O. [Código Máquina]. (2021, 22 de Noviembre). Random Forest (Bosque Aleatorio) para Clasificación con Python [Video]. TH-cam. [Incluye aquí la URL del video].
    ********************************************
    Para guiar tu aprendizaje, en este vínculo ( • Curso de Inteligencia ... ) se encuentra una guía secuencial para aprender:
    1. Programación Básica con Python;
    2. Manejo de Datos;
    3. Visualización de Datos;
    4. Análisis de Datos; y
    5. Aprendizaje de Máquina y Ciencia de Datos.
    ********************************************
    En este video se explica qué es y cómo crear un bosque aleatorio para clasificación utilizando Scikit-Learn de Python. Además, se incluye un mecanismo para visualizar el bosque aleatorio.
    Índice del Video:
    0:00 Introducción
    0:36 Bosque de árboles de decisión
    1:05 Contexto: Ingreso alto o bajo
    6:37 Bosque aleatorio
    12:08 Muestreo con reemplazo
    16:55 Selección aleatoria de características
    23:15 Creación del modelo
    38:12 Visualización del bosque aleatorio
    Apoya a Código Máquina dando un Like, con un Super Gracias o visitando nuestra tienda en:
    / shop
    El código y datos del video están disponibles en GitHub github.com/CodigoMaquina/code
    ⭐ De la co-fundadora de Código Máquina, productos de cosmética natural SINHAKI:
    www.amazon.com.mx/s?srs=12094...
    #MachineLearning #AprendizajeAutomático #ScikitLearn #Python #AprendizajeDeMaquina #SkLearn

ความคิดเห็น • 68

  • @CodigoMaquina
    @CodigoMaquina  2 ปีที่แล้ว +5

    Apoya a Código Máquina dando un Like, con un Super Gracias o visitando nuestra tienda en:
    facebook.com/C0d1g0Maqu1na/shop

  • @gabrielcornejo2206
    @gabrielcornejo2206 ปีที่แล้ว +5

    Estimado Octavio, siempre es un gusto ver tus videos. Eres muy claro para explicar los conceptos y eso lo agradezco enormemente. Otra cosa que se agradece es poder tener acceso a los códigos y datos usados en el video. Sigue con tu canal, muchas gracias.

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Se agradecen de corazón tus comentarios ¡Muchas Gracias!

  • @alvarorodriguezlasso
    @alvarorodriguezlasso 2 หลายเดือนก่อน

    Like, saludos desde Cali-Colombia

  • @luckygons
    @luckygons 2 หลายเดือนก่อน

    Gracias buen hombre! Me han servido mucho!

  • @brendalopez8925
    @brendalopez8925 ปีที่แล้ว +2

    te daria 1000000 de like y no seria suficiente porque la manera como expones los temas son claras y concisas... gracias por este gran aporte

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Brenda muchas gracias por tus palabras. Es muy satisfactorio leer comentarios así :)

  • @luisadolfolopezvelasquez3376
    @luisadolfolopezvelasquez3376 9 หลายเดือนก่อน +2

    Excelente video, con explicaciones así, queda muy claro todo.

    • @CodigoMaquina
      @CodigoMaquina  6 หลายเดือนก่อน

      @luisadolfolopezvelasquez3376 feliz año!!!

  • @alberthpinco3543
    @alberthpinco3543 6 หลายเดือนก่อน

    Muchas gracias por tomarse el tiempo de crear este contenido de tan excelente calidad!!!!

  • @patotlax1
    @patotlax1 9 หลายเดือนก่อน +1

    Agradecimientos y mis respetos para usted Maestro!!

    • @CodigoMaquina
      @CodigoMaquina  6 หลายเดือนก่อน

      @patotlax1 mis respetos para ti que de forma autodidacta buscas ser mejor cada día.

  • @franciscojavierimbachiriva3224
    @franciscojavierimbachiriva3224 ปีที่แล้ว +1

    Mi hermano excelente explicación. Eres un crack por más videos así !!!!!

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Gracias por tomarte el tiempo de comentar. Saludos Francisco!!

  • @ceciliahidalgo2039
    @ceciliahidalgo2039 ปีที่แล้ว +2

    Excelente video. Muchas gracias!

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Gracias por interactuar y seguir el contenido del canal :)

  • @JorgeRodriguez-mp1mt
    @JorgeRodriguez-mp1mt 2 ปีที่แล้ว +2

    Gracias por compartir conocimiento.

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Muchas gracias por tu comentario. Para nosotros es una gran satisfacción :)

  • @MrGragito
    @MrGragito 7 หลายเดือนก่อน +1

    Muchas gracias

    • @CodigoMaquina
      @CodigoMaquina  6 หลายเดือนก่อน

      @MrGragito es un placer. Feliz año!!!

  • @danielapaza8364
    @danielapaza8364 2 ปีที่แล้ว +4

    Excelente !!!

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Muchas gracias por tu comentario :)

  • @brunogianini4011
    @brunogianini4011 ปีที่แล้ว +1

    Hola Octavio
    Tengo algunos comentarios
    1. Gracias por compartir tus conocimientos, haces de internet una herramienta muy poderosa.
    2. Tienen que hacer una estudio de neurociencia-pedagogia sobre tu forma de explicar, hay muchos videos con el mismo formato, pero tu tono de voz, gestos, y forma de explicar hacen que no pierda el foco en temas complejos. Sin dudas tenes un patrón que sería util comprender.
    3. Cuando consiga mis primeros trabajos en datos serán en gran parte a tus contenidos.
    Saludos desde Argentina.

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Bruno sinceramente agradezco tus comentarios. Tus palabras nos hacen sentir que lo que hacemos tiene verdadero impacto. Muchas gracias!!!

  • @javierderivero9299
    @javierderivero9299 ปีที่แล้ว +3

    Te felicito muy buen video....especialmente lo democratico que eres ya que bosques aleatorios es el voto de las masas

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Muchas gracias por tus comentarios y por seguir el contenido del canal :)

  • @ehcr100
    @ehcr100 2 ปีที่แล้ว +10

    Hola Octavio. Primero que todo quiero mencionar que tienes una pedagogía que es muy escasa en estos días, y eso es importantísimo y que bueno que hay videos como los tuyos. Sobre todo en temas que tienen cierta complejidad. Soy relativamente nuevo creando modelos de clasificación en random forest, y aunque creo entender los puntos mas básicos, tengo aun dudas con respecto al muestreo. Si entiendo bien, el algoritmo de RF usa el bootstrapping para crear cada arbol. Con las muestras OOB se puede calcular el error de clasificación en cada arbol, si comprendo bien. Ahora, si yo decido usar como control la validación cruzada para mi modelo ¿que ocurre en el bootstrapping? ¿el algoritmo sigue aplicando este método en cada arbol? El asunto es que he leído que el error OOB puede estar sesgado para evaluar el modelo. Bueno, espero no molestar tanto. Mil gracias de antemano.

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +4

      Muchas gracias por tus comentarios y por la pregunta tan interesante. Sobre todo en foros he llegado a leer lo que comentas sobre OOB vs cross-validation para el caso de Random Forest. Podría dar mi punto de vista al respecto, pero en estos casos no hay nada mejor que citar a un experto de nivel mundial Leo Breiman:
      "In random forests, there is no need for cross-validation or a separate test set to get an unbiased estimate of the test set error. It is estimated internally, during the run, as follows:
      Each tree is constructed using a different bootstrap sample from the original data. About one-third of the cases are left out of the bootstrap sample and not used in the construction of the kth tree.
      Put each case left out in the construction of the kth tree down the kth tree to get a classification. In this way, a test set classification is obtained for each case in about one-third of the trees. At the end of the run, take j to be the class that got most of the votes every time case n was oob. The proportion of times that j is not equal to the true class of n averaged over all cases is the oob error estimate. This has proven to be unbiased in many tests."
      La información la extraje del siguiente vínculo: www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

    • @ehcr100
      @ehcr100 2 ปีที่แล้ว +1

      @@CodigoMaquina Mil gracias Octavio!!! Ciertamente esta referencia es bastante solida y responde mi pregunta. Saludos

  • @2u15A
    @2u15A 2 หลายเดือนก่อน

    excelente!

  • @brunogianini4011
    @brunogianini4011 ปีที่แล้ว +1

    ¡Gracias!

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Estimado Bruno: Muchas gracias por tus comentarios y por creer en este proyecto a la par de apoyarnos con un Super Gracias. Con este apoyo eres parte de este proyecto que busca un impacto social ¡MUCHAS GRACIAS!

  • @edwardbrandt4868
    @edwardbrandt4868 20 วันที่ผ่านมา

    Excelente video Octavio, ahora a tunear el modelo con CV y la definición de una matriz de confusión. ¿Es posible que puedas generar un caso considerando lo anterior mencionado, sobre todo con la inclusión con las métricas de la matriz de confusión?, muchas gracias.

  • @julianwaksmann185
    @julianwaksmann185 2 ปีที่แล้ว +4

    Gran video!
    Cuando uno de pipelines?

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +2

      Gracias por la sugerencia y por tu comentario. Te comento que ya tenemos ese tema en la lista de espera. Primero meteremos unos cuantos videos más sobre fundamentos, y justo después, uno de pipelines :)

  • @joanagil358
    @joanagil358 2 ปีที่แล้ว +2

    Gran vídeo y explicación! ¿Cómo podría posteriormente introducir nuevos datos sin saber el ingreso para que el lo clasifique usando los datos de entrenamiento?

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Muchas gracias por tus comentarios :) Con respecto a tu pregunta, para clasificar nuevas instancias se utiliza el método predict. En el caso del código presentado en el video sería bosque.predict([[50, 16, 1, 1, 40]]). Lo que recibe de entrada el método es la nueva instancia a clasificar correspondiente a ['edad', 'estudio', 'genero', 'tipo_trabajo', 'horas']

  • @gustavoboadalugo9880
    @gustavoboadalugo9880 ปีที่แล้ว +1

    Me encanta como explicas Tengo una duda este modelo se puede usar para clasificar si un equipo de béisbol le gana al otro o no? Tomando en consideración las estadísticas importantes?

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Gracias por tus comentarios. Con respecto a tu pregunta, efectivamente sí se podría y suena a un proyecto muy interesante. ¡Mucha suerte!

  • @ignaciomonetto6246
    @ignaciomonetto6246 20 วันที่ผ่านมา

    Hola! Saludos desde Argentina. Muchas gracias por el video y muy bien explicado. Tengo una pregunta respecto a un caso que estoy analizando. No tengo en claro como encarar el problema ni con qué algoritmo. Tengo un data set de 200 chicos de la escuela que en cierto punto de su adolesencia se inclinan por practicar un determinado deporte (futbol, tenis, basket, etc). Dado este data set, quisiera predecir a qué deporte se inclinaría una nueva persona, teniendo en cuenta ciertas caracteristicas (edad, zona donde vive, estatura, peso, etc, etc.) y con qué probabilidad. Me ayudas? Saludos.

  • @Edu8a10
    @Edu8a10 5 หลายเดือนก่อน

    Excelente video. Una pregunta, cuál es el video que mencionas en donde se valida el modelo? Muchas gracias

  • @wsxdre1
    @wsxdre1 ปีที่แล้ว +1

    Excelente Canal, tengo una pregunta, un modelo de random forest se podria utilizar para por ejemplo saber cual sera el proximo entrenamiento que un estudiante va a tomar basandose en su historial de entrenamientos_

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Osvaldo muchas gracias por la pregunta. Sin conocer a detalle el contexto, me da la impresión que hay un componente temporal en tus datos y de que se estaría utilizando el modelo de random forest para series de tiempo. Comúnmente random forest se utiliza para regresión y/o clasificación, sin embargo, sí hay trabajos que llegan a utilizar random forest con datos con características de series de tiempo. Tal vez te interesaría echarle un ojo al siguiente artículo:
      Moore, P. J., Lyons, T. J., Gallacher, J., & Alzheimer’s Disease Neuroimaging Initiative. (2019). Random forest prediction of Alzheimer’s disease using pairwise selection from time series data. PloS one, 14(2), e0211558.

  • @yadhfer
    @yadhfer 2 ปีที่แล้ว +2

    Excelente video, nuevo suscriptor, muy bien explicado más bien una duda, si tuviera una data que se trata de una encuesta osea un ejemplo:
    Pregunta 1
    Come carne: si o no
    Pregunta 2
    Se lava las manos: después de cada comida, 1 vez al día, 2 veces
    Pregunta 3
    Como sería en este caso por random forest, saludos desde Perú.

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      Gracias por tus comentarios y por la pregunta. En teoría los árboles de decisión que componen al random forest, sí aceptan variables categóricas (como la encuesta que mencionas). Sin embargo, la implementación de sklearn no maneja directamente ese tipo de variables. No obstante, es muy fácil pre-procesar los datos para convertirlos en numéricos y poder crear un random forest o árboles de decisión. Te recomiendo echarle un ojo a dos videos que ya tenemos en el canal donde justo platico sobre manejo de variables categóricas para machine learning:
      th-cam.com/video/cp7Uo5MSFSE/w-d-xo.html
      th-cam.com/video/KUEsLv8EaVY/w-d-xo.html
      ¡Gracias por ver el canal!

    • @yadhfer
      @yadhfer 2 ปีที่แล้ว +1

      @@CodigoMaquina muchas gracias, lo miro

  • @sebastiancastano7357
    @sebastiancastano7357 2 ปีที่แล้ว +2

    Gracias por la explicación, ¿hay alguna manera en python de extraer las reglas mas representativas del bosque?

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      Gracias por esta pregunta tan interesante. De hecho, la respuesta a esa pregunta es un tema de investigación abierto. Algunos miden la relevancia de las reglas utilizando la frecuencia con la que aparece la regla en el bosque, sin embargo, como comento esto es un tema abierto. Aquí te paso una referencia en dado caso de que desees entrar en detalles: proceedings.mlr.press/v130/benard21a/benard21a.pdf

    • @sebastiancastano7357
      @sebastiancastano7357 2 ปีที่แล้ว

      @@CodigoMaquina muchas graciass, en r usé un paquete llamado intrees que utiliza dicha frecuencia para extraer las reglas más relevantes. En pyhton si he visto métodos pero no funciones como tal que lo hagan.

  • @julianarturomejiaespitia4479
    @julianarturomejiaespitia4479 ปีที่แล้ว +1

    Buenos dias, quisiera saber si yo pudiera usar el metodo predict, para usar el modelo bosque con una data de diferentes dimensiones en cuanto a cantidad de registros (pero igual numero de columnas), y al querer visualizar esto en una matriz de confusion como podria hacerlo, muchas gracias, excelente explicación.

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว +1

      Julian Arturo gracias por la pregunta. Al respecto, efectivamente es posible realizar el proceso que describes, de hecho, prácticamente lo único que se tendrían que incorporar es la matriz de confusión. Te dejo aquí un video que podría ayudarte a combinar ambas temáticas: th-cam.com/video/uaGMk43XTOw/w-d-xo.html

  • @RoronoaZoro-ux7qg
    @RoronoaZoro-ux7qg 2 ปีที่แล้ว +2

    Pregunta, donde o porque solo clasifica en ingreso alto o bajo, y en donde se puede cambiar para que sean mas categorías?

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      Utilizó solo dos clases para simplificar la explicación. Sin embargo, utilizar más clases, por ejemplo, ingreso bajo, ingreso medio, e ingreso alto, es enteramente transparente. Prácticamente lo único que se necesitaría hacer para clasificar n clases, sería tener instancias etiquetadas con cada una de las clases que desees clasificar independientemente de cuántas sean. Gracias por interactuar en el canal :)

  • @digitalpartner3735
    @digitalpartner3735 2 ปีที่แล้ว +2

    Buenísimo video, pero yo tengo una duda si es aplicable a este caso: Un fenómeno es observado en 10 equipos diferentes, todos los días durante 2 años. Con las mismas condiciones se registran frecuencias diferentes, las mismas son registradas en una base excel diariamente. Distribución: Fecha, Eq1,......Eq8 y su freq correspondiente abajo. Es posible montar ese algoritmo para predecir las posibles frecuencias para cada 1 de los equipamentos, teniendo 732 registros anteriores? Si no es aplicable, podrías recomendar el algoritmo más indicado?. Muchas gracias.

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      Muchas gracias por esta pregunta tan interesante. Al parecer tienes un caso muy especial. Sin conocer el tema a detalle pareciera que te convendría hacer uso de técnicas de series de tiempo "tradicionales" aunque hay muchísimas otras opciones y seguro se requerirá de mucho esfuerzo antes de encontrar la mejor técnica y modelo. Te recomiendo un libro gratuito de Hyndman & Athanasopoulos: otexts.com/fpp3/

    • @digitalpartner3735
      @digitalpartner3735 2 ปีที่แล้ว +1

      @@CodigoMaquina Muchísimas gracias por la recomendación, lo leeré. Muchos éxitos.

  • @SR_M0L1NA
    @SR_M0L1NA วันที่ผ่านมา

    Maestro, tengo una duda. ¿Qué hay que hacer para que haya una o varias características fijas en la selección aleatoria de ellas?

  • @PedroChavez
    @PedroChavez ปีที่แล้ว +1

    Me dejaste en el aire.... Despues de generar los arboles, que cosa sigue? Cual seria el modelo final de predicción? Es este entonces:
    bosque0RandomForrestClassifier(n_estimators=100,criterion='gini',max_features='sqrt',bootstrap=True,max_samples=2/3,oob_score=True).... gracias por la explicacion

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Pedro muchas gracias por interactuar en el canal. Con respecto a tu pregunta, el modelo efectivamente está almacenado en la variable "bosque" y para utilizarlo se utiliza el método predict. Si quisieras ver el detalle de todos los árboles que conforma al bosque, se puede hacer, de hecho todos los árboles se encuentran en bosque.estimators_ (favor de ver el minuto 38:15)

  • @HernanOtta
    @HernanOtta ปีที่แล้ว +1

    hola necesito ayuda para hacer un codigo alguien me ayuda?

    • @CodigoMaquina
      @CodigoMaquina  11 หลายเดือนก่อน

      @HernanOtta gracias por ver nuestro canal y espero hayas obtenido el apoyo

    • @HernanOtta
      @HernanOtta 11 หลายเดือนก่อน

      @@CodigoMaquina no tuve apoyo

  • @jhojansolano4249
    @jhojansolano4249 ปีที่แล้ว +1

    Muchas gracias

  • @mauriciosantiago4051
    @mauriciosantiago4051 2 ปีที่แล้ว +2

    Excelente !!!

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Muchas gracias por tu comentario y feliz año :)