web-dev-qa-db-ja.com

scikitlearnのサンプルウェイトとクラスウェイトオプションの違いは何ですか?

クラスの不均衡の問題があり、コストに敏感な学習を使用してこれを解決したいと思います。

  1. サンプルの下とサンプルの上
  2. 修正された損失関数を使用するためにクラスに重みを与える

質問

Scikit learnには、クラスの重みとサンプルの重みという2つのオプションがあります。サンプルの重みは実際にオプション2)とクラスの重みオプション1)を実行していますか。オプション2)クラスの不均衡を処理するための推奨される方法です。

17
WonderWomen

これは同様の概念ですが、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 [〜#〜] のような手法を使用して、人工的にサンプルを生成することもできます。

12
Ibraim Ganiev

sample_weightおよびclass_weight同様の機能があります。つまり、推定器がいくつかのサンプルにもっと注意を払うようにします。

実際のサンプルの重みはsample_weight * weights from class_weight

これはアンダー/オーバーサンプリングと同じ目的を果たしますが、動作が異なる可能性があります。たとえば、ランダムにサンプルを選択するアルゴリズムがある場合(ランダムフォレストのように)、オーバーサンプリングするかどうかが重要になります。

要約すると:
class_weightおよびsample_weight両方とも2)を実行し、オプション2)はクラスの不均衡を処理する一方通行です。私は普遍的に推奨される方法を知りません。私はあなたの特定の問題について1)、2)、1)+ 2)を試して、何が最も効果的かを調べます。

4
ldirer