3

我目前正在玩 Vowpal Wabbit。我对该工具如何处理数据集变化特别感兴趣。从我的直觉来看,这应该是直截了当的,因为 VW 是一种在线算法。因此,我生成了一个具有三个特征的测试数据集。以下字典包含特征的名称和正面或负面的概率:

{"feat1" : 0.02, "feat2" : 0.3, "feat3" : 0.15}

然后我通过以下方式生成一个玩具数据集:

  1. 均匀随机选择一个特征
  2. 生成具有相应概率的类标签 1,否则生成 -1
  3. 生成大约 100000 个数据集/行

我使用 Vowpal Wabbit 在此数据集上学习,使用如下命令:

vw data/startdata.vw --bfgs --passes 10 --loss_function logistic  --compressed --cache_file data/toy.cache --final_regressor data/toy.model

我的 logloss 和 auc 看起来像这样:

logloss = 0.0364034559032
auc = 0.624257973639

已学习的概率如下所示:

feat1 : 0.0221759405605553977
feat2 : 0.3080836682440751833
feat3 : 0.1524675104299118037

结果相当准确。现在我创建另一个具有以下概率的数据集:

{"feat1" : 0.70, "feat2" : 0.80, "feat3" : 0.04}

因此,属于特定类别的特征的概率发生了变化,这本质上是数据集的转移。因为这对我很感兴趣,所以我现在特意包含旧模型来学习新数据集。那是:

vw data/nextdata.vw --bfgs --passes 10 --loss_function logistic  --compressed --cache_file data/toy.cache -i data/toy.model --final_regressor data/toy.model

但是,我现在没有看到某种适应,而是得到以下结果:

logloss = 3.22754717189
auc = 0.456873489527

并且特征的概率在第二次运行后不会改变:

feat1 : 0.0221759405605553977
feat2 : 0.3080836682440751833
feat3 : 0.1524675104299118037

所以我的结论是:当在第二个数据集学习中包含旧模型时,什么都学不到。但是,我预计 Vowpal Wabbit 会在一段时间后适应这种转变。显然,这不会发生。

我的问题:如何调整 vowpal wabbit 参数以适应这样的数据集转换?

4

0 回答 0