現在、Vowpal Wabbit で遊んでいます。ツールがデータセットのシフトをどのように処理するかに特に興味があります。私の直感からすると、VW はオンライン アルゴリズムであるため、これは簡単なはずです。したがって、3 つの特徴を持つテスト データセットを生成しました。次の辞書には、特徴の名前と正または負の確率が含まれています。
{"feat1" : 0.02, "feat2" : 0.3, "feat3" : 0.15}
次に、次の方法でおもちゃのデータセットを生成します。
- 一様にランダムに 1 つの特徴を選択する
- 対応する確率でクラス ラベル 1 を生成し、それ以外の場合は -1 を生成します。
- 約 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 = 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
機能の確率は、2 回目の実行後も変化しません。
feat1 : 0.0221759405605553977
feat2 : 0.3080836682440751833
feat3 : 0.1524675104299118037
したがって、私の結論は次のとおりです。古いモデルを 2 番目のデータセット学習に含めると、何も学習されません。ただし、しばらくすると、Vowpal Wabbit がシフトに適応することを期待しています。明らかに、これは起こりません。
私の質問: このようなデータセットのシフトに適応するには、どのように vowpal wabbit パラメーターを微調整する必要がありますか?