linkのうち、多数のクラスのほうだけ削除する。linkを成すサンプルを多数少数にかかわらず、すべて削除する。近傍を用いたデータの編集EditedNearestNeighboursは近傍法を、データを"編集"するのに用いる。近傍に"必要なだけの数量"がないと判断されたサンプルを削除する。ドキュメントに書いてあり、なにを言いたいのかさっぱりわからんと感じたが、図を見て一発でわかった。要は、重なり合って違うクラスが入り込んでいる場合に、取り除こうというアイデアらしい。違うクラスに入り込んでるかの判断には近傍法を用いている。引数の説明、"kind_sel='mode'"を指定すると、検査点の近傍の大部分が同じクラスなら除去しない。"kind_sel='all'"を指定すると、検査点の近傍のすべてが同じクラスなら除去しない。"n_neighbors"は、言うまでもなく近傍数。EditedNearestNeighbours(kind_sel='mode')以上を繰り返し実行するRepeatedEditedNearestNeighboursやAllKNNもあるが、ここでは省略する。thresholdという手法もあるが、これも省略。link、EditedNearestNeighbours(ENN)に注目して説明したのは、このためである。実際にインバランスデータを判別器に学習させるときにはここで紹介する関数を使うと予想する。linkの削除はSMOTETomekで、SMOTEをした後ENNを施すのはSMOTEENNで簡単に行うことができる。SMOTETomek()##パラメーターはAPIドキュメントを見てくださいこの写真では、SMOTEENNの方が良いように見える(本文にもこれのほうが良いと書いてあった)。異常データが完全に正常データに埋もれてしまっている、なんて状況のときにはうまくいかないことが予想されるので、扱っているデータを見極めて使うべきだと個人的にはそう思う。サンプラーと推定器のアンサンブルブートストラップサンプリングする際に正常データと異常データを同数抽出して、アンサンブル学習させるという発想。sklearnではBaggingClassifierが実装されているが、インバランスを考慮することはできない。imlearnではインバランスを考慮したBalancedBaggingClassifierが存在する。これは便利そうですね。場合によってはこの機能だけで済むこともあるかも。これは公式からのコピペですさいごに今回は紹介に終わったが、次回の記事で実際にデータの素性を考慮して実装してみたいと思う。ここでは紹介していないがimblearnもpipelineの機能を持つ。これによって一連の操作をまとめて、交差検証をすることができる。そちらも参考になると嬉しい。お問い合わせはてなブログをはじめよう!aotamasakiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。