- David Barber, Bayesian Reasoning and Machine Learning, , Cambridge University Press, 2017.
-
Otros libros de Machine Learning.
- Python Machine Learning de Sebastian Raschka, Pack Publishing, 2015.
- Machine Learning: a Probabilistic Perspective de Kevin Murphy (2012).
- Pattern Recognition and Machine Learning de Chris Bishop (2006).
- Data Science From Scratch: First Principles with Python de Joel Grus 2015.
- Machine Learning refined: Foundations, Algorithms, and Applications 1st Edition Jeremy Watt, Reza Borhani y Aggelos K. Katsaggelos, 2016.
- Foundations of Machine Learning (Adaptive Computation and Machine Learning series) Mehryar Mohri, Afshin Rostamizadeh y Ameet Talwalkar, 2012.
- David Barber, Bayesian Reasoning and Machine Learning, , Cambridge University Press, 2012.
- Shai Shalev-Shwartz, and Shai Ben-David,Understanding Machine Learning: From Theory to Algorithms, Cambridge University Press, 2014.
-
Cálculo
- Apendice D del libro de Chris Bishop.
- Notas del MIT para multiplicadores de Lagrange.
- Lagrange Multipliers without Permanent Scarring de Dan Klein.
-
Probabilidad
-
Álgebra Lineal
- Coding The Matrix: Linear Algebra Through Computer Science Applications, fantástico libro de Philip Klein (Revisar los diapositivas que acompañan al libro).
- Notas de álgebra lineal de las clases de Machine Learning de Stanford.
- Apendice C del libro de Chris Bishop.
- Notas de Sam Roweis.
-
Optimización
- Convex Optimization de Stephen Boyd y Lieven Vandenberghe.
- Notas de Optimización de las clases de Machine Learning de Stanford:
- Ejemplo 1: Introduction.
- Ejemplo 2: Rules on Rules on Rules.
- Ejemplo 3: Now I R1.
- Ejemplo 4: Machine Learning.
- Ejemplo 5: To Learn is to Generalize.
- Ejemplo 6: It's Definitely Time to Play with Legos.
- Ejemplo 7: There is no f.
- Ejemplo 8: More Assumptions...Fewer Problems?.
- Ejemplo 9: Bias Variance Throwdown.
- Ejemplo 10: World Domination.
- Ejemplo 11: Haystacks on Haystacks.
- Ejemplo 12: Let's Get Greedy.
- Ejemplo 13: Heuristics.
- Ejemplo 14: Mejorando las Heurísticas.
- Ejemplo 15: Information.
-
Clase 1: Introducción al Machine Learning
-
Clase 2: Introducción al aprendizaje: Funciones de pérdida, algoritmo del perceptrón, prueba de errores del perceptrón.
-
Clase 3: Clasificadores lineales: Introducción al SVM.
-
Clase 4: SVM: Introducción a la optimización convexa
-
Clase 5: Descenso de gradiente estocástico
-
Clase 6: Métodos del Kernel: Métodos del Kernel para SVM y classificación multiclases.
-
Clase 7: Regularización L1 y introducción a la teoria del aprendizaje
-
Clase 8: Teoria del aprendizaje: Clases de hipótesis finitas
-
Clase 9: Teoria de aprendizaje: Dimensión VC
-
Clase 10 : Árboles de decisión
-
Clase 11: K-means
-
Clase 12: Clasificación jerárquica y espectral
-
Clase 13: Introducción a la inferencia Bayesiana: Naive Bayes.
-
Clase 14: Regresión logística
-
Clase 15: K vecinos más cércanos
Los artículos propuestos se encuentran en la carpeta PapersML del repositorio del trabajo. Los participantes pueden elegir algún tema de proyecto de los artículos presentados o elegir alguno de su interés.
La fuente de muchos artículos relacionado al curso es: https://papers.nips.cc/ o http://jmlr.csail.mit.edu/papers/.
Un cronograma propuesto de asignaciones es :
- Asignación 1: 22 de setiembre
- Asignacion 2: 2 de octubre
- Asignacion 3: 14 de octubre
- Asignacion 4: 29 de octubre
- Asignacion 5: 19 de noviembre
- Asignación 6: 3 de diciembre
Fecha de presentación de proyectos
- Proyecto parcial: Semana del 9 al 13 de octubre
- Proyecto final: Semana del 11 al 15 de diciembre
Cualquier cambio que realices en tus repositorios o documentos en github después de la fecha de vencimiento se ignorará. Por favor, tengan todo su trabajo enviado y probado (presentaciones y/o páginas web, screencasts, código etc.) antes de la fecha límite.
1 .Binarized Neural Networks: Sobre un método para entrenar Redes Neuronales Binarizadas (BNNs) - redes neuronales con pesos binarios y activaciones en tiempo de ejecución.
- Frank Cano Diaz
- Franz Maguiña Aranda
- Julio Cesar Silva
- Gianfranco Ferro Palomino
2 .A Neural Algorithm of Artistic Style: El paper introduce un sistema artificial basado en una Red Neural Profunda que crea imágenes artísticas de alta calidad perceptiva.
- Briggette Román Huaytalla
- Danny Julca Carhuaz
- Edgar Huaranga Junco
- Rogger Valverde Flores
- Victor Sotelo Chico
3 .Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks: Se presenta una reparametrización de los vectores de pesos en una red neural que desacopla la longitud de esos vectores de peso desde su dirección.
- Leonardo León Vera
- Enrique Peinado Rodriguez
- Renzo Cerrón Tome
- Gerson Garrido Mansilla
4 .Where are they looking? El paper presenta un modelo de red profunda capaz de descubrir cómo extraer la postura de la cabeza y la orientación de la mirada, y seleccionar objetos en la escena que están en la línea de visión prevista.
- Bruno Bedon Vasquez
- Miguel Mejia Puma
- Bitzer Arotoma Bacilio
- Óscar Huarcaya Canal
5 .Map-Reduce for Machine Learning on Multicore El artículo muestra que los algoritmos que se ajustan al modelo de consulta estadística pueden ser escritos en una cierta forma de suma, que les permite ser fácilmente paralelizados en computadoras multinúcleo.
Adaptamos el paradigma de reducción de mapas de Google para demostrar esta técnica de aceleración paralela en una variedad de algoritmos de aprendizaje, incluyendo regresión lineal ponderada localmente (LWLR), k-means, regresión logística (LR), Bayes naïve (NB), SVM, ICA, PCA , análisis discriminante gaussiano (GDA), EM y retropropagación (NN).
- Katia Cotaquispe Mendoza
- George Prado Acuña
- Miguel Mini Huambachano
- Victor Galvan Oyola
Las tareas, asignaciones y proyecto se realizarán con 4 compañeros de clase. En general, no anticipamos que las calificaciones para cada miembro del grupo serán diferentes, sin embargo, me reservo el derecho de asignar diferentes calificaciones a cada miembro del grupo, de acuerdo al grado de participación.
Escribe todos tus códigos y ejemplos de preferencia en Python utilizando las librerias mencionadas en el curso como scikit-learn o TensorFlow, el código debe las cosas de manera correcta, pensando en aspectos como la reutilización, manejo de errores, etc. Es menester que documente su código con herramientas como doxygen.
El equipo debe presentar un sitio web público para sus asignaciones, tareas de reforzamiento, proyectos, utilizando Github Pages o cualquier otro servicio de alojamiento web de su elección. El sitio web debe resumir en el caso del proyecto, los tópicos del tema elegido , incorporar algunas visualizaciones y un screencast al sitio web. Puedes ver un ejemplo de presentación parcial aquí.
Cada equipo creará un screencast de 5 minutos como mínimo mostrando, en que consiste su proyecto, utilizando un cuaderno de jupyter notebook o algunas diapositivas. Puedes encontrar información de como hacerlo en Making a Screencast Video o en How to record screencasts with recordMyDesktop.
- Miércoles 4 - 6 Sala 2.
- Miércoles 6- 8 Sala 1.
Anaconda es una distribución completa libre de Python incluye paquetes de Python .
Anaconda incluye los instaladores de Python 2.7 y 3.5. La instalación en Linux, se encuentra en la página de Anaconda y es más o menos así
1 . Descargar el instalador de Anaconda para Linux.
2 . Después de descargar el instalar, en el terminal, ejecuta para 3.5
c-lara@Lara:~$ bash Anaconda3-2.4.1-Linux-x86_64.sh
Es recomendable leer, alguna de las característica de Anaconda en el siguiente material conda 30-minutes test drive.
3 . La instalación de paquetes como seaborn o bokeh se pueden realizar a través de Anaconda, de la siguiente manera:
c-lara@Lara:~$ conda install bokeh
Alternativamente podemos desde PyPI usando pip:
c-lara@Lara:~$ pip install bokeh
El proyecto Anaconda ha creado R Essentials, que incluye el IRKernel y alrededor de 80 paquetes para análisis de datos, incluyendo dplyr
, shiny
, ggplot2
,caret
, etc. Para instalar R Essentials en un entorno de trabajo, hacemos
c-lara@Lara:~$ conda install -c r r-essentials
El Proyecto Jupyter es una aplicación web que te permite crear y compartir documentos que contienen código de diversos lenguajes de programación, ecuaciones, visualizaciones y texto en diversos formatos. El uso de Jupyter incluye la ciencia de datos, simulación numérica, la modelización en estadística, Machine Learning, etc.
Jupyter nbviewer es un servicio web gratuito que te permite compartir las versiones de archivos realizados por Jupyter, permitiendo el renderizado de diversos fórmatos incluyendo, código latex.
Git es un sistema de control de versiones de gran potencia y versatilidad en el manejo de un gran número de archivos de código fuente a a través del desarrollo no lineal, es decir vía la gestión rápida de ramas y mezclado de diferentes versiones.
Para poder revisar y aprender los comandos necesarios de Git, puedes darle una ojeada al excelente tutorial de CodeSchool o a la guía de Roger Dudle para aprender Git.
Github es una plataforma de desarrollo colaborativo de software utilizado para alojar proyectos (muchos proyectos importantes como paquetes de R, Django, el Kernel de Linux, se encuentran alojados ahí) utilizando Git y el framework Ruby on Rails.
Podemos instalar Git en Ubuntu utilizando el administrador de paquetes Apt
:
c-lara@Lara:~$sudo apt-get update
c-lara@Lara:~$sudo apt-get install git
Referencias y Lecturas
Scikit-learn, es tal vez la mejor biblioteca para Machine Learning, construida sobre NumPy, SciPy y Matplotlib, esta biblioteca contiene una gran cantidad de herramientas eficientes para el Machine Learning y el modelado estadístico incluyendo clasificación, regresión, agrupación y reducción de la dimensionalidad.
- Video sobre Machine Learning with scikit-learn de Jake VanderPlas.
- Machine Learning Cheat Sheet for scikit-learn.
- Notas de Scikit-Learn como herramienta de Machine Learning.
Weka (Waikato Environment for Knowledge Acquisition) es una herramienta de Machine Learning y Data Minning escrito en Java. Con Weka podemos hacer Preprocessing data, clustering, classification, regression y ahora Big Data y datos con un driver JDBC.
Para instalar Weka en Ubuntu, desempaquetar el archivo conteniendo a Weka en algún de tu preferencia y luego ir al directorio creado (weka-3-6-13) y ejecutar
c-lara@Lara:~$java -Xmx1000M -jar weka.jar
Podemos aprender un poco de Weka usando el video de Brandon Weinberg o el canal de Youtube de Weka.
Mahout es un proyecto que es es parte del proyecto Apache. Una característica principal de Mahout es su integración con el paradigma Hadoop Map/Reduce para el procesamiento de datos a gran escala. Mahout soporta un gran número de algoritmos incluyendo:
- Naive Bayes Classifier.
- K Means Clustering.
- Recommendation Engine.
- Logistic Regression Classifier.
- Random Forest.
Lecturas
- Mahout in Action de Sean Owen, Robin Anil, Ted Dunning y Ellen Friedman, Manning Publications, 2011.
Spark es un framework de análisis distribuido en memoría y nos permite ir más allá de las operaciones en batch de Hadoop MapReduce: procesamiento de streaming, machine learning (MLlib), cálculo de grafos (GraphX), integración con lenguje R (Spark R) y análisis interactivos.
Al igual que su predecesor, MapReduce que logra prácticamente una relación lineal de escalabilidad, Spark mantiene la escalabilidad lineal y la tolerancia a fallos de MapReduce, pero amplía sus bondades gracias a varias funcionalidades:
- DAG (Directed Acyclic Graph).
- RDD (Resilient Distributed Dataset).
Algunas lecturas y referencias