Está en la página 1de 78

Machine Learning

Jorge Mario López Pereira


¿Qué es Machine Learning?

2
Machine Learning es aprendizaje automático

• Aprender de los datos


• No programación explícita
• Descubrimiento de patrones ocultos
• Toma de decisiones basada en los datos

3
Programación tradicional VS Machine Learning
Programación tradicional

Datos
Computadora Resultado
Programa

Machine Learning

Datos
Computadora Programa
Resultado

4
Programación tradicional VS Machine Learning

Un ejemplo:

el SPAM

5
Multidisciplinar

6
Ejemplo de aplicación
Detección de fraude en tarjetas de crédito

7
Ejemplo de aplicación
Recomendaciones de compra

8
Otros ejemplos de aplicación

• Anuncios orientados en aplicaciones móviles


• Análisis de sentimiento en las redes sociales
• Monitorización climática para detectar patrones estacionales
• Detección de patrones en la lucha contra el crimen
• Aplicación en sanidad

9
Principales categorías de ML

• Clasificación
• Regresión
• Segmentación (Clustering)
• Asociación

10
Clasificación
Objetivo: Predecir una categoría
Soleado

Ventoso

Lluvioso 11

Nublado
Otros ejemplos de clasificación

• Propensión de compra
• Clasificación de un tumor como benignos o malignos (Binaria)
• Determinación de riesgo (alto, medio, bajo) para una solicitud
de préstamo.
• Sentimiento en las redes sociales como positivo, negativo o
neutro

12
Regresión
Objetivo: Predecir un valor numérico

13
Otros ejemplos de regresión

• Pronóstico de ventas
• Valor de cliente a futuro
• Predecir cantidad de lluvia

14
Segmentación (Clustering)
Objetivo: Organizar en grupos homogéneos
Poco valor

Valor Medio

Alto valor 15
Otros ejemplos de segmentación

• Identificar áreas de similar topografía

• Buscar tipologías de clientes

16
Asociación

Objetivo: Identificación de eventos que ocurren


juntos o en secuencia

17
Otros ejemplos de asociación

• Recomendaciones de compra basado en historial de compras


y navegación

• Venta de artículos que se suelen vender juntos.

18
Aprendizaje supervisado y no supervisado

Supervisado No Supervisado
Target Sin Target

Clasificación Segmentación

Regresión Asociación

19
Aplicaciones
Tipologías de problemas

20
Python para Analisis de Datos
Introducción a las librerías de Python para
análisis de datos
Contenido del Tutorial

Lectura de Datos; Selección y filtros; Manipulación de datos, ordenación,


agrupación

Graficar datos

Estadística descriptiva

Estadística Inferencial

22
Librerías de Python para Análisis de Datos

Las más populares toolboxes/libraries:


– NumPy
– SciPy
Todas estas librerías
– Pandas deben ser instaladas
– SciKit-Learn usando conda o pip,
ya vienen en
anaconda
Librerías de Visualización
– matplotlib
– Seaborn

y muchas más…

23
Librerías de Python para Análisis de Datos

NumPy:
 Introduce objetos multidimensionales vectores(array) y matrices ,
también tiene funciones avanzadas de matemáticas y estadísticas.

 Algunas librerías de Python están desarrolladas usando NumPy

Link: http://www.numpy.org/

24
Python Libraries for Data Science

SciPy:
 Conjunto de algoritmos para algebra lineal, ecuaciones diferenciales,
integración numérica, optimización, estadística y más.

 Construido en NumPy

Link: https://www.scipy.org/scipylib/

25
Python Libraries for Data Science

Pandas:
 Agrega estructura de datos y herramientas diseñadas para trabajar
con tablas similar a series y DataFrame de R.
 Tiene herramientas de manipulación de datos: manipulación:
reorganización, unión, ordenación, sustracción, agregación etc.

Link: http://pandas.pydata.org/

26
Python Libraries for Data Science

SciKit-Learn:
 Tiene algoritmos de machine learning: clasificación, regresión,
