特徴量抽出に各変量の分散を使いたい

予測モデルを使う時に、各変量の分散をみて、使える特徴量かを確認し、絞ることがあります。

sklearnには閾値を設定し、それ以下の分散の特徴量を削除する。VarianceThresholdが存在します。

from sklearn.feature_selection import VarianceThreshold

from sklearn.datasets import load_iris
import pandas as pd

# 閾値を設定
vt = VarianceThreshold(threshold=0.5)

#fit_transformで削除した変数のみ残す
after_vt = vt.fit_transform(load_iris().data)

#分散を確認する
vt.fit(load_iris().data).variances_


#確認するだけなら、pandasの方が楽
iris = pd.DataFrame(load_iris().data)
iris.var()
iris.std()
iris.describe()

コードにも書いた通り、分散(と標準偏差)を確認するだけなら、Pandasを使った方が便利です。

やはり、ある程度自動で特徴量を抽出したりするパイプラインに組み込むなどの方法に用いた方が良さそうです。

また、分散は特徴量の値の基本的な大きさに依存するため、横比較は難しいのである程度中身がわかる、似たデータ通しで使うなどの工夫が必要です。

また、うっかりして先にStandardScalerを使うと(当たり前ですが)ばらつきの差がなくなるので、注意が必要です。