📅  最后修改于: 2020-12-02 06:47:02             🧑  作者: Mango
在线学习是机器学习的一个子领域,它可以将监督学习模型扩展到大量数据集。基本思想是,我们不需要读取内存中的所有数据即可适应模型,只需要一次读取每个实例。
在这种情况下,我们将展示如何使用逻辑回归来实现在线学习算法。与大多数监督学习算法一样,成本函数被最小化。在逻辑回归中,成本函数定义为-
$$ 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)项目是由Microsoft Research和(以前是Yahoo! Research)赞助的一种快速的核心学习系统”。
我们将使用kaggle比赛中的泰坦尼克号数据集。原始数据可以在bda / part3 / vw文件夹中找到。在这里,我们有两个文件-
为了将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
让我们分解一下大众电话的每个论点的含义。
-f model.vw-表示我们将模型保存在model.vw文件中,以便以后进行预测
–binary-将丢失报告为带有-1,1标签的二进制分类
-通过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]范围。为了做到这一点,我们使用了S形变换。
# 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