Aprendizaje Estadístico con Python - 4to Encuentro Software libre 2013

23
Introducci´ on Modelos estad´ ısticos Aplicaciones de aprendizaje estad´ ıstico en visi´on computacional Conclusiones Introducci´ on al aprendizaje estad´ ıstico con Python 4to Encuentro Regional de Software Libre. Talca, Octubre 2013. Dr. Sergio Hern´ andez. [email protected] Facultad de Ciencias de la Ingenier´ ıa Dr. Sergio Hern´ andez. [email protected] Introducci´ on al aprendizaje estad´ ıstico con Python

Transcript of Aprendizaje Estadístico con Python - 4to Encuentro Software libre 2013

Page 1: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Introduccion al aprendizaje estadıstico con Python4to Encuentro Regional de Software Libre.

Talca, Octubre 2013.

Dr. Sergio [email protected]

Facultad de Ciencias de la Ingenierıa

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 2: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Introduccion

El termino Aprendizaje Estadıstico se refiere a un coonjunto detecnicas y modelos para analizar conjuntos de datos complejos.

Con la explosion de los datos grandes (a.k.a. Big Data), haresurgido el interes en utliizar estas tecnicas en problemas de minerıade datos con aplicaciones en marketing, finanzas, agricultura deprecision ası como otras areas donde se requiera algun proceso dereconocimiento de patrones.

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 3: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Introduccion

El termino Aprendizaje Estadıstico se refiere a un coonjunto detecnicas y modelos para analizar conjuntos de datos complejos.

Con la explosion de los datos grandes (a.k.a. Big Data), haresurgido el interes en utliizar estas tecnicas en problemas de minerıade datos con aplicaciones en marketing, finanzas, agricultura deprecision ası como otras areas donde se requiera algun proceso dereconocimiento de patrones.

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 4: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Python para datos grandes

Big Data Volumen

VelocidadVariedad

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 5: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Python para datos grandes

Big Data

Volumen

Pydoop

mrjob

HadooPy

Velocidad

Cython

PyCUDA

NumbaPro

Variedad

NoSQL

HappyBase

HDF5

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 6: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

NumPy

NumPy es el corazon de de los paquetes de Python para realizarcomputacion cientıfica. Agrega la capacidad para modelar matrices comoarreglos N-dimensionales y realizar operaciones de algebra lineal sobreellos.

Aw = b3 6 −51 −3 25 −1 4

w1

w2

w3

=

12−210

#!/ usr/bin/python

import numpy as np

A=np.array ([[3,6,-5],

[1,-3,2],

[5,-1,4]])

b=np.array ([12,-2,10])

w=np.linalg.inv(A).dot(b)

print(w)

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 7: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

SciPy y Scikit-Learn

SciPy Es un paquete de computacion cientıfica que utiliza NumPy pararesolver problemas numericos en ingenierıa y ciencias, tales comooptimizacion, integracion, calculo de valores propios, etc.

y = w tx +N (0, σ2)

E (w) =n∑

i=1

(yi − w txi )2

(XTX )w = Xy

w = (XTX )−1Xy

#!/ usr/bin/python

import numpy as np

from sklearn import linear_model

from sklearn.datasets.samples_generator

import make_regression

X, y = make_regression(n_samples =100,

n_features =2, n_informative =1, noise

=50)

regr = linear_model.LinearRegression ()

regr.fit(X, y)

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 8: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

SciPy y Scikit-Learn

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 9: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Scikits

Existe una variedad de add-ons para SciPy denominados SciKits1,los cuales se encuentran bajo licencias OSI (Open Source Initiative).

Las diferencias entre los SciKits con SciPy y NumPy son:

Los SciKits son mas especıficos que SciPy y NumPy.Los paquetes incluidos en SciKits tienen licencias GPL (o similares),las cuales son incompatibles con las licencias BSD de SciPy.Los paquetes podrıan ser incluidos en la distribucion de SciPy peroestan aun siendo desarrollados.

Algunos SciKits proveen metodos y modelos para aplicaciones eningenierıa aeronautica, hidrologıa, observacion de la tierra yprocesamiento de imagentes entre otros.

1http://scikits.appspot.com/

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 10: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Scikits

Existe una variedad de add-ons para SciPy denominados SciKits1,los cuales se encuentran bajo licencias OSI (Open Source Initiative).

Las diferencias entre los SciKits con SciPy y NumPy son:

