miércoles, 11 de junio de 2014

Estudio - Python como alternativa a Matlab o R como lenguaje de programación científico


Instalar Python

Distribuciones orientadas al mundo de la ciencia:

Comenzar el aprendizaje de Python

Módulos/paquetes/librerias de análisis matemático y visualización

  • Numpy: manejo de matrices y la realización de operaciones matriciales y vectoriales de forma sencilla y eficiente (puede usar MKL y BLAS para mejorar el rendimiento).
     
  • Scipy: es la biblioteca científica y usa Numpy como base. Con Scipy se añaden todas las funcionalidades que un ingeniero, estadísta, matemático,… puede querer para el tratamiento de señales, creación de nuevos algoritmos, etc.
     
  • Matplotlib: gráficas muy completas para mostrar los resultados de tus pruebas.
     
  • Scikit-learn: librería centrada en machine learning: de clasificadores o regresores, hasta selección automática de modelos y análisis de resultados.

domingo, 8 de junio de 2014

Ampliación del curso: "Machine Learning" de Stanford University

MOOC en  Coursera - Machine Learning

 
   Como ya comenté hace unas semanas en el blog, ya finalicé el MOOC de la universidad Stanford (impartido por Andrew Ng) denominado "Machine Learning" incluido en la plataforma Coursera (el 16 de Junio comienza otra edición del curso por si alguno le interesa realizarlo). La semana pasada se calcularon las notas finales del curso y nos proporcionaron un certificado de cumplimiento a todos los que realizamos el curso y obtuvimos una nota mayor a un 80% (donde 2/3 de la nota provienen de los ejercicios prácticos y 1/3 de los exámenes tipo test):


Asignatura CS229 - Machine Learning de la Universidad de Stanford

   Este mismo curso ampliado y con mayor rigor matemático que el impartido en la plataforma Coursera puede encontrarse en la página de la escuela online de Stanford, correspondiendose con la asignatura CS 229 - Machine Learning. Se pueden descargar (o ver online) 20 videos con las clases impartidas por el profesor Andrew Ng en la universidad de Stanford (1 h 15 min aprox. cada uno), así como el temario, problemas y diferentes documentos de repaso en pdf.

   Durante estas semanas lo he estado siguiendo, ya que tiene un temario más amplio que el MOOC de Coursera, con nuevos conceptos, técnicas y algoritmos que no se mencionan en el MOOC, aportando además un mayor rigor matemático, incluyendo paso por paso todos los pasos y las formulas, teorémas y aproximaciones utilizadas a la hora de obtener los algoritmos.

lunes, 2 de junio de 2014

Matlab - Optimización, procesado paralelo y distribuido --> machine learning y procesado Big Data

Matlab es un lenguaje de alto nivel y un entorno interactivo para el cálculo numérico, la visualización y la programación. Mediante MATLAB, es posible analizar datos, desarrollar algoritmos y crear modelos o aplicaciones. Por lo tanto, constituye una herramienta de software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M).

Optimización en Matlab

Matlab incorpora una libreria llamada  "Optimization Toolbox" que incorpora algoritmos para optimización, tanto para problemas estandar como para problemas a gran escala. Proporciona algoritmos para resolver problemas continuos o discretos, tanto con  restricciones o sin ellas:
"Linear programming", "quadratic programming", "binary integer programming", "nonlinear optimization", "nonlinear least squares", "systems of nonlinear equations" y "multiobjective optimization".  
En muchos problemas nos encontramos que los algoritmos de optimización pueden conducir a mínimos o máximos locales. Matlab incorpora una libreria llamada "Global Optimization Toolbox" que incorpora  técnicas y algoritmos para la búsqueda y obtención de soluciones globales, evitando mínimos/máximos locales:
"Global search", "multistart", "pattern search", "genetic algorithm" y "simulated annealing solvers".

Procesado paralelo y distribuido

Matlab incorpora librerias para facilitar al usuario la programación de algoritmos que sean capaces de correr en paralelo utilizando procesadores multinúcleo, GPUs o clusters de ordenadores:
Muchas de las funciones de optimización incorporadas pueden configurarse para hacer uso de estas herramientas de procesado paralelo y distribuido, tanto para acelerar el proceso, como para la resolución de problemas a gran escala (Big Data).
Recomiendo darle un vistazo a estos dos trabajos donde se utilizan estas librerias en problemas de optimización y de procesado de datos:
"Programación Matlab en paralelo sobre clúster computacional",
"Parallel Optimization in Matlab"

Minería de datos y machine learning

Matlab puede ser usado para realizar tareas de minería de datos y machine learning, incluyendo una gran cantidad de algoritmos implementados en diferentes Toolboxes. Por ejemplo, incluye algoritmos de clasificación (support vector machine (SVM), boosted and bagged decision trees, k-nearest neighbor, Naïve Bayes, discriminant analysis, neural networks...), de regresión (linear model, nonlinear model, regularization, stepwise regression, boosted and bagged decision trees, neural networks, adaptive neuro-fuzzy learning,...) y de clustering (k-means, hierarchical clustering, Gaussian mixture models, hidden Markov models, self-organizing maps, fuzzy c-means clustering, subtractive clustering...).

Big data en Matlab

Matlab incorpora una serie de funcionalidades y herramientas que ayudan a realizar labores de análisis y procesado de datos en problemas Big Data, por ejemplo:
  • Disk Variables. The matfile function lets you access MATLAB variables directly from MAT-files on disk, using MATLAB indexing commands, without loading the full variables into memory. This allows you to do block processing on big data sets that are otherwise too large to fit in memory.
  • Intrinsic Multicore Math. Many of the built-in mathematical functions in MATLAB, such as fft, inv, and eig, are multithreaded. By running in parallel, these functions take full advantage of the multiple cores of your computer, providing high-performance computation of big data sets.
  • GPU Computing. If you’re working with GPUs, GPU-optimized mathematical functions in Parallel Computing Toolbox provide even higher performance for big data sets.
  • Parallel Computing. Parallel Computing Toolbox provides a parallel for-loop that runs your MATLAB code and algorithms in parallel on multicore computers. 
  • Distributed Computing: you can execute in parallel on clusters of machines that can scale up to thousands of computers.
  • Cloud Computing. Cloud computing lets you process big data without having to buy or maintain your own cluster or data center.
  • Distributed Arrays. Using Parallel Computing Toolbox and MATLAB Distributed Computing Server, you can work with matrices and multidimensional arrays that are distributed across the memory of a cluster of computers.
  • Streaming Algorithms.  you can perform stream processing on incoming streams of data that are too large or too fast to hold in memory. In addition, you can generate embedded C/C++ code from your MATLAB algorithms using MATLAB Coder, and run the resulting code on high-performance real-time systems.