clustering, validación de modelos, etc.

 Construido en NumPy, SciPy and matplotlib

Link: http://scikit-learn.org/

27
Python Libraries for Data Science

matplotlib:
 Es la librería 2D de python, tiene figuras de calidad y gran cantidad de
formatos.

 Tienen un conjunto de funcionalidades similares a Matlab

 Gráficos de línea, de dispersión, de barras, histogramas, diagrama de


tortas, etc.

Link: https://matplotlib.org/

28
Python Libraries for Data Science

Seaborn:
 Basado en matpltlib

 Tiene un interfaz de alto nivel para realizar gráficos estadísticos.

 Similar (en estilo) a ggplot2 libraría en R

Link: https://seaborn.pydata.org/

29
Herramientas de trabajo

• https://colab.research.google.com/

• Anaconda Jupyter Notebook: https://www.anaconda.com/

30
Inicia Jupyter notebook

# en tu pc windows powershell o cmd


[scc1 ~] jupyter notebook

31
Importando librerias en Python

In [ ]: #Import Python Libraries


import numpy as np
import scipy as sp
import pandas as pd
import matplotlib as mpl
import seaborn as sns

Press Shift+Enter to execute the jupyter cell

32
Leyendo datos con pandas

In [ ]: #Read csv file


df = pd.read_csv("http://rcs.bu.edu/examples/python/data_analysis/Salaries.csv")

Comandos de pandas para leer archivos por tipo de formatos:

pd.read_excel('myfile.xlsx',sheet_name='Sheet1', index_col=None, na_values=['NA'])


pd.read_stata('myfile.dta')
pd.read_sas('myfile.sas7bdat')
pd.read_hdf('myfile.h5','df')

33
Leyendo datos en colab.research.google.com
from google.colab import files
In [ ]: import pandas as pd
import io
uploaded = files.upload()

for fn in uploaded.keys():
In [ ]: print('User uploaded file "{name}" with length {length}
bytes'.format(name=fn, length=len(uploaded[fn])))

Ejemplo de salida:

User uploaded file "iris.csv" with length 3716 bytes

Con el nombre de la salida "iris.csv" se ejecuta el siguiente código

df = pd.read_csv(io.StringIO(uploaded['iris.csv'].decode('utf-8')))
In [ ]:
df.head()

34
Explorando data frames

In [3]: #List first 5 records


df.head()

Out[3]:

35
Manos a la obra Ejercicios

 Intenta leer los primeros 10, 20, 50 registros;

 Puedes mostrar los ultimos 5 registros; Hint:

36
Tipos de datos en un Data Frame

Pandas Type Native Python Type Description


object string El mas general dtype. Puede ser
asignado a tu columna si la
columna tiene combinación de
tipos de datos.
int64 int Caracteres numéricos. 64 refiere a
la memoria utilizada.

float64 float Caracteres numericos con


decimales.

datetime64, timedelta[ns] N/A (but see the datetime module Valores que indican tiempo.
in Python’s standard library)

37
Tipos de datos en un Data Frame

In [4]: #Check a particular column type


df['salary'].dtype

Out[4]: dtype('int64')

In [5]: #Check types for all the columns


df.dtypes

Out[4]: rank object


discipline object
phd int64
service int64
sex object
salary int64
dtype: object

38
Data Frames: Atributos

Los objetos en python tienen atributos y metodos.

df.attribute description
dtypes Lista los tipos de las columnas
columns Lista los nombres de las columnas
axes Listas las etiquetas de las filas y los nombres de las columnas
ndim Numero de dimensiones
size Numero de elementos
shape Devuelve una tuple indicando las dimensiones
values Representación de los datos de numpy

39
Ejercicios

 Encuentra cuantos registros tiene el dataframe;

 Cuantos datos totals tiene el dataframe?

 Cuales son los nombres de las columnas?

 Que tipos de datos tiene las columnas?

40
Metodos Data Frames
A diferencia de los atributos, los métodos de python tienen paréntesis.
Todos los atributos y métodos se pueden listar con la función dir() función: dir(df)

df.method() description Ej:


head( [n] ), tail( [n] ) primeras/ultimas n filas
df.describe()

describe() Genera estadística descriptiva(solo para columnas


numéricas)
max(), min() max/min para todas las columnas numericas

mean(), median() Media y mediana para todas las columnas numericas

std() Desviación estándar

sample([n]) Muestra aleatoria del dataframe

dropna() borra todos los registros con valores faltantes

41
Ejercicios

 Dé el resumen de las columnas numéricas en el conjunto de datos

 Calcular la desviación estándar para todas las columnas numéricas;

 ¿Cuáles son los valores medios de los primeros 50 registros en el conjunto de

datos? Sugerencia: use el método head () para agrupar los primeros 50

registros y luego calcular la media

42
Seleccionando una columna en un Data Frame

Método 1: usando el nombre de la columna:


df['sex’] (use este método si el nombre de la
columna es igual al nombre de un atributo)

Método 2: usando el nombre de la columna como un atributo:


df.sex

43
Ejercicios

 Calcular las estadísticas básicas para la columna de salario;

 Encuentra cuántos valores tiene la columna de salario (usa el método de

conteo);

 Calcular el salario promedio;

44
Data Frames: Método groupby
Usando el método "agrupar por" podemos:
• Dividir los datos en grupos según algunos criterios.
• Calcular estadísticas (o aplicar una función) a cada grupo.
• Similar a la función dplyr () en R

In [ ]:
#Group data using rank
df_rank = df.groupby(['rank'])

In [ ]: #Calculate mean value for each numeric column per each group
df_rank.mean()

45
Data Frames: Método groupby

Una vez creado el objeto groupby, podemos calcular varias estadísticas para cada
grupo:

In [ ]: #Calculate mean salary for each professor rank:


df.groupby('rank')[['salary']].mean()

Nota:
Si se utilizan corchetes individuales para especificar la columna (por ejemplo, salario), entonces la salida es
un objeto de la Serie Pandas. Cuando se usan corchetes dobles, la salida es un marco de datos

46
Data Frames: Método groupby

notas de rendimiento groupby:


- no se produce agrupación / división hasta que se necesita. La creación del
objeto groupby solo verifica que haya pasado una asignación válida
- Por defecto, las teclas de grupo se ordenan durante la operación de grupo. Es
posible que desee pasar sort = False para una aceleración potencial:

In [ ]: #Calculate mean salary for each professor rank:


df.groupby(['rank'], sort=False)[['salary']].mean()

47
Data Frame: Filtros

Para crear subconjutos de los datos podemos aplicar indexación booleana. Esta
indexación se conoce comúnmente como un filtro. Por ejemplo, si queremos
filtrar las filas en las que el valor del salario es mayor que $ 120K:

In [ ]: #Calculate mean salary for each professor rank:


df_sub = df[ df['salary'] > 120000 ]

Cualquier operador booleano puede se utilizado:


> Mayor que; >= mayor o igual;
< menor que; <= menor o igual;
== igual; != no igual;
#Select only those rows that contain female professors:
In [ ]:
df_f = df[ df['sex'] == 'Female' ]

48
Data Frames: Particionar

Hay varias formas de particionar el data frame:


• una o mas columnas
• una o más filas
• un subconjunto de filas y columnas

Las filas y columnas se pueden seleccionar por su posición o etiqueta

49
Data Frames: Particionar

Al seleccionar una columna, es posible usar un solo conjunto de corchetes, pero el


objeto resultante será una serie (no un marco de datos):

In [ ]:
#Select column salary:
df['salary']

Cuando necesitamos seleccionar más de una columna y / o hacer que la salida sea
un DataFrame, debemos usar corchetes dobles:

#Select column salary:


In [ ]:
df[['rank','salary']]

50
Data Frames: Seleccionando Filas

Si necesitamos seleccionar un rango de filas, podemos especificar el rango usando ":"

#Select rows by their position:


In [ ]:
df[10:20]

Observe que la primera fila tiene una posición 0 y se omite el último valor del rango:
Entonces, para el rango de 0:10, las primeras 10 filas se devuelven con las posiciones
que comienzan con 0 y terminan con 9

51
Data Frames: Método loc
Si necesitamos seleccionar un rango de filas, usando sus etiquetas podemos usar el
método loc:
In [ ]: #Select rows by their labels:
df_sub.loc[10:20,['rank','sex','salary']]

Out[ ]:

52
Data Frames: Método iloc

Si necesitamos seleccionar un rango de filas y / o columnas, usando sus


posiciones podemos usar el método iloc:

In [ ]: #Select rows by their labels:


df_sub.iloc[10:20,[0, 3, 4, 5]]

Out[ ]:

53
Data Frames: Método iloc (resumen)

df.iloc[0] # primera fila de un data frame


df.iloc[i] #(i+1)esima fila
df.iloc[-1] # última fila

df.iloc[:, 0] # Primera columna


df.iloc[:, -1] # Última columna

df.iloc[0:7] #Primeras 7 filas


df.iloc[:, 0:2] #primeras 2 columnas
df.iloc[1:3, 0:2] #Segunda hasta la tercera fila y primeras 2 columnas
df.iloc[[0,5], [1,3]] #1ra and 6ta fila and 2da y 4ta columnas

54
Data Frames: Ordenación

Podemos ordenar los datos por un valor en la columna. De forma


predeterminada, la clasificación se realizará en orden ascendente y se devolverá
un nuevo dataframe.
# Create a new data frame from the original sorted by the column Salary
In [ ]: df_sorted = df.sort_values( by ='service')
df_sorted.head()

Out[ ]:

55
Data Frames: Sorting

Podemos ordenar datos usando dos o más columnas:


df_sorted = df.sort_values( by =['service', 'salary'], ascending = [True, False])
In [ ]:
df_sorted.head(10)

Out[ ]:

56
Valores Faltantes

Los valores faltantes son marcados como NaN


In [ ]: # Read a dataset with missing values
flights = pd.read_csv("http://rcs.bu.edu/examples/python/data_analysis/flights.csv")

In [ ]: # Select the rows that have at least one missing value


flights[flights.isnull().any(axis=1)].head()

Out[ ]:

57
Valores Faltantes

Metodos para trabajar con valores faltantes en un data frame:

df.method() description
dropna() Elimina observaciones con faltantes

dropna(how='all') Elimina las observaciones donde todas las celdas son NA

dropna(axis=1, Elimina las columnas si los datos son NA


how='all')
dropna(thresh = 5) Elimina la fina si tiene al menos 5 NA

fillna(0) Reemplaza los NA por ceros

isnull() Devuelve True si el valor es NA

notnull() Devuelve True para valores que no son NA

58
Valores Faltantes

• Al sumar los datos, los valores faltantes serán tratados como cero
• Si faltan todos los valores, la suma será igual a NaN
• Los métodos cumsum () y cumprod () ignoran los valores faltantes pero los
conservan en las matrices resultantes
• Los valores que faltan en el método GroupBy están excluidos (como en R)
• Muchos métodos de estadística descriptiva tienen la opción skipna para
controlar si se deben excluir los datos faltantes. Este valor se establece en True
de forma predeterminada (a diferencia de R)

59
Funciones de agregación en Pandas

Agregación: calcular una estadística resumida sobre cada grupo, es decir,


calcular sumas o medios grupales
calcular el tamaño de los grupos / cuentas

Funciones comunes:

min, max
count, sum, prod
mean, median, mode, mad
std, var

60
Funciones de agregación en Pandas

agg() El método es útil cuando se calculan múltiples estadísticas por columna. :


In [ ]: flights[['dep_delay','arr_delay']].agg(['min','mean','max'])

Out[ ]:

61
Estadística descriptiva básica

df.method() description
describe Estadisticas basicas(count, mean, std, min, quantiles, max)

min, max Minimo y maximo

mean, median, mode Media, mediana, moda

var, std Varianza y desviacion estandar

sem Error estandar medio

skew asimetria

kurt curtosis

62
Gráficos para explorar datos

Seaborn se construye en matplotlib pero proporciona interfaz de


nivel alto para atractivos gráficos estadísticos, similar a ggplot2
biblioteca en R. Se dirige específicamente a visualización de datos
estadísticos

Para mostrar gráficos en el cuaderno de Python incluyen Directiva inline:

In [ ]: %matplotlib inline

63
Gráficos

Descripción
distplot histograma
barplot estimación de la tendencia central de una variable numérica
violinplot similar a boxplot, también muestra la densidad de
probabilidad de los datos
jointplot Grafico de dispersión
regplot Grafica de regresión
pairplot Pairplot
boxplot boxplot
swarmplot Grafico de dispersión categórico
factorplot Grafico general categórico

64
Análisis estadístico básico
Statsmodel y Scikit-learn - ambos tienen un número de función para el
análisis estadístico la primera de ellas se utiliza principalmente para análisis
regular usando las fórmulas de estilo R, mientras que scikit-learn más es a la
medida para el aprendizaje de máquina.

Statsmodels:
regresiones lineales
ANOVA
prueba de hipótesis y mucho más...

Scikit-learn:
máquinas de soporte vectorial
kmeans
aleatorio bosques
muchos más...
65
Construyendo Sistemas de Machine Learning
con Python
“Life is short
you need Python”
--
Bruce Eckel
Dataset

UC Irvine (UCI) Machine Learning Repository

• Iris dataset: Classify the flowers’ species using the following


features.
• Sepal length.
• Sepal width.
• Petal length.
• Petal width.
Data Visualization
Data Preprocessing
Learning Logistic Regression Model

Training Accuracy: 0.726667


Cross Validation
Train-test split 5-Fold Cross Validation

Training

Testing
• 0 Fold Train Accuracy:0.716667,
Test Accuracy:0.733333
• 1 Fold Train Accuracy:0.766667,
Test Accuracy:0.633333
• 2 Fold Train Accuracy:0.783333,
Test Accuracy:0.566667
• 3 Fold Train Accuracy:0.691667,
Test Accuracy:0.866667
• 4 Fold Train Accuracy:0.741667,
Test Accuracy:0.733333
From Logistic Regression
to Support Vector Machine

• 0 Fold Train Accuracy:0.975000,


Test Accuracy:0.966667
• 1 Fold Train Accuracy:0.966667,
Test Accuracy:0.966667
• 2 Fold Train Accuracy:0.966667,
Test Accuracy:0.966667
• 3 Fold Train Accuracy:0.983333,
Test Accuracy:0.933333
• 4 Fold Train Accuracy:0.966667,
Test Accuracy:1.000000

P.S.: from sklearn.svm import SVC


Parameter Tuning

sklearn.svm.SVC LogisticRegression
• C: Penalty parameter. • C: Penalty parameter.
• Kernel: rbf, poly, linear. • penalty: l1 or l2.
• Degree: for polynomial kernel. • fit_intercept:
• Gamma: for rbf kernel. • solve: lbfgs, lblinear, netwon-cg.
• Etc. • Etc.

NEVER USE YOUR TEST DATA FOR TUNING


Resources
• LIBSVM and LIBLINEAR
• Chih-Jen Lin, National Taiwan University.
• Simple and easy-to-use support vector machines tool.
• Hsu, C.W., Chang, C.C. and Lin, C.J., 2003. A practical guide to support
vector. classification.
https://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf
• SVMlight
• Thorsten Joachims, Cornell University.
• An implementation of Support Vector Machines (SVMs) in C.

• Vowpal Wabbit
• Microsoft Research and (previously) Yahoo! Research
• Fast and scalable tool for learning linear model.

• Mahout on Hadoop.
• MlLib on Spark.
• Petuum.
• Play with more UCI datasets.
• archive.ics.uci.edu/ml

• Play with Tensorflow playground.


• playground.tensorflow.org
Thank you!

También podría gustarte