Como ejemplo, permítanme explicar cómo haría para implementar la regresión lineal, usando Python y NumPy. La regresión lineal es un algoritmo de aprendizaje supervisado y uno de los algoritmos más simples en todo el aprendizaje automático.
Saqué un conjunto de datos aleatorio de Internet con chirridos de cricket versus temperatura.
- ¿Qué representa un peso en los bordes en un gráfico ponderado en la teoría de gráficos?
- Si creció en una familia alcohólica, ¿cuál fue su historia y los desafíos que enfrenta personal y profesionalmente debido a la educación?
- ¿Cuál es el algoritmo más fácil para encontrar el camino más corto en un robot seguidor de línea para un principiante?
- ¿Cómo asigno enteros de o a n en una matriz bidimensional en Java?
- ¿Cómo idearé un algoritmo eficiente para determinar todos los cursos que debo tomar antes de un curso en particular sin un orden topológico?
Mayor temperatura, más chirridos. Tiene sentido. Ahora, a la implementación.
En términos generales, un algoritmo de aprendizaje supervisado utiliza tres funciones: una función de hipótesis, una función de costo y una función de optimización. Necesitamos implementar esto.
Función de la hipótesis
Nuestra hipótesis lineal está en la forma
[matemáticas] h_ \ Theta (x) = \ Theta_0 + \ Theta_1 * x_1 [/ matemáticas]
usando lo que yo llamo “notación Andrew Ng”, porque esto es lo que usó en el curso de Machine Learning en Coursera.
La hipótesis generalizada de regresión lineal es
[matemáticas] h_ \ Theta (x) = x \ cdot \ Theta = \ Theta_0 * x_0 + \ Theta_1 * x_1 +… + \ Theta_n * x_n [/ math]
¿Cómo traducimos eso en código?
def predecir (X, Theta):
return X.dot (Theta)
¡Tan sencillo como eso!
Llamo a la función predecir , ya que la usaría para predecir valores Y invisibles con nuevas muestras de X. Se generaliza a un número arbitrario de características, aunque solo tengamos una en este caso.
Nota: Agregaré un 1 a cada muestra de [matemáticas] X [/ matemáticas] como un término de sesgo. [math] \ Theta_n [/ math] es entonces el sesgo. Te dejo que descubras cómo implementar esto.
Función de costo
La función de costo nos dice qué tan bien funciona el algoritmo en los datos de entrenamiento. Para la regresión lineal, se ve así:
[matemáticas] J (\ Theta) = \ frac {1} {2m} \ sum_ {i = 1} ^ {m} (h_ \ Theta (x ^ {(i)}) – y ^ {(i)}) ^ 2 [/ matemáticas]
Saqué esto directamente del material del curso Coursera. Implementar esto en código es sencillo.
costo de def (X, Y, Theta):
return np.sum ((predecir (X, Theta) – Y) ** 2) / (2 * len (X))
Función de optimización
Para aprender nuestro modelo, implementaremos el algoritmo de optimización más utilizado en aprendizaje automático, descenso de gradiente. Esta es la regla de actualización:
[matemáticas] \ Theta: = \ Theta – \ alpha \ frac {1} {m} \ sum_ {i = 1} ^ {m} (h_ \ Theta (x ^ {(i)}) – y ^ {(i )}) x ^ {(i)} [/ math]
Nuevamente, se trata simplemente de traducir esto directamente al código.
def descender (X, Y, Theta):
retorno Theta – ALFA * (np.mean ((predecir (X, Theta) -Y) * XT, eje = 1))
Idealmente, debe agregar un término de regularización como L1 o L2, pero para este ejemplo simple realmente no lo necesitamos.
Ahora, hemos implementado las tres funciones que necesitábamos, cada una en una línea de código. Es hora de ejecutar el experimento de aprendizaje.
Configurando el experimento
Ya tengo los vectores X (con términos de sesgo adicionales) e Y.
Inicializamos [math] \ Theta [/ math] en números aleatorios entre -1 y 1. En nuestro caso de regresión lineal simple, [math] \ Theta [/ math] consistirá en dos números, un peso para la función y uno por el sesgo
def init_weights (X):
return np.random.uniform (-1,1, X.shape [1])
Theta = pesos_inicial (X)
También necesitamos algunas constantes. La constante de aprendizaje, [math] \ alpha [/ math], y el número de iteraciones para nuestro experimento.
ALFA = 0.002
ITERACIONES = 50
correr
Ahora, descendemos 50 veces.
costos = []
para i en rango (ITERACIONES):
Theta = descender (X, Y, Theta)
cost.append (costo (X, Y, Theta))
Solo por diversión, llevo un registro de la función de costo para cada iteración. Aquí está el resultado.
El algoritmo converge vergonzosamente rápido, pero este es un conjunto de datos de juguete, después de todo.
Ahora tracemos la línea de regresión sobre el conjunto de datos.
Se ve bien.
Este es el enfoque general para implementar algoritmos de aprendizaje supervisado. Predecir, optimizar y calcular el costo. Encuentre la definición teórica de estas tres funciones y escríbalas en código.
Como a veces me gusta decir: una vez que entiendes este sencillo ejemplo, entiendes el aprendizaje automático. Todo a partir de ahí es solo una complejidad añadida.