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