Está en la página 1de 17

8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.

ipynb - Colaboratory

La personas asocian robots con el término “Machine Learning”.


No se trata de una fantasía futurística sino de algo actual.
Se ha venido utilizando hace muchos años en aplicaciones como OCR.
A partir de los 90’s se empezó a utilizar en los filtros de spam, evolucionando hasta
permitir que ahora no necesitamos marcar manualmente emails como spam.

¿Qué significa que una máquina aprenda?

En esta lección se dará un vistazo a los principales tópicos sobre ML.

Aprendizaje supervisado vs no supervisado


Aprendizaje en línea vs en lotes
Aprendizaje en base a instancias vs basado en modelos
Revisaremos el flujo de un proyecto de ML
Discutiremos los principales retos
Evaluación y puesta a punto de sistemas de ML
Introduciremos a la jerga y los conceptos fundamentales

¿Qué es machine learning?


Algunas definiciones:

Es la ciencia (y arte) de programar computadores de forma que estos pueden aprender de


los datos.
Es el campo de estudio que les da a los computadores la habilidad de aprender sin haber
sido programados explícitamente

El filtro de spam es un programa de Machine Learning que puede aprender a etiquetar spam
dados algunos ejemplos de emails con spam.

Los ejemplos que utiliza se llaman conjunto de entrenamiento


Cada ejemplo se llama instancia de entrenamiento o. ejemplo
Se necesita definir un una medida de rendimiento llamado precisión (accuracy)

¿Por qué usar machine learning?


Si qeremos escribir un filtro de spam utilizando técnicas de programación tradicionales:

Observamos cómo luce un spam típico: algunas palabras o frases (“amazing”, “credit
card”, etc) suelen estar en el asunto. Además algunos patrones en el nombre del
remitente, el cuerpo, y así.

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 1/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Podrías escribir un algoritmo de detección para cada uno de los patrones observados, el
programa marcará los emails como spam si algunos de estos patrones se detecta.

Pruebas el programa y repites los pasos 1 y 2

Aunque el problema es trivial puede llegar a tener un conjunto grande de reglas

En cambio un filtro de spam basado en ML aprende qué palabras o frases son buenos
predictores de spam en comparación con los ejemplos.

El programa es mas corto, fácil de mantener y más preciso.

Aunque los spammers empiecen a utilizar otras palabras, el programa con ML identificará estas
y empezará a etiquetarlas si tu intervención

Otra área donde destaca ML es en problemas que no tienen un algoritmo conocido como:

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 2/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Reconocimiento de habla
Reconocimiento de rostros
ML puede ayudar a los humanos a aprender.

Al revisar los datos aprendidos se pueden descubrir relaciones insospechadas entre estos.

La aplicación de técnicas de ML en grandes conjuntos de datos puede ayudar a descubrir


patrones no aparentes, a esto se le llama Data Mining

ML puede simplificar el código y mejorar la precisión en problema que requieren muchas reglas
o mucho procesamiento manual.

ML puede encontrar la solución de problemas complejos

ML puede adaptarse a nuevos datos

ML dá inferencias sobre problemas complejos y grandes volúmenes de datos.

Tipos de sistemas de Machine Learning


Aprendizaje supervisado/no supervisado
Aprendizaje supervisado
El conjunto de datos contiene las soluciones deseadas. Por ejemplo clasificación: como el filtro
de spam
Predicción de un valor objetivo numérico, como el precio, dado un conjunto de
características llamadas predictores.

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 3/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Aprendizaje no supervisado:
El conjunto de entrenamiento no está etiquetado

Clustering

K-Means
DBSCAN
Análisis de cluster jerárquico (HCA)
Detección de anomalías y novedad

One-class SVM
Isolation Forest
Reducción de visualización y dimensionalidad

Análisis de componentes principales (PCA)


Kernel PCA
Locally-Linear Embedding (LLE)
Aprendizaje de reglas de asociación

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 4/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

A priori
Eclat

Los algoritmos de visualización son buenos ejemplos de algoritmos no supervisados.

Una tarea relacionada es la reducción dimensional.

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 5/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

La detección de anomalías sirve para prevenir fraude. De forma similar a la detección de


novedades que espera que los datos sean similares.

Aprendizaje semisupervisado
Tratan con datos de entrenamiento parcialmente etiquetados, usualmente muchos datos no
etiquetados y pocos etiquetados.
Ejemplo: GooglePhotos.

La mayoría de algoritmos semisupervisados son combinaciones de supervisados y no


supervisados.

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 6/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Deep belief networks (DBNs)


Restricted Boltzman Machines(RBMs)

Aprendizaje por refuerzo


El sistema de aprendizaje se llama agente, puede observar el entorno, seleccionar y desarrollar
acciones y obtener recompensas de retorno (o penalidades).

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 7/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Aprendizaje en línea y por Lotes


Batch learning
El sistema es incapaz de aprender incrementalmente

Debe ser entrenado usando los datos disponibles

Toma tiempo y recursos por lo que está offline

Primero se entrena y luego se lanza

También se le llama aprendizaje fuera de línea

Aprendizaje en línea
Se entrena el sistema incrementalmente alimentando datos secuencialmente, individualmente o
en grupos pequeños.

Se pueden usar para entrenar sistemas con datasets muy grandes que no caben en la memoria
(out-of-core)

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 8/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Un parámetro importante de los sistemas en línea es la rapidez de aprendizaje que se llama


learning rate.

Aprendizaje basado en instancias vs basado en modelo


Aprendizaje basado en instancia
Posiblemente la forma más trivial de aprendizaje es aprender de memoria.
El sistema aprende
ejemplos de memoria, luego generaliza los casos nuevos comparándolos con los aprendidos
usando una medida de semenjanza.

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 9/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Aprendizaje basado en modelo


Otra forma de generalizar es construir un modelo que luego se usará para hacer predicciones.

Ejemplo

Suponiendo que quieres conocer si el dinero hace feliz a la gente, para lo cual descargamos el
índice de bienestar del website de la OECD, así como las estadísticas de Producto Bruto Interno
per-capita (GDP), del site de IMF. Luego unimos las tablas y los ordenamos por GDP per capita.

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 10/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Al graficar parece haber una tendencia, pero los datos tiene ruido.
Por lo que decidimos que el
modelo de calidad de vida es una función lineal de GDP per capita, a esto se le llama selección
del modelo.

Life_satisfaction = θ0 + θ1 × GDP_per_capita

Hay muchas posibles aproximaciones dependiendo de los valore que tomemos

¿Cuál es el que mejor se ajusta?

Debemos definir una función de utilidad (o función de ajuste) que mida qué tan bueno es
nuestro modelo, o podemos definir una función de costo que nos diga que tan malo es

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 11/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Aquí entra el algoritmo de regresión lineal, al cual le alimentamos los datos y éste encuentra el
modelo lineal que mejor se ajuste a los datos.

A esto se llama entrenar el modelo.

Ahora estamos listos para correr el modelo para hacer predicciones.


Por ejemplo si queremos
saber que tan felices son los chipriotas y no lo encontramos en la data de OECD. Sabiendo que
el GDP per-capita es de $22,587, y aplicando el model de calidad de vida nos da:

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 12/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

import urllib.request

urllib.request.urlretrieve("https://raw.githubusercontent.com/ivansoriasolis/ia/master/01/
urllib.request.urlretrieve("https://raw.githubusercontent.com/ivansoriasolis/ia/master/01/

('oecd_bli_2015.csv', <http.client.HTTPMessage at 0x7f119828ec50>)

# -*- coding: utf-8 -*-

"""

Created on Mon Feb 28 18:28:38 2022

@author: IVAN

"""

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

import sklearn.linear_model

# Cargando la data data

oecd_bli = pd.read_csv("oecd_bli_2015.csv", thousands=',')

gdp_per_capita = pd.read_csv("gdp_per_capita.csv",thousands=',',delimiter='\t',
                             encoding='latin1', na_values="n/a")

def prepare_country_stats(oecd_bli, gdp_per_capita):

    ''' Acomoda los datos para preparar el conjunto de entrenamiento  '''

    oecd_bli = oecd_bli[oecd_bli["INEQUALITY"]=="TOT"]

    oecd_bli = oecd_bli.pivot(index="Country", columns="Indicator", values="Value")

    gdp_per_capita.rename(columns={"2015": "GDP per capita"}, inplace=True)

    gdp_per_capita.set_index("Country", inplace=True)

    full_country_stats = pd.merge(left=oecd_bli, right=gdp_per_capita,

                                  left_index=True, right_index=True)

    full_country_stats.sort_values(by="GDP per capita", inplace=True)

    remove_indices = [0, 1, 6, 33, 34, 35]

    keep_indices = list(set(range(36)) - set(remove_indices))

    return full_country_stats[["GDP per capita", 'Life satisfaction']].iloc[keep_indices]

# Preparando los datos

country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)

X = np.c_[country_stats["GDP per capita"]]

y = np.c_[country_stats["Life satisfaction"]]

# Visualizando la data

country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')

plt.show()

# Seleccionar un modelo lineal

model = sklearn.linear_model.LinearRegression()

# Entrenando el modelo

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 13/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

model.fit(X, y)

# Haciendo una predicción para Chipre

X_new = [[22587]]  # GDP de Chipre

print(model.predict(X_new)) # salida 

Ejercicio
Haga una predicción para Eslovenia (GDP = $20,732)

# Haciendo una predicción para Eslovenia

X_new = [[20732]]  # GDP de Eslovenia

print(model.predict(X_new)) # salida [[ 5.87131422]]

[[5.92209793]]

Reemplazando la regresión lineal por k-nearest neigbors

# Select a 3-Nearest Neighbors regression model

import sklearn.neighbors

model1 = sklearn.neighbors.KNeighborsRegressor(n_neighbors=30)

# Entrenando el modelo

model1.fit(X,y)

# Haciendo una predicción para Chipre

X_new = [[22587]]  # GDP de Chipre

print(model1.predict(X_new)) # salida [[5.2]]

[[6.49333333]]

Resumiendo:

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 14/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

En resumen lo que hemos hecho:

Estudiamos los datos


Seleccionamos un modelo
Entrenamos con los datos
Aplicamos el modelo para hacer predicciones de nuevos caso.

Retos
Dado que la tarea principal es seleccionar un algoritmo de aprendizaje y entrenarlo con algunos
datos, puede fallar:

Mal algoritmo
Mala data

Insuficiente cantidad de datos de entrenamiento


ML necesita muchos datos aún para los problemas más simples.

Datos de entrenamiento no representativos


Si hay pocos datos, puedes tener ruido de muestreo.
Incluso las muestras grandes pueden ser
no representativas si el método de muestreo es defectuoso. A esto se le llama sesgo de
muestra.

Pobre calidad de los datos


Datos con errores, valores atípicos y ruido. Se debe perder tiempo limpiando los datos de
entrenamiento.
Si los valores son atípicos hay que descartarlos
Si hay datos perdidos se deben
ignorar esos datos.

Características irrelevantes
Si entra basura, sale basura.
Se debe contar con un buen conjunto de características
La
ingeniería de características involucra:
Selección de características
Extracción de
características (reducción dimensional)
Crear nuevas características acopiando nuevos datos

Sobreentrenamiento (overfitting)
La sobregeneralización es algo en lo que las máquinas pueden caer si no se tiene cuidado.
Los
datos ruidosos pueden generar patrones no deseados
Restringir un modelo y simplificarlo para
reducir el riesgo de sobreentrenamiento se llama regularización.

El monto de regularización a ser aplicado durante el aprendizaje puede ser controlado por un
hiperparámetro. Un hiperparámetro es un parámetro de un algoritmo de aprendizaje (no del

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 15/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

modelo), por lo que no es afectado por el algoritmo de aprendizaje en si mismo sino que
permanece constante durante el entrenamiento.

Subentrenamiento (underfitting)
Es lo opuesto al sobreentrenamiento: ocurre cuando el modelo es demasiado simple como para
aprender la estructura subyacente a los datos.

Hay varias opciones para resolver este problema.

Seleccionar un modelo más poderoso, con más parámetros.


Alimentar mejores características al algoritmo de aprendizaje (ingeniería de
características)
Reducir las restricciones del modelo (reducir la regularización de hiperparámetros)

Haz doble clic (o ingresa) para editar

Pruebas y validación
Para saber si el modelo generaliza bien nuevos caso se puede ponerlo en producción y
monitorear su rendimiento. Pero puede desalentar a los usuarios.
Una mejor opción es dividir
los datos en:

El conjunto de entrenamiento
El conjunto de prueba
La tasa de error para los nuevos casos se llama error de
generalización.

Si el error de entrenamiento es bajo per el error de generalización es alto, significa que el


modelo está sobreentrenado.

Afinamiento de hyperparámetros y Selección de modelos


Holdout validation: reservar parte del conjunto de datos para evaluar varios modelos candidatos
y seleccionar el mejor.
A este conjunto se le llama conjunto de validación (también conjunto de
desarrollo)

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 16/17
8/5/22, 00:02 Capitulo 1 - El panorama de Machine Learning.ipynb - Colaboratory

Se entrena múltiples modelos con varios hyperparámetros en el conjunto reducido.


Se selecciona el que rinde mejor con el conjunto de validación.
Por último se entrena este modelo con el conjunto de entrenamiento completo.
Y se
evalúa el modelo con el conjunto de prueba.

Si el conjunto de validación es muy pequeño la evaluación será imprecisa.

https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 17/17

También podría gustarte