Rの分類モデルの増分学習


11

以下のコードを使用して不正を検出するための分類器(デシジョンツリー、ランダムフォレスト、ロジスティック回帰などの標準的な分類器のいずれか)があると仮定します。

library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier 

Say, Y is a binary outcome - Fraud/Not-Fraud

今、私は目に見えないデータセットを予測しました。

pred = predict(rfFit, newData)

次に、分類に関する調査チームからフィードバックを取得しましたが、不正を非詐欺(つまり、1つの偽陰性に分類するのを間違えたことがわかりました。とにかく、アルゴリズムに間違いがあることをアルゴリズムに理解させることができますか?つまり、アルゴリズムにフィードバックループを追加して、間違いを修正できるようにする方法はありますか。

私の頭の上から考えることができる1つのオプションはadaboost classifier、新しい分類器が古い分類器の間違いを修正するようにを構築することです。または私はの何かを聞いたことがありますIncremental LearningOnline learning。に既存の実装(パッケージ)はありRますか?

それは正しいアプローチですか?または、モデルを最初から構築する代わりに微調整する他の方法はありますか?


解決策は見つかりましたか?同じ問題があります。
Blu3nx 2017

@ Blu3nxは質問にコメントするための回答を使用しないでください。答えはそれらに答えることを意味します。
Tim

答えではありませんが、myData $ Fraud [positionofincorrectvariable] =正しい値にならない理由は何ですか?
デールC

回答:


2

ブースティング戦略はモデルのパフォーマンスを向上させる可能性があるため、試してみる価値はあります。インクリメンタル/オンライン学習に関して、私はそれを実装するRのパッケージを知りません(他の人、私が間違っている場合は修正してください)。Scikit Learnには、段階的な学習を可能にするアウトオブコア分類子があります。ただし、Rの使用に縛られている場合は、独自のインクリメンタルモデルを作成するしかありません。どちらの場合でも、Scikit Learnのコア外分類子を調べると、どこから始めればよいかがわかります。

留意すべきもう1つの詳細は、単一の偽陽性または偽陰性でモデルを更新すると、モデルのパフォーマンスがどの程度向上するかです。詐欺の領域では、一般に、詐欺よりも詐欺以外の事例が数千から数百万倍多く存在します。したがって、すべての不正インスタンスを正しく区別することを学ぶことを試みることは重要ですが、単一の不正インスタンスでモデルを更新しても、モデルは大幅に変更されない可能性があります。モデルに詐欺のインスタンスの重要性をさらに高めるための他の戦略を検討してください。

人間の調査員からのフィードバックに基づいて監視モデルを改善する最も簡単な方法は、修正されたインスタンス(つまり、適切にラベル付けされた後に誤って予測されたインスタンス)から別のモデルを構築することです。次に、予測されたクラスメンバーシップを集計することにより、2つのモデルを将来のインスタンスの分類に「投票」できます。たとえば、ModelAInstance1が[Fraud:0.65、Non-Fraud:0.35]であると信じ、ModelBInstance1が[Fraud:0.47、Non-Fraud:0.53]であると信じているかもしれません。したがって、集団の予測は、[不正:(0.65 + 0.47)/2=0.56、非不正:(0.35 + 0.53)/2=0.44]となります。

元のモデルのパフォーマンスが偶然よりも優れている場合、正しく分類されているインスタンスの数は、誤って分類されている数よりも多くなります。したがって、モデルが不釣り合いな数のインスタンスでトレーニングされている場合は、モデルに同じ重みを割り当てる必要はありません。この格差を処理す​​る簡単なオプションが2つあります。1)元のモデルがトレーニングされた数とほぼ同じになるように十分な修正済みインスタンスが蓄積されるまで待つか、2)検証セットでのモデルのパフォーマンスに基づいて各モデルに重みを割り当てます。


0

私は過去に、オンラインおよび段階的な学習についていくつかの調査を行いました。考慮する必要があるいくつかのアイデアがあります。

すべての分類子はインクリメンタル学習を「実行」できます。唯一の問題は、一部の分類器では実行がはるかに難しいことです。そのような漸進的な学習アルゴリズムはなく、一般的なアルゴリズムを使用してこの購入を達成する方法のみです。通常は、それらの1つを選択して、トレーニング方法を調整し、バッチまたはオンラインでデータをフィードします。

これは、次の2つの方法で実行できます。a)新しいサンプル(またはサンプルのセット)が到着するたびに、モデルを最初から再トレーニングします。明らかにこれは理想的ではありませんが、モデルがあまり複雑ではなく(つまり、来たるインスタンス間でトレーニング全体を実行できる)、データセットのサイズを制限する場合(古いデータ、新しいデータまたはランダムデータを破棄し、トレーニングインスタンスの数を一定に保つ場合) )、いくつかのシナリオで機能します。サポートベクターマシンを使用したこの「疑似インクリメンタル」学習の良い例は、こちらにあります

b)予測が間違っていたときに、これらのパラメーターを「少し」変更するだけでモデルのパラメーター/重みを更新する方法を見つけます。ニューラルネットは、モデルをトレーニングし、重みを保存し、データの新しいバッチで再トレーニングできるので、これに最適です。さらに、学習率を微調整して、新しい入力との関連性を増減できます。あなたのケースで任意のアルゴリズムを選択できる場合、これは私の選択です。ただし、他にも多くの方法があります。たとえば、ベイジアンアプローチでは、特定のパラメーターに数値の増分/減分を適用して分布を変更できます(別の例については、これを参照してください)。

少し読んで、学習アルゴリズムの動作に必要なものに一致する以前のアプローチを探してください。このライブラリやそのライブラリを使用する代わりに、自分ですべてを設定するのは最初は気が遠くなるように思えるかもしれませんが、モデルのすべての学習プロセスを担当していると感じる点に到達すると、それは非常にクールになります。

幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.