クラスの不均衡の問題があり、コストに敏感な学習を使用してこれを解決したいと思います。
質問
Scikit learnには、クラスの重みとサンプルの重みという2つのオプションがあります。サンプルの重みは実際にオプション2)とクラスの重みオプション1)を実行していますか。オプション2)クラスの不均衡を処理するための推奨される方法です。
これは同様の概念ですが、sample_weightsを使用すると、Estimatorに特定のクラスに注意を向けさせることができ、class_weightsを使用すると、estimatorに特定のクラスに注意を向けて学習させることができます。 sample_weight = 0またはclass_weight = 0は、基本的に、推定器が学習プロセスでそのようなサンプル/クラスをまったく考慮する必要がないことを意味します。したがって、このクラスのclass_weight = 0の場合、分類子(たとえば)はクラスを予測しません。一部のsample_weight/class_weightが他のサンプル/クラスのsample_weight/class_weightよりも大きい場合、estimatorは最初にそのサンプル/クラスのエラーを最小限に抑えようとします。ユーザー定義のsample_weightsとclass_weightsを同時に使用できます。
単純なクローン作成/削除でトレーニングセットをアンダーサンプリング/オーバーサンプリングしたい場合-これは、対応するsample_weights/class_weightsの増減に等しくなります。
より複雑なケースでは、 [〜#〜] smote [〜#〜] のような手法を使用して、人工的にサンプルを生成することもできます。
sample_weight
およびclass_weight
同様の機能があります。つまり、推定器がいくつかのサンプルにもっと注意を払うようにします。
実際のサンプルの重みはsample_weight * weights from class_weight
。
これはアンダー/オーバーサンプリングと同じ目的を果たしますが、動作が異なる可能性があります。たとえば、ランダムにサンプルを選択するアルゴリズムがある場合(ランダムフォレストのように)、オーバーサンプリングするかどうかが重要になります。
要約すると:class_weight
およびsample_weight
両方とも2)を実行し、オプション2)はクラスの不均衡を処理する一方通行です。私は普遍的に推奨される方法を知りません。私はあなたの特定の問題について1)、2)、1)+ 2)を試して、何が最も効果的かを調べます。