アンバランスクラス:Spark MLLibのMLアルゴリズムのclass_weight


8

Python sklearnには、不均衡データを処理するためのclass_weightパラメーターを持つ複数のアルゴリズム(たとえば、回帰、ランダムフォレストなど)があります。

ただし、MLLibアルゴリズムにはそのようなパラメーターはありません。一部のMLLibアルゴリズムにclass_weightを実装する計画はありますか?または、MLLibに不均衡データに対するアプローチはありますか?それとも実際に、MLLibですべてのアップ/ダウンサンプリングを自分で処理する必要がありますか?

ありがとう!


はい、SparkのMLLibのアルゴリズムは、複雑な問題を処理するために用意されています。さらに、私の理解から、層別分割を実行する方法もありません。したがって、取得したパフォーマンスメトリックは適切に表されません。
サミュエルシャーマン

ここでは 2.2のドキュメントからMLlibに加重ロジスティック回帰のexampledです。
Emre Em're

回答:


1

MLLibのアルゴリズムは、常に生産シナリオのベースラインとして使用され、実際には、ラベルの不均衡などの産業上の問題を処理することはできません。したがって、それらを使用する場合は、インスタンスのバランスをとる必要があります。

その上、Spark でのBSPのメカニズムは、単純にデータが並列であると見なすことができるため、Sparkがその問題をカバーしていない主な理由かもしれません。Sparkがインスタンスをクラスター内のすべてのノードにディスパッチするのは難しいかもしれませんが、各ノードの部分インスタンスは全体として同じラベル配布を共有します。

最後に、実装する場合は、反復処理中にすべてのマイナーラベル付きインスタンスの損失値重み付けする必要があります。

これがあなたに役立つことを願っています、幸運-)


1

過去に不均衡なクラスを処理した方法の1つは、データセットサンプルに基づいて分類子を作成し、50/50のサンプル分割を行うことでした。つまり、マイノリティクラスに関連付けられているすべてのデータポイントを使用し、多数派クラスから同じ数のデータポイントをランダムにサンプリングします。

これが機能するかどうかは、実際にマイノリティクラスにあるデータの量に依存します。極端なクラスの不均衡(5%未満のマイノリティクラスのインスタンス)がある場合は、合成オーバーサンプリングを検討することをお勧めします。

おそらくpydf.rdd.takeSample()スパーク、またはdf.sampleパンダで見ることができます。


0

クラスの不均衡を処理する方法は、次の方法によるものです。1.他のクラスに最も頻繁に表示されないクラスをマージします。もちろん、ランダムにマージするのではなく、何らかのドメイン知識を使用する必要があります。2.オーバーサンプリング、アンダーサンプリング、SMOTE、ADASYNなどのリサンプリング手法を使用します。これらの手法は実際のデータを表していないため、これらの手法の使用はお勧めしません。しかし、いずれにしても、あなたは確かにそれらを見ることができます


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