Machine Learning

Notas sobre Machine Learning de Stanford

Definiciones de Machine Learning

Arthur Samuel (1959): Campo de estudio que da a las computadoras la habilidad de aprender sin ser explicitamente programada.

Tom Mitchel (1998): Se dice que un programa de computadora aprende de una experiencia E respecto a alguna tarea T y alguna medida de rendimiento P, si el rendimiento de sobre T medido por P mejora con la experiencia E.

Tipos de aprendizaje máquina

  • Aprendizaje supervisado
  • Aprendizaje no supervisado
  • Reforzamiento del aprendizaje
  • Sistemas de recomendación

Aprendizaje supervisado

  • Necesitan de un conjunto correcto de respuestas
  • Problemas de regresión: Predecir un resultado de valor continuo
  • Problemas de clasificación: Predecir un resultado de valor discreto.

Aprendizaje no supervisado

  • Algoritmos de agrupamiento (Clustering)
  • Algoritmo de separación de voces
  • Lenguage de prototipado rápido.

Regresión lineal

Notación:

  • m = número de ejemplos para el entrenamiento
  • y’s = variables de entrada / características
  • y’s = variables de salida / variable objetivo
  • (x,y) = un ejemplo de entrenamiento
  • (x^{i}, y^{i}) - i^{th} elemento

Training set -> Learning algorithm -> h (hypothesis)

  • h: x -> y
  • How do we represent h? h_{\Theta}(x) = \Theta_{0} + \Theta_{1x}
  • A veces h_{\Theta}(x) = h(x)
  • minimizar \Theta_{0} \Theta_{1} | \sum\limits_{i=1}^{m}(h_{\Theta^{(i)}} - y^{(i)})^{2}

Regresión lineal con múltiples variables

Notación

  • n = número de características
  • x^{(i)} = entrada de características del i^{esimo} ejemplo de entrenamiento
  • x_{j}^{(i)} = valor de la característica j en el i^{esimo} ejemplo de entrenamiento

Hipótesis generalizada

  • Anteriormente: h_{\theta} (x) = \theta_{1} + \theta_{1x}
  • Ahora: h_{\theta} = \theta_{0} + \theta_{1x_{1}} + \theta_{2x_{2}} + \ldots + \theta_{nx_{n}}
  • Por conveniencia de notación, definimos x_{0} = 1
  • Función de costo J(\theta_{0}, \theta_{1}, \ldots, \theta_{n}) = \frac{1}{2m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^{2}

Gradiente descendiente multivariable

  • Gradiente descendiente (Actualización simultánea \forall j = 0, \ldots, n)

Escalamiento de características.

  • Asegurar que las características están en una escala similar.
  • Posible solución, ortonormalizar los valores de x_{j}
  • Normalización por media: x_{i} = \frac{x_{i} - M_{i}}{s_{i}}, donde M_{i} es el valor promedio para x_{i} en el conjunto de datos, y s_{i} puede ser la diferencia entre max y el min de los valores de tu rango de datos o la desviación estándar de tu conjunto de datos.

Ecuación normal

  • \theta = (X^{T}X)^{-1}X^{T}y
  • En octave \theta = pinv(X’ * X) * X’ * y
  • Gradiente descent vs Normal equation
Gradient descent Normal equation
Needs to choose α No need to choose α
Needs many iterations Don’t need to iterate
Trabaja bien cuando el número de características es grande Lento si el número de características es grande
  • Needs to choose α | No need to choose α
  • Needs many iterations | Don’t need to iterate
  • Trabaja bien cuando el número de car

Tikz test

Here’s a tree, exported to both html and pdf.

Otros

node label shape fillcolor
S_start start ellipse green
S_fill fill form    
S_send send form    
S_complete form complete? diamond yellow
S_do do task   red
S_end end ellipse  
from to label
S_start S_fill  
S_fill S_send  
S_send S_complete  
S_complete S_fill N
S_complete S_do Y
S_do S_end  

example-diagram.png

Anuncios

¿Qué hacer?

A veces no sé ni por donde empezar cuando tengo que realizar alguna actividad. Así que el día de hoy he comenzado a formalizar las cosas que mejor me funcionan a la hora de trabajar.

¿Qué es lo que quiero hacer?

La primera cosa que se tiene que hacer es entender el problema que vas a atacar, esto implica que tendrás que hacer muchas preguntas: “¿qué?, ¿cómo?, ¿cuándo?, ¿donde?, etc”. La segunda cosa que hay que hacer es definir un plan de acción: ¿cómo voy a atacar el problema, qué opciones tengo. Y la tercera es atacar el problema y en caso de ser necesario regresar al primer punto.

¿Por donde empezar?

Una vez que ya entendiste el problema, lo primero que hay que hacer es definir nuevas tareas. Una vez que estén definidas nuestras tareas, hay que comenzar a definir tiempos para resolverlas. Esto implica que debes de haber tenido que realizar un examen de restrospección sobre ti mismo, entendiendo en que cosas eres experto y en que no y así poder definir deadlineas cada vez más exactos.

Comienza a programar

Una vez que comienzas a programar, no pares hasta que termines de implementar el funcionamiento que buscas. Cuesta mucho tiempo el tener que estar revisando el funcionamiento para cada linea de código que implementas.

Domina las herramientas que estás usando

Las herramientas que estás usando siempre conllevan un grado de complejidad al aprenderlas. Esto no implica que debas de dejar de aprenderlas porqué lleguen a ser muy complejas. En todo caso dominalas y ve el potencial que te pueden proveer.

Define tiempos para todo

Lleva un control de los tiempos que tienes y dedicadas a cada tarea. Comienza a dividirlas en las siguientes áreas:

  • Pensando.
  • Aprendiendo.
  • Haciendo.
  • Compartiendo.
  • Revisando.

Una vez que las tengas identificadas, dentro de cada área, vuelve a dividir las actividades por tiempos:

  • Dedicación: Poco tiempo.
  • Dedicación: Mucho tiempo.
  • Estado de la actividad.
  • Cuál es el siguiente paso.

Herramientas para migraciones de bases de datos.

Existen diversos tipos de herramientas para realizar migraciones de bases de datos (Schema migration, database migration, database change management en inglés). Estas herramientas están diseñadas para administrar cambios incrementales y reversibles sobre esquemas de bases de datos relacionales.

Una migración sobre un esquema es realizada siempre que se necesite actualizar o revertir un cambio sobre un esquema de una base de datos relacional.

En este texto, mostraré las herramientas disponibles y de las más oídas para trabajar con migraciones para bases de datos.

Flyway

  • Herramienta desarrollada para interactuar con Java
  • Bases de datos soportadas:
    • Oracle
    • SQL Server
    • SQL Azure
    • DB2
    • MySQL
    • MariaDB
    • Google Cloud
    • PostgreSQL
    • Redshift
    • Otras…
  • Herramientas de Java con las que interactua
    • Maven
    • Gradle
    • Ant
  • 6 Comandos básicos
    • Migrate
    • Clean
    • Info
    • Validate
    • Baseline
    • Repair

Liquibase

  • Herramienta desarrollada para interactuar con Java
  • Bases de datos soportadas
    • MySQL
    • PostgreSQL
    • Oracle
    • SQL Server
    • Sybase
    • DB2
    • Apache Derby
    • Otras
  • Herramientas Java con las que interactua
    • Maven
    • Ant
  • Muchos comandos dependiendo de lo que se quiera hacer

Datical DB

  • Sin interacción directa con Java
  • Bases de datos soportadas
    • Oracle
    • DB2
    • MySQL
    • SQL Server
    • PostgreSQL
    • Otras
  • Muchos comandos dependiendo de lo que se quiera hacer. Similar a Liquibase.

Active Record (migrations)

  • Herramienta hecha con Ruby
  • Bases de datos soportadas
    • PostgreSQL
    • MySQL
  • Comandos basados en definir cosas en Ruby

Ruckusing-migrations

  • Herramienta hecha en PHP
  • Bases de datos soportadas
    • PostgreSQL
    • MySQL
    • Sqlite
  • Varios comandos basados en lo que se quiera hacer.

Phinx

  • Herramienta hecha en PHP
  • Bases de datos soportadas
    • MySQL
    • PostgreSQL
    • SQLite
    • SQL Server
  • Varios comandos basados en lo que se quiera hacer.

MyBatis Migrations

  • Framework de persistencia para Java.
  • Bases de datos soportadas
    • Cualquiera bajo JDBC
  • Configuración basada en SQL, Java y XML

Ragtime

  • Biblioteca para realizar migraciones de datos estructurados hecha en Clojure
  • Bases de datos soportadas
    • Cualquiera bajo JDBC
  • Configuración basada en SQL

Lobos

  • Biblioteca para realizar migraciones de bases de datos escrita en Clojure.
  • Bases de datos soportadas
    • H2
    • MySQL
    • PostgreSQL
    • SQLite
    • SQL Server
  • Configuración bajo clojure