Big-data-analytics-online-learning
ビッグデータ分析-オンライン学習
オンライン学習は、教師あり学習モデルを大規模なデータセットに拡張できる機械学習のサブフィールドです。 基本的な考え方は、モデルに適合するためにメモリ内のすべてのデータを読み込む必要はなく、各インスタンスを一度に読み込むだけでよいということです。
この場合、ロジスティック回帰を使用してオンライン学習アルゴリズムを実装する方法を示します。 ほとんどの教師あり学習アルゴリズムのように、最小化されたコスト関数があります。 ロジスティック回帰では、コスト関数は次のように定義されます-
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
次のアルゴリズムにはいくつかの実装がありますが、https://github.com/JohnLangford/vowpal_wabbit/wiki [vowpal wabbit]ライブラリに実装されているものは、最も開発されたものです。 このライブラリは、大規模な回帰モデルのトレーニングを可能にし、少量のRAMを使用します。 クリエーター自身の言葉では、「Vowpal Wabbit(VW)プロジェクトは、Microsoft Researchおよび(以前は)Yahoo!がスポンサーとなっている高速なコア外学習システムです。 研究"。
*kaggle* コンペティションのタイタニックデータセットを使用します。 元のデータは *bda/part3/vw* フォルダーにあります。 ここでは、2つのファイルがあります-
- トレーニングデータ(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コマンドラインをインストールする必要があるため、そのためのhttps://www.cygwin.com/[cygwin] Webサイトを入力してください。
端末を開き、フォルダ 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ラベルのバイナリ分類として損失を報告
- -20回通過-データは重みを学習するために20回使用されます
- -c -キャッシュファイルを作成する
- -q ff -f名前空間で2次機能を使用する
- *-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]の範囲に収まるように正規化されていません。 これを行うには、シグモイド変換を使用します。
# Read the predictions
preds = fread('vw/predictions.txt')
# Define the sigmoid function
sigmoid = function(x) {
1/(1 + exp(-x))
}
probs = sigmoid(preds[[Generate class labels
preds = ifelse(probs > 0.5, 1, 0)
head(preds)
# [1] 0 1 0 0 1 0