Aprendizaje Estadístico con Python - 4to Encuentro Software libre 2013
-
Upload
sergio-hernandez -
Category
Documents
-
view
698 -
download
0
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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