Big Data Analytics: aprendizaje en línea

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:

  • Tenemos datos de entrenamiento (train_titanic.csv) y
  • datos sin etiquetar para generar nuevos pronósticos (test_titanic.csv).

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 

🚫