はじめに
不均衡なクラス分布を持つデータセットは、機械学習のタスクでよく遭遇します。例えば、クレジットカード詐欺の検出では、正常な取引(ネガティブクラス)と詐欺取引(ポジティブクラス)の間で極端な不均衡があります。このような状況では、多数クラスの学習が優先され、少数クラスの学習が十分に行われないことがあります。これに対する対策の一つとして、ランダムオーバーサンプリングがあります。
ランダムオーバーサンプリングとは?
ランダムオーバーサンプリングは、少数クラスのサンプルをランダムに複製してデータセットに追加することで、クラス間の不均衡を解消する手法です。これにより、クラス間のサンプル数の差を減らし、モデルが少数クラスを無視することを防ぎます。
ただし、ランダムオーバーサンプリングは過学習を引き起こす可能性があることに注意が必要です。なぜなら、同じサンプルを何度も複製することで、モデルが特定のサンプルに過度に適合してしまう可能性があるからです。
Pythonでのランダムオーバーサンプリングの実装
Pythonでは、imbalanced-learn(別名imblearn)というライブラリを使うことで、ランダムオーバーサンプリングを簡単に実装することができます。以下にその例を示します。
まずは必要なライブラリをインポートします。
from imblearn.over_sampling import RandomOverSampler
from sklearn.datasets import make_classification
次に、不均衡なデータセットを生成します。
X, y = make_classification(n_classes=2, class_sep=2, weights=[0.1, 0.9],
n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1,
n_samples=100, random_state=10)
そして、RandomOverSamplerをインスタンス化し、fit_resampleメソッドを使用してオーバーサンプリングを行います。
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)
これで、オーバーサンプリングが完了しました。X_resampledとy_resampledはオーバーサンプリングされた特徴量とラベルを含んでいます。
まとめ
ランダムオーバーサンプリングは、クラスの不均衡を解消するための簡単な手法です。ただし、過学習を引き起こす可能性があるため、使用には注意が必要です。Pythonのimbalanced-learnライブラリを使うと、この手法を簡単に実装することができます。