การวิเคราะห์ข้อมูลขนาดใหญ่ - การเรียนรู้ออนไลน์

การเรียนรู้ออนไลน์เป็นช่องย่อยของการเรียนรู้ของเครื่องที่ช่วยให้สามารถปรับขนาดโมเดลการเรียนรู้ภายใต้การดูแลเป็นชุดข้อมูลขนาดใหญ่ แนวคิดพื้นฐานคือเราไม่จำเป็นต้องอ่านข้อมูลทั้งหมดในหน่วยความจำเพื่อให้พอดีกับโมเดลเราจำเป็นต้องอ่านทีละอินสแตนซ์เท่านั้น

ในกรณีนี้เราจะแสดงวิธีใช้อัลกอริทึมการเรียนรู้ออนไลน์โดยใช้การถดถอยโลจิสติกส์ เช่นเดียวกับในอัลกอริทึมการเรียนรู้ภายใต้การดูแลส่วนใหญ่จะมีฟังก์ชันต้นทุนที่ลดลง ในการถดถอยโลจิสติกฟังก์ชันต้นทุนถูกกำหนดเป็น -

$$ J (\ theta) \: = \: \ frac {-1} {m} \ left [\ sum_ {i = 1} ^ {m} y ^ {(i)} บันทึก (h _ {\ theta} ( x ^ {(i)})) + (1 - y ^ {(i)}) บันทึก (1 - h _ {\ theta} (x ^ {(i)})) \ right] $$

โดยที่J (θ)แทนฟังก์ชันต้นทุนและh θ (x)แสดงถึงสมมติฐาน ในกรณีของการถดถอยโลจิสติกจะกำหนดด้วยสูตรต่อไปนี้ -

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

ตอนนี้เราได้กำหนดฟังก์ชันต้นทุนแล้วเราต้องหาอัลกอริทึมเพื่อย่อขนาด อัลกอริทึมที่ง่ายที่สุดในการบรรลุสิ่งนี้เรียกว่าการไล่ระดับสีแบบสุ่ม กฎการอัพเดตของอัลกอริทึมสำหรับน้ำหนักของแบบจำลองการถดถอยโลจิสติกถูกกำหนดเป็น -

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

มีการใช้อัลกอริทึมต่อไปนี้หลายอย่าง แต่วิธีที่ใช้ในไลบรารีvowpal wabbitนั้นเป็นวิธีที่ได้รับการพัฒนามากที่สุด ไลบรารีช่วยให้ฝึกโมเดลการถดถอยขนาดใหญ่และใช้ RAM จำนวนน้อย ในคำพูดของผู้สร้างมีการอธิบายว่า: "โครงการ Vowpal Wabbit (VW) เป็นระบบการเรียนรู้นอกระบบที่รวดเร็วซึ่งสนับสนุนโดย Microsoft Research และ (ก่อนหน้านี้) Yahoo! Research"

เราจะทำงานกับชุดข้อมูลไททานิกจาก a kaggleการแข่งขัน. ข้อมูลต้นฉบับสามารถพบได้ในไฟล์bda/part3/vwโฟลเดอร์ ที่นี่เรามีสองไฟล์ -

  • เรามีข้อมูลการฝึกอบรม (train_titanic.csv) และ
  • ข้อมูลที่ไม่มีป้ายกำกับเพื่อทำการคาดการณ์ใหม่ (test_titanic.csv)

ในการแปลงรูปแบบ csv เป็นไฟล์ vowpal wabbit รูปแบบการป้อนข้อมูลใช้ไฟล์ csv_to_vowpal_wabbit.pyสคริปต์ python คุณจะต้องติดตั้ง python สำหรับสิ่งนี้อย่างชัดเจน ไปที่ไฟล์bda/part3/vw เปิดเทอร์มินัลและดำเนินการคำสั่งต่อไปนี้ -

python csv_to_vowpal_wabbit.py

โปรดทราบว่าสำหรับส่วนนี้หากคุณใช้ windows คุณจะต้องติดตั้งบรรทัดคำสั่ง Unix ให้เข้าสู่เว็บไซต์cygwinสำหรับสิ่งนั้น

เปิดเทอร์มินัลและในโฟลเดอร์ bda/part3/vw และดำเนินการคำสั่งต่อไปนี้ -

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

ให้เราแยกย่อยสิ่งที่โต้แย้งของ vw call หมายถึง.

  • -f model.vw - หมายความว่าเรากำลังบันทึกโมเดลในไฟล์ model.vw เพื่อทำการคาดการณ์ในภายหลัง

  • --binary - รายงานการสูญเสียเป็นการจำแนกไบนารีโดยมีป้ายกำกับ -1,1

  • --passes 20 - ข้อมูลถูกใช้ 20 ครั้งเพื่อเรียนรู้น้ำหนัก

  • -c - สร้างไฟล์แคช

  • -q ff - ใช้คุณสมบัติกำลังสองในเนมสเปซ f

  • --sgd - ใช้การอัปเดตการไล่ระดับสีแบบสุ่มแบบสุ่ม / คลาสสิก / แบบง่ายเช่นไม่ปรับเปลี่ยนไม่เป็นมาตรฐานและไม่แปรผัน

  • --l1 --l2 - การทำให้เป็นมาตรฐานของ L1 และ L2

  • --learning_rate 0.5 - อัตราการเรียนรู้αasกำหนดไว้ในสูตรกฎการอัพเดต

รหัสต่อไปนี้แสดงผลลัพธ์ของการรันโมเดลการถดถอยในบรรทัดคำสั่ง ในผลลัพธ์เราได้รับการสูญเสียบันทึกโดยเฉลี่ยและรายงานเล็กน้อยเกี่ยวกับประสิทธิภาพของอัลกอริทึม

-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

ตอนนี้เราสามารถใช้ไฟล์ model.vw เราฝึกฝนเพื่อสร้างการคาดการณ์ด้วยข้อมูลใหม่

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

การคาดคะเนที่สร้างขึ้นในคำสั่งก่อนหน้านี้ไม่ได้ถูกทำให้เป็นมาตรฐานเพื่อให้พอดีระหว่างช่วง [0, 1] ในการทำสิ่งนี้เราใช้การแปลงซิกมอยด์

# 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