Los SciKits son mas especıficos que SciPy y NumPy.Los paquetes incluidos en SciKits tienen licencias GPL (o similares),las cuales son incompatibles con las licencias BSD de SciPy.Los paquetes podrıan ser incluidos en la distribucion de SciPy peroestan aun siendo desarrollados.

Algunos SciKits proveen metodos y modelos para aplicaciones eningenierıa aeronautica, hidrologıa, observacion de la tierra yprocesamiento de imagentes entre otros.

1http://scikits.appspot.com/

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 11: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Scikits

Existe una variedad de add-ons para SciPy denominados SciKits1,los cuales se encuentran bajo licencias OSI (Open Source Initiative).

Las diferencias entre los SciKits con SciPy y NumPy son:

Los SciKits son mas especıficos que SciPy y NumPy.Los paquetes incluidos en SciKits tienen licencias GPL (o similares),las cuales son incompatibles con las licencias BSD de SciPy.Los paquetes podrıan ser incluidos en la distribucion de SciPy peroestan aun siendo desarrollados.

Algunos SciKits proveen metodos y modelos para aplicaciones eningenierıa aeronautica, hidrologıa, observacion de la tierra yprocesamiento de imagentes entre otros.

1http://scikits.appspot.com/

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 12: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

SciKit Image

Una de las ventajas de usar SciPy y los SciKits es que podemoscombinar las habilidades de cada paquete por separado de modo derealizar aplicaciones mas complejas que las que incorpora el toolkitoriginal.

Un ejemplo es el SciKit-Image, el cual extiende SciPy incorporandotecnicas de vision computacional y procesamiento de imagenes.

0 50 100 150 200 250 300 350

0

50

100

150

200

250

300

0 50 100 150 200 250 300 350

0

50

100

150

200

250

300

#!/ usr/bin/python

from skimage import data , io, filter

image = data.coins ()

edges = filter.sobel(image)

io.imshow(edges)

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 13: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

SciKit Image

Una de las ventajas de usar SciPy y los SciKits es que podemoscombinar las habilidades de cada paquete por separado de modo derealizar aplicaciones mas complejas que las que incorpora el toolkitoriginal.Un ejemplo es el SciKit-Image, el cual extiende SciPy incorporandotecnicas de vision computacional y procesamiento de imagenes.

0 50 100 150 200 250 300 350

0

50

100

150

200

250

300

0 50 100 150 200 250 300 350

0

50

100

150

200

250

300

#!/ usr/bin/python

from skimage import data , io, filter

image = data.coins ()

edges = filter.sobel(image)

io.imshow(edges)

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 14: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Deteccion y conteo de personas en video (Trabajo de Tesisde Arturo Rojas)

HOG2 (Histograma de Gradientes Orientados) es un poderosodescriptor que permite detectar objetos en imagenes.

Input image Histogram of Oriented Gradients

Input image Histogram of Oriented Gradients

Input image Histogram of Oriented Gradients

#!/ usr/bin/python

from skimage import data , io, filter

from skimage.feature import hog

from skimage import data , color , exposure

