- 大資料分析教程
- 大資料分析 - 首頁
- 大資料分析 - 概述
- 大資料分析 - 特徵
- 大資料分析 - 資料生命週期
- 大資料分析 - 架構
- 大資料分析 - 方法論
- 大資料分析 - 核心交付成果
- 大資料採用與規劃注意事項
- 大資料分析 - 關鍵利益相關者
- 大資料分析 - 資料分析師
- 大資料分析 - 資料科學家
- 大資料分析有用資源
- 大資料分析 - 快速指南
- 大資料分析 - 資源
- 大資料分析 - 討論
大資料分析 - 線上學習
線上學習是機器學習的一個子領域,它允許將監督學習模型擴充套件到海量資料集。基本思想是我們不需要將所有資料讀入記憶體來擬合模型,我們只需要一次讀取每個例項。
在本例中,我們將展示如何使用邏輯迴歸實現線上學習演算法。與大多數監督學習演算法一樣,存在一個需要最小化的成本函式。在邏輯迴歸中,成本函式定義為:
$$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 ]$$
其中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) 專案是一個快速的記憶體外學習系統,由微軟研究和(以前)雅虎研究贊助”。
我們將使用來自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呼叫的每個引數的含義。
-f model.vw - 表示我們將模型儲存在model.vw檔案中以供以後進行預測
--binary - 將損失報告為具有-1,1標籤的二元分類
--passes 20 - 資料用於20次來學習權重
-c - 建立快取檔案
-q ff - 在f名稱空間中使用二次特徵
--sgd - 使用常規/經典/簡單的隨機梯度下降更新,即非自適應、非歸一化和非不變。
--l1 --l2 - L1和L2範數正則化
--learning_rate 0.5 - 更新規則公式中定義的學習率α
以下程式碼顯示了在命令列中執行迴歸模型的結果。在結果中,我們獲得了平均對數損失以及演算法效能的小型報告。
-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]範圍。為此,我們使用sigmoid變換。
# 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