#!/usr/bin/env python # coding: utf-8 # Aprendiendo Machine Learning con el Mundial # =========================================== # # Nombre alternativo de la charla: Antonio # # Juan Pedro Fisanotti # Objetivo de la charla: # ====================== # - Aprender algunas nociones básicas de Machine Learning # - Reforzar esos conocimientos con un ejemplo real # Machine Learning # ================ # Qué es? # ======= # - Rama de la inteligencia artificial # - Programas que "aprenden desde los datos" # - Cercana a la estadística y métodos matemáticos # Aprendizaje no supervisado # ========================== # Idea principal: reconocer patrones o **agrupaciones** en los datos. # # No interpreta los grupos, eso nos toca a nosotros. # ![](files/unsupervised_learning_1.svg) # ![](files/unsupervised_learning_2.svg) # Aprendizaje supervisado # ======================= # Idea principal: encontrar una **función** que explique los datos de salida a partir de los datos de entrada. # # Nosotros tenemos **ambos** grupos de datos. # ![](files/supervised_learning_1.svg) # Aprendizaje supervisado - Regresión # =================================== # Una función corriente y moliente. # ![](files/regression_1.svg) # ![](files/regression_2.svg) # Aprendizaje supervisado - Clasificación # ======================================= # Una función que devuelva **etiquetas**. # ![](files/clasification_1.svg) # ![](files/clasification_2.svg) # Algunas nociones importantes de aprendizaje supervisado # ======================================================= # Idea de hipótesis # ================= # ![](files/idea_hipotesis_1.svg) # ![](files/idea_hipotesis_2.svg) # Es una función **candidata** a ser la que buscamos para predecir las salidas. # # Los algoritmos van a probar **muchas** hipótesis, y devolvernos la mejor que encuentren. # Idea de modelo # ============== # ![](files/idea_modelo_1.svg) # ![](files/idea_modelo_2.svg) # Es el tipo de función, el **molde**, que vamos a utilizar para armar nuestras hipótesis. # # Por lo general, un algoritmo específico de IA sabe trabajar con un tipo específico de funciones, o grupo de tipos similares. # Entrenamiento y predicción # ===================== # ![](files/entrenamiento.svg) # ![](files/prediccion.svg) # * Primero entrenamos para encontrar una buena hipótesis # * Luego podemos predecir nuevos casos usando la hipótesis encontrada # Modelos paramétricos y no paramétricos # ====================================== # Hablando mal y pronto: # # * **Modelo paramétrico**: arma una f() con algunos parámetros, y eso **solo** basta para hacer predicciones. # # * **Modelo no paramétrico**: tiene una f() que consulta los datos. Para predecir hace falta la f() **más** los datos. # ![](files/parametricos_vs_no_parametricos.svg) # Sobreentrenamiento # ================== # ![](files/high_variance_1.svg) # ![](files/high_variance_2.svg) # ![](files/high_variance_3.svg) # ![](files/high_variance_4.svg) # ![](files/high_variance_5.svg) # ![](files/high_variance_6.svg) # Algunos algoritmos de aprendizaje supervisado # ============================================= # # (ejemplos, hay muchos) # K-Vecinos # ========= # ![](files/k_neighbors_1.svg) # ![](files/k_neighbors_2.svg) # ![](files/k_neighbors_3.svg) # ![](files/k_neighbors_4.svg) # - Es **no paramétrico**. Necesita los datos siempre. # - Es muy **simple**, no tiene tiempo de entrenamiento. # Redes neuronales # ================ # ![](files/neural_networks_1.svg) # ![](files/neural_networks_2.svg) # - Es **paramétrico**, aprende una función y con eso puede predecir, sin llevarse los datos. # - Hay que entrenarlas, y es un proceso **pesado** y **lento**. # - Pueden aprender funciones super complejas (técnicamente, **cualquier** función) # El Mundial # ========== # - Gente que patea una **pelota**. # - Aparentemente, meter la pelota en el **arco** del otro equipo, es bueno. No se sabe bien por qué. # - Cada tanto hay una competencia para ver qué país tiene los mejores peloteadores. # El problema # =========== # Cometí el error de hablar demasiado en un almuerzo con la familia de mi novia (me suele pasar). # # - Prode familiar!! # - Participación obligatoria # - El perdedor cocina para todos # - Se tanto de cocina como de fútbol # La solución # =========== # - Armar un **clasificador** # - Entradas: partidos # - Salidas: quiénes ganan los partidos # Paso 1: obtener datos # ===================== # - Suele renegarse. Renegué (lugar, formato, completitud, etc). # - Mejor fuente: Wikipedia # - Formato: html, no muy estandarizado --> scrapeo + copy/paste --> csv # Paso 2: pre-procesar los datos # ============================== # - "**Numerizar**" nombres de equipos --> estadísticas # - **Normalizar** valores # - Contrarrestar bias de **orden** de equipo # - **Foco** en lo que pueda predecir mejor. Ganados vs empatados. # Paso 3: los datos son clasificables? # ==================================== # - No se pueden graficar todas las dimensiones # - Confirmadas algunas intuiciones obvias # Paso 4: elegir algoritmo # ======================== # - K-vecinos? # - Redes neuronales? # Paso 5: entrenamiento # ===================== # - Back propagation # - Evitar sobreentrenamiento # Paso 6: predecir! # ================= # - No olvidar re-pre-procesar, normalizar, etc. # - Ida y vuelta # - Todos contra todos # - Re-entrenamiento entre etapas # Ya que estamos, competir online en El Ega. # El resultado # ============ # Prode familiar: # **Primer puesto!!** # El Ega (+200 personas): # **Primer puesto!!!!!!!** # Conclusiones # ============ # Machine Learning es algo que puede **fácilmente** aplicarse a problemas reales y no tan grandes, con resultados **suficientemente** buenos (mejores que un humano) para el problema. # # Hay que perderle el miedo. # ? # ==== # Links útiles # ============ # # El código del predictor del mundial visualizado con ejemplos de datos y gráficos: # # http://nbviewer.ipython.org/github/fisadev/world_cup_learning/blob/master/learn.ipynb # # El código fuente de eso mismo en github: # # https://github.com/fisadev/world_cup_learning