Aprendizaje Estadístico con Python - 4to Encuentro Software libre 2013
1. 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.
shernandez@ucm.cl
Facultad de Ciencias de la Ingenier´ıa
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
2. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Introducci´on
El t´ermino Aprendizaje Estad´ıstico se refiere a un coonjunto de
t´ecnicas y modelos para analizar conjuntos de datos complejos.
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
3. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Introducci´on
El t´ermino Aprendizaje Estad´ıstico se refiere a un coonjunto de
t´ecnicas y modelos para analizar conjuntos de datos complejos.
Con la explosi´on de los datos grandes (a.k.a. Big Data), ha
resurgido el inter´es en utliizar estas t´ecnicas en problemas de miner´ıa
de datos con aplicaciones en marketing, finanzas, agricultura de
precisi´on as´ı como otras ´areas donde se requiera alg´un proceso de
reconocimiento de patrones.
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
4. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Python para datos grandes
Big Data Volumen
VelocidadVariedad
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
5. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Python para datos grandes
Big Data
Volumen
Pydoop
mrjob
HadooPy
Velocidad
Cython
PyCUDA
NumbaPro
Variedad
NoSQL
HappyBase
HDF5
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
6. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
NumPy
NumPy es el coraz´on de de los paquetes de Python para realizar
computaci´on cient´ıfica. Agrega la capacidad para modelar matrices como
arreglos N-dimensionales y realizar operaciones de ´algebra lineal sobre
ellos.
Aw = b
3 6 −5
1 −3 2
5 −1 4
w1
w2
w3
=
12
−2
10
#!/ 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 Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
7. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
SciPy y Scikit-Learn
SciPy Es un paquete de computaci´on cient´ıfica que utiliza NumPy para
resolver problemas num´ericos en ingenier´ıa y ciencias, tales como
optimizaci´on, integraci´on, c´alculo de valores propios, etc.
y = wt
x + N(0, σ2
)
E(w) =
n
i=1
(yi − wt
xi )2
(XT
X) ˆw = Xy
ˆw = (XT
X)−1
Xy
#!/ 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 Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
8. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
SciPy y Scikit-Learn
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
9. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Scikits
Existe una variedad de add-ons para SciPy denominados SciKits1
,
los cuales se encuentran bajo licencias OSI (Open Source Initiative).
1http://scikits.appspot.com/
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
10. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
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 m´as 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 distribuci´on de SciPy pero
est´an a´un siendo desarrollados.
1http://scikits.appspot.com/
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
11. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
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 m´as 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 distribuci´on de SciPy pero
est´an a´un siendo desarrollados.
Algunos SciKits proveen m´etodos y modelos para aplicaciones en
ingenier´ıa aeron´autica, hidrolog´ıa, observaci´on de la tierra y
procesamiento de im´agentes entre otros.
1http://scikits.appspot.com/
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
12. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
SciKit Image
Una de las ventajas de usar SciPy y los SciKits es que podemos
combinar las habilidades de cada paquete por separado de modo de
realizar aplicaciones m´as complejas que las que incorpora el toolkit
original.
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
13. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
SciKit Image
Una de las ventajas de usar SciPy y los SciKits es que podemos
combinar las habilidades de cada paquete por separado de modo de
realizar aplicaciones m´as complejas que las que incorpora el toolkit
original.
Un ejemplo es el SciKit-Image, el cual extiende SciPy incorporando
t´ecnicas de visi´on computacional y procesamiento de im´agenes.
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 Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
14. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Detecci´on y conteo de personas en video (Trabajo de Tesis
de Arturo Rojas)
HOG2
(Histograma de Gradientes Orientados) es un poderoso
descriptor que permite detectar objetos en im´agenes.
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 Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
15. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Regresi´on log´ıstica
Utilizando el descriptor HOG es posible entrenar un modelo estad´ıstico
que pueda discriminar escenas que contienen personas de otras que no
contienen personas.
p = σ(wt
x)
σ(wt
x) =
1
1 + exp(−wtx)
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 Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
16. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Regresi´on log´ıstica
0 10 20 30 40 50 60
0
10
20
30
40
50
60
Figure : Coeficientes estimados con el modelo de regresi´on log´ıstica
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
17. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Regresi´on de Poisson
Aparte de detectar la presencia o no presencia de una persona, ahora se
requiere contar (estimar el n´umero) de personas en una escena. Para esto
hacemos uso de la distribuci´on de Poisson3
.
λ = exp(wt
x)
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 Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
18. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Estimaci´on de la madurez fen´olica de la uva (Trabajo de
Tesis de David Andrade)
LDA (Latent Dirichlet Allocation) es un modelo generativo para datos
discretos 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 Estimaci´on de la Madurez Fen´olica del la Uva basada en Im´agenes de la SemillaDr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
19. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Latent Dirichlet Allocation
0 5 10 15 20
0
2
4
6
8
Figure : Ejemplo de un modelo
generativo para distribuciones de color.
En este ejemplo se consideran 10
t´opicos y una cuantizaci´on de 25 bins.
Figure : Muestras aleatorias del modelo
generativo para distribuciones de color.
Cada fila representa una im´agen cuya
distribuci´on de color proviene de una
mezcla de distribuciones multinomiales.
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
20. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Conteo de personas en video
Clustering de im´agenes
Cuantizaci´on de im´agenes
Imagen Original
Figure : Imagen original de semillas de
uva
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 Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
21. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Python en la investigaci´on reproducible
Python permite crear un pipeline desde la generaci´on de datos y
extracci´on de caracter´ısticas hasta los modelos estad´ısticos que se
utilizan para explicar los datos.
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
22. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Python en la investigaci´on reproducible
Python permite crear un pipeline desde la generaci´on de datos y
extracci´on de caracter´ısticas hasta los modelos estad´ısticos que se
utilizan para explicar los datos.
A nivel de investigaci´on, esto permite reproducir los resultados
obtenidos por distintos cient´ıficos y de esta manera validar que los
resultados son conmensurables.
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python
23. Introducci´on
Modelos estad´ısticos
Aplicaciones de aprendizaje estad´ıstico en visi´on computacional
Conclusiones
Python en la investigaci´on reproducible
Python permite crear un pipeline desde la generaci´on de datos y
extracci´on de caracter´ısticas hasta los modelos estad´ısticos que se
utilizan para explicar los datos.
A nivel de investigaci´on, esto permite reproducir los resultados
obtenidos por distintos cient´ıficos y de esta manera validar que los
resultados son conmensurables.
https://github.com/sherna90/mlcode
Dr. Sergio Hern´andez. shernandez@ucm.cl Introducci´on al aprendizaje estad´ıstico con Python