サンプラーと推定器のアンサンブルさいごにはじめにimbalanced-learnとはscikit-learnと共同で利用できるPythonモジュールの一つである。不均衡データに対処する様々なテクニックが実装されている。不均衡データについてはこの記事にたどり着いた方に説明するまでもないでしょう。クラス分類でデータが不均衡だと決定境界が下図のようにめちゃくちゃになってしまう。動機imbalanced-learn(imblearn)を紹介してる日本語記事が少なかった。ドキュメントをまとめた記事は存在しなかった。そこで、imblearnでよく使うだろう機能と、そのアイデアを紹介する。documentationを簡単に要約する。documentationよく使いそうなものだけを紹介する。documentationに合わせる。見出しのインデントは編集の都合上自分に都合の良い用に変えている実装は別の記事で行った。under-samplingとover-samplingの組み合わせまで実装している。サンプルのでっち上げ(オーバーサンプリング)imlearnはオーバーサンプリングの一つの手法として、SMOTEを提供している。イメージとしては次の図。SMOTEにも亜種が存在する。インスタンスを生成する際に引数を指定することで亜種を選択できる。亜種はborderlineとSVMがあり、違いは、下図を見ていただければなんとなくわかるだろう。普通のSMOTE亜種でないSMOTEを用いたいとき、regularとすれば、良い。あとはsmote.fit_sample(引数)してください。対して、(1)ノイズか(2)危険か(3)安全に分類する。対してすべての近傍が違うクラスであるとき、ノイズと判断。対して少なくとも半分の近傍が同じクラスであるとき、危険と判断。対してすべての近傍が同じクラスであるとき、安全と判断。このとき、危険と判断したサンプル$x{i}$を使用して、新しいサンプルを生成する。Borderline1は安全側の点を[tex:x{zi}]として、その内分点に新たなデータを生成する。SMOTEサポートベクターを見つけてそれを考慮して、新たなサンプルを作る方法。"C"のパラメーターをいじると、サポートベクターの数も変化する。ボーダーラインとSVMでは"m_neighbors"というパラメーターがあり、サンプルが危険か安全かノイズかの判断強度を変更できる。SMOTE(kind='svm')ADASYNSMOTE以外にもADASYNという手法がある。これはkNN(k-最近傍法)を使用して、間違って分類されたサンプルがあったら、その近くにサンプルを合成するという手法。検出したい少数クラスが多数クラスに完全に埋もれてしまっている場合に有効だと推測される。"n_neighbor"というパラメーターが存在する。linkを削除するのに焦点を当てる。yの組み合わせのこと。(ドキュメントの数式と違いますがおそらくあっちが誤植です。