coll = io.ImageCollection(data_dir + ’/*.

png’)

rgb_image = coll [1]

image = color.rgb2gray(rgb_image)

fd, hog_image = hog(image , orientations =8,

pixels_per_cell =(4, 4),

cells_per_block =(1, 1), visualise=True

)

2Dalal, N. and Triggs, B., ”Histograms of Oriented Gradients for Human Detection” IEEE Computer Society Conference on

Computer Vision and Pattern Recognition, 2005, San Diego, CA, USA.Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 15: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Regresion logıstica

Utilizando el descriptor HOG es posible entrenar un modelo estadısticoque pueda discriminar escenas que contienen personas de otras que nocontienen personas.

p = σ(w tx)

σ(w tx) =1

1 + exp(−w tx)

y ∼ Bernoulli(p)

#!/ usr/bin/python

from sklearn.linear_model import

LogisticRegression

from sklearn.preprocessing import

StandardScaler

X=loadtxt(’train.csv’)

X = StandardScaler ().fit_transform(X

)

y=loadtxt(’target.csv’)

C=1e0

classifier=LogisticRegression(C=C,

penalty=’l1’, tol =0.001)

classifier.fit(X, y)

coef=classifier.coef_.ravel ()

plt.imshow(coef.reshape (68 ,66),

interpolation=’nearest ’,cmap=’

binary ’,vmax=1,vmin =0)Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 16: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Regresion logıstica

0 10 20 30 40 50 60

0

10

20

30

40

50

60

Figure : Coeficientes estimados con el modelo de regresion logıstica

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 17: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Regresion de Poisson

Aparte de detectar la presencia o no presencia de una persona, ahora serequiere contar (estimar el numero) de personas en una escena. Para estohacemos uso de la distribucion de Poisson3.

λ = exp(w tx)

y ∼ Poisson(λ)

#!/ usr/bin/python

import numpy as np

import statsmodels.api as sm

from sklearn.preprocessing import

StandardScaler

X=loadtxt(’train.csv’)

X = StandardScaler ().fit_transform(X

)

y=loadtxt(’target.csv’)

count = sm.Poisson(X, y)

count.fit(method="newton")

3Chan, A. B., and N. Vasconcelos.”Counting people with low-level features and Bayesian regression” IEEE transactions on image

processing: a publication of the IEEE Signal Processing Society 21.4 (2012): 2160.

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 18: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Estimacion de la madurez fenolica de la uva (Trabajo deTesis de David Andrade)

LDA (Latent Dirichlet Allocation) es un modelo generativo para datosdiscretos que permite modelar distribuciones traslapadas(intercambiables) de color 4.

α ∼ Dirichlet(λα)

zn ∼ Multinomial(α)

β ∼ Dirichlet(λβ)

wn ∼ p(wn|zn, β)

#!/ usr/bin/python

import numpy

lambda = numpy.ones(10,dtype=numpy.

float_)

for d in xrange (1000):

alpha = numpy.random.mtrand.

dirichlet(lambda)

samples = numpy.random.multinomial

(100, topicDist)

wn = numpy.zeros(25, dtype=numpy.

int_)

for t in xrange (10):

wn += numpy.random.multinomial(

samples[t],topics[t])

4FONDEF IDeA CA12i10236 Estimacion de la Madurez Fenolica del la Uva basada en Imagenes de la SemillaDr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 19: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Latent Dirichlet Allocation

0 5 10 15 20

0

2

4

6

8

Figure : Ejemplo de un modelogenerativo para distribuciones de color.En este ejemplo se consideran 10topicos y una cuantizacion de 25 bins.

Figure : Muestras aleatorias del modelogenerativo para distribuciones de color.Cada fila representa una imagen cuyadistribucion de color proviene de unamezcla de distribuciones multinomiales.

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 20: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Conteo de personas en videoClustering de imagenes

Cuantizacion de imagenes

Imagen Original

Figure : Imagen original de semillas deuva

0 50 100 150 200 250 3000.000

0.002

0.004

0.006

0.008

0.010

0.012

0.014 Histograma, 256 bins

0 20 40 60 80 100 120 1400.000

0.002

0.004

0.006

0.008

0.010

0.012

0.014 Histograma, 128 bins

0 10 20 30 40 50 60 700.000

0.002

0.004

0.006

0.008

0.010

0.012

0.014 Histograma, 64 bins

0 5 10 15 20 25 30 350.000

0.002

0.004

0.006

0.008

0.010

0.012 Histograma, 32 bins

Figure : Cuantizaciones de color

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 21: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Python en la investigacion reproducible

Python permite crear un pipeline desde la generacion de datos yextraccion de caracterısticas hasta los modelos estadısticos que seutilizan para explicar los datos.

A nivel de investigacion, esto permite reproducir los resultadosobtenidos por distintos cientıficos y de esta manera validar que losresultados son conmensurables.

https://github.com/sherna90/mlcode

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 22: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Python en la investigacion reproducible

Python permite crear un pipeline desde la generacion de datos yextraccion de caracterısticas hasta los modelos estadısticos que seutilizan para explicar los datos.

A nivel de investigacion, esto permite reproducir los resultadosobtenidos por distintos cientıficos y de esta manera validar que losresultados son conmensurables.

https://github.com/sherna90/mlcode

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python

Page 23: Aprendizaje Estadístico con Python -  4to Encuentro Software libre 2013

IntroduccionModelos estadısticos

Aplicaciones de aprendizaje estadıstico en vision computacionalConclusiones

Python en la investigacion reproducible

Python permite crear un pipeline desde la generacion de datos yextraccion de caracterısticas hasta los modelos estadısticos que seutilizan para explicar los datos.

A nivel de investigacion, esto permite reproducir los resultadosobtenidos por distintos cientıficos y de esta manera validar que losresultados son conmensurables.

https://github.com/sherna90/mlcode

Dr. Sergio Hernandez. [email protected] Introduccion al aprendizaje estadıstico con Python