El aprendizaje en línea es un subconjunto del aprendizaje automático que permite escalar modelos de aprendizaje supervisado a grandes conjuntos de datos. La idea básica es que no necesitamos leer todos los datos en la memoria para ajustar el modelo, solo necesitamos leer cada instancia a la vez.
En este caso, mostraremos cómo implementar un algoritmo de aprendizaje en línea mediante regresión logística. Como ocurre con la mayoría de los algoritmos de aprendizaje supervisado, existe una función de costo que se minimiza. En regresión logística, la función de costo se define como:
$$ J ( theta) : = : \frac {-1} {m} left [ sum_{i = 1}^{m}y^{(i)}log(h_{theta}(x^{(i)})) + (1 – y^{(i)}) log(1 – h_{theta}(x^{(i)})) right ]$$
dónde J (θ) representa una función de costo y hθ (x) representa una hipótesis. En caso de regresión logística, esto se determina mediante la siguiente fórmula:
$$ h_ theta (x) = \frac {1} {1 + e ^ { theta ^ T x}} $$
Ahora que hemos definido la función de costo, necesitamos encontrar un algoritmo para minimizarla. El algoritmo más simple para lograr esto se llama descenso de gradiente estocástico. La regla de actualización para el algoritmo de ponderaciones del modelo de regresión logística se define como:
$$ theta_j: = theta_j – alpha (h_ theta (x) – y) x $$
Hay varias implementaciones del siguiente algoritmo, pero implementadas en wabbit vocalista la biblioteca es, con mucho, la más desarrollada. La biblioteca le permite entrenar modelos de regresión a gran escala y utiliza una pequeña cantidad de RAM. Según los propios creadores, se describe de la siguiente manera: “El Proyecto Vowpal Wabbit (VW) es un sistema de aprendizaje rápido y no programado patrocinado por Microsoft Research y (anteriormente) Yahoo! Investigación «.
Trabajaremos con el conjunto de datos titánico de charla competencia. Los datos brutos se pueden encontrar en bda / part3 / vw carpeta. Aquí tenemos dos archivos:
Para convertir el formato csv a formato wabbit vocalista uso del formato de entrada csv_to_vowpal_wabbit.py Secuencia de comandos de Python. Obviamente, necesitará Python instalado para esto. Cambiar a bda / part3 / vw carpeta, abra el terminal y ejecute el siguiente comando:
python csv_to_vowpal_wabbit.py
Tenga en cuenta que en esta sección, si está utilizando Windows, deberá instalar la línea de comandos de Unix, ingrese Cygwin sitio para esto.
Abrir terminal y también en carpeta bda / part3 / vw y ejecute el siguiente comando:
vw train_titanic.vw -f model.vw --binary --passes 20 -c -q ff --sgd --l1 0.00000001 --l2 0.0000001 --learning_rate 0.5 --loss_function logistic
Veamos que cada argumento vw llamar instalaciones.
-f model.vw – significa que guardamos el modelo en el archivo model.vw para una mayor previsión
– binario – Reporta pérdidas como clasificación binaria con etiquetas -1,1
– pasa 20 – Los datos se utilizan 20 veces para determinar el peso.
-C – crear un archivo de caché
-q ff – Usar funciones cuadráticas en el espacio de nombres f
–sgd – Utilice una actualización de descenso de gradiente estocástico regular / clásico / simple, es decir, no adaptativo, no normalizado y no invariante.
–l1 –l2 – regularización de normas L1 y L2
– tasa de aprendizaje 0.5 – Tasa de aprendizaje α definida en la fórmula de la regla de actualización
El siguiente código muestra los resultados de ejecutar un modelo de regresión en la línea de comandos. Como resultado, obtenemos una pérdida logarítmica promedio y un pequeño informe sobre el rendimiento del algoritmo.
-loss_function logistic creating quadratic features for pairs: ff using l1 regularization = 1e-08 using l2 regularization = 1e-07 final_regressor = model.vw Num weight bits = 18 learning rate = 0.5 initial_t = 1 power_t = 0.5 decay_learning_rate = 1 using cache_file = train_titanic.vw.cache ignoring text input in favor of cache input num sources = 1 average since example example current current current loss last counter weight label predict features 0.000000 0.000000 1 1.0 -1.0000 -1.0000 57 0.500000 1.000000 2 2.0 1.0000 -1.0000 57 0.250000 0.000000 4 4.0 1.0000 1.0000 57 0.375000 0.500000 8 8.0 -1.0000 -1.0000 73 0.625000 0.875000 16 16.0 -1.0000 1.0000 73 0.468750 0.312500 32 32.0 -1.0000 -1.0000 57 0.468750 0.468750 64 64.0 -1.0000 1.0000 43 0.375000 0.281250 128 128.0 1.0000 -1.0000 43 0.351562 0.328125 256 256.0 1.0000 -1.0000 43 0.359375 0.367188 512 512.0 -1.0000 1.0000 57 0.274336 0.274336 1024 1024.0 -1.0000 -1.0000 57 h 0.281938 0.289474 2048 2048.0 -1.0000 -1.0000 43 h 0.246696 0.211454 4096 4096.0 -1.0000 -1.0000 43 h 0.218922 0.191209 8192 8192.0 1.0000 1.0000 43 h finished run number of examples per pass = 802 passes used = 11 weighted example sum = 8822 weighted label sum = -2288 average loss = 0.179775 h best constant = -0.530826 best constant’s loss = 0.659128 total feature number = 427878
Ahora podemos usar model.vw hemos aprendido a hacer predicciones sobre nuevos datos.
vw -d test_titanic.vw -t -i model.vw -p predictions.txt
Las predicciones generadas en el comando anterior no están normalizadas para ajustarse entre [0, 1] clasificar. Para ello utilizamos una transformación sigmoidea.
# Read the predictions preds = fread('vw/predictions.txt') # Define the sigmoid function sigmoid = function(x) { 1 / (1 + exp(-x)) } probs = sigmoid(preds[[1]]) # Generate class labels preds = ifelse(probs > 0.5, 1, 0) head(preds) # [1] 0 1 0 0 1 0
🚫