การวิเคราะห์ข้อมูลขนาดใหญ่ - การเรียนรู้ออนไลน์
การเรียนรู้ออนไลน์เป็นช่องย่อยของการเรียนรู้ของเครื่องที่ช่วยให้สามารถปรับขนาดโมเดลการเรียนรู้ภายใต้การดูแลเป็นชุดข้อมูลขนาดใหญ่ แนวคิดพื้นฐานคือเราไม่จำเป็นต้องอ่านข้อมูลทั้งหมดในหน่วยความจำเพื่อให้พอดีกับโมเดลเราจำเป็นต้องอ่านทีละอินสแตนซ์เท่านั้น
ในกรณีนี้เราจะแสดงวิธีใช้อัลกอริทึมการเรียนรู้ออนไลน์โดยใช้การถดถอยโลจิสติกส์ เช่นเดียวกับในอัลกอริทึมการเรียนรู้ภายใต้การดูแลส่วนใหญ่จะมีฟังก์ชันต้นทุนที่ลดลง ในการถดถอยโลจิสติกฟังก์ชันต้นทุนถูกกำหนดเป็น -
$$ 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