Büyük Veri Analitiği - Çevrimiçi Öğrenme

Çevrimiçi öğrenme, denetimli öğrenim modellerini çok büyük veri kümelerine ölçeklendirmeye olanak tanıyan bir makine öğrenimi alt alanıdır. Temel fikir, bir modeli sığdırmak için bellekteki tüm verileri okumamıza gerek olmadığıdır, sadece her bir örneği bir seferde okumamız gerekir.

Bu durumda, lojistik regresyon kullanarak bir çevrimiçi öğrenme algoritmasının nasıl uygulanacağını göstereceğiz. Denetimli öğrenme algoritmalarının çoğunda olduğu gibi, minimize edilmiş bir maliyet işlevi vardır. Lojistik regresyonda, maliyet fonksiyonu şu şekilde tanımlanır:

$$ J (\ theta) \: = \: \ frac {-1} {m} \ left [\ sum_ {i = 1} ^ {m} y ^ {(i)} log (h _ {\ theta} ( x ^ {(i)})) + (1 - y ^ {(i)}) günlük (1 - h _ {\ theta} (x ^ {(i)})) \ sağ] $$

burada J (θ) maliyet fonksiyonunu ve h θ (x) hipotezi temsil eder. Lojistik regresyon durumunda, aşağıdaki formülle tanımlanır -

$$ h_ \ theta (x) = \ frac {1} {1 + e ^ {\ theta ^ T x}} $$

Artık maliyet fonksiyonunu tanımladığımıza göre, onu en aza indirmek için bir algoritma bulmamız gerekiyor. Bunu başarmak için en basit algoritmaya stokastik gradyan inişi denir. Lojistik regresyon modelinin ağırlıkları için algoritmanın güncelleme kuralı şu şekilde tanımlanır:

$$ \ theta_j: = \ theta_j - \ alpha (h_ \ theta (x) - y) x $$

Aşağıdaki algoritmanın birkaç uygulaması vardır, ancak vowpal wabbit kitaplığında uygulanan algoritma açık ara en gelişmiş olanıdır. Kütüphane, büyük ölçekli regresyon modellerinin eğitimine izin verir ve az miktarda RAM kullanır. Yaratıcıların kendi sözleriyle "Vowpal Wabbit (VW) projesi, Microsoft Research ve (daha önce) Yahoo! Research tarafından desteklenen hızlı bir çekirdek dışı öğrenme sistemidir" olarak tanımlanmaktadır.

Titanik veri setiyle çalışacağız. kagglerekabet. Orijinal veriler şurada bulunabilir:bda/part3/vwKlasör. Burada iki dosyamız var -

  • Eğitim verilerimiz var (train_titanic.csv) ve
  • yeni tahminler yapmak için etiketlenmemiş veriler (test_titanic.csv).

Csv formatını vowpal wabbit giriş formatı kullanın csv_to_vowpal_wabbit.pypython komut dosyası. Bunun için kesinlikle python yüklemeniz gerekecek. Şuraya gidin:bda/part3/vw klasör, terminali açın ve aşağıdaki komutu yürütün -

python csv_to_vowpal_wabbit.py

Bu bölüm için, Windows kullanıyorsanız, bir Unix komut satırı kurmanız gerekeceğini unutmayın, bunun için cygwin web sitesine girin .

Terminali açın ve ayrıca klasörde bda/part3/vw ve aşağıdaki komutu çalıştırın -

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

Her argümanın ne olduğunu parçalayalım vw call anlamına geliyor.

  • -f model.vw - modeli daha sonra tahminler yapmak için model.vw dosyasına kaydettiğimiz anlamına gelir

  • --binary -1,1 etiketlerle ikili sınıflandırma olarak kaybı bildirir

  • --passes 20 - Veriler ağırlıkları öğrenmek için 20 kez kullanılır

  • -c - bir önbellek dosyası oluşturun

  • -q ff - f ad alanında ikinci dereceden özellikler kullanın

  • --sgd - normal / klasik / basit stokastik gradyan iniş güncellemesini kullanın, yani adaptif olmayan, normalize edilmeyen ve değişmeyen.

  • --l1 --l2 - L1 ve L2 norm düzenlenmesi

  • --learning_rate 0.5 - Güncelleme kuralı formülünde tanımlanan öğrenme oranı α

Aşağıdaki kod, regresyon modelini komut satırında çalıştırmanın sonuçlarını gösterir. Sonuçlarda, ortalama günlük kaybını ve algoritma performansının küçük bir raporunu alıyoruz.

-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

Şimdi kullanabiliriz model.vw yeni verilerle tahminler üretmek için eğitim aldık.

vw -d test_titanic.vw -t -i model.vw -p predictions.txt

Önceki komutta oluşturulan tahminler [0, 1] aralığı arasına sığacak şekilde normalleştirilmemiştir. Bunu yapmak için sigmoid dönüşüm kullanıyoruz.

# 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