Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ipynb - Colaboratory
El filtro de spam es un programa de Machine Learning que puede aprender a etiquetar spam
dados algunos ejemplos de emails con spam.
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.
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.
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.
ML puede simplificar el código y mejorar la precisión en problema que requieren muchas reglas
o mucho procesamiento manual.
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
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
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
Aprendizaje semisupervisado
Tratan con datos de entrenamiento parcialmente etiquetados, usualmente muchos datos no
etiquetados y pocos etiquetados.
Ejemplo: GooglePhotos.
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
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
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
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
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
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.
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/
# -*- 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]]
# 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
Retos
Dado que la tarea principal es seleccionar un algoritmo de aprendizaje y entrenarlo con algunos
datos, puede fallar:
Mal algoritmo
Mala data
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.
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.
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
https://colab.research.google.com/drive/14gQGVaJkRiKe6CKdSMt8EFsmAJr12Fi7?usp=sharing#printMode=true 17/17