特徴選択と特徴抽出の違い
特徴選択(Feature Selection)と特徴抽出(Feature Extraction)は、次元削減の重要なテクニックであり、機械学習モデルの性能向上に役立ちます。これらはどちらも、データセットの特徴量(入力変数)の数を削減することを目的としていますが、アプローチが異なります。
特徴選択(Feature Selection)とは?
特徴選択は、元の特徴量の中から重要なものを選び、不要な特徴量を取り除く手法です。データの次元を減らし、モデルの性能向上、過学習の防止、計算時間の短縮に役立ちます。特徴選択では、新しい特徴量を作るのではなく、もともと存在している特徴量の中から最適なものを選びます。
特徴選択のアプローチ
特徴選択にはいくつかの方法があります。以下に主なアプローチを紹介します。
- フィルタ法(Filter Method): 統計的手法に基づいて特徴を評価し、最も関連性の高い特徴量を選びます。
相関係数
やカイ二乗検定
などが用いられます。 - ラッパー法(Wrapper Method): モデルのパフォーマンスを基準に特徴量の組み合わせを選びます。ステップワイズ法などが使用されますが、計算コストが高くなる傾向があります。
- 埋め込み法(Embedded Method): モデル学習中に特徴選択を行います。L1正則化(Lasso回帰)などの技術が埋め込み法の一例です。
Pythonによる特徴選択の例
以下は、scikit-learn
を用いた特徴選択のコード例です。
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
# データをロード
iris = load_iris()
X, y = iris.data, iris.target
# ランダムフォレストを使用した特徴選択
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X, y)
# 特徴選択
selector = SelectFromModel(clf, prefit=True)
X_selected = selector.transform(X)
print(f"Original feature shape: {X.shape}")
print(f"Selected feature shape: {X_selected.shape}")
このコードでは、ランダムフォレストを用いて特徴選択を行っています。SelectFromModel
は、トレーニング済みのモデルを用いて重要な特徴量を自動的に選び出します。
特徴抽出(Feature Extraction)とは?
特徴抽出は、元の特徴量を用いて新しい特徴量を生成し、次元削減を行う手法です。主に、PCA(主成分分析)やt-SNEのような手法が使われ、元のデータを変換して、より少ない次元で表現します。
特徴抽出のアプローチ
特徴抽出の主なアプローチをいくつか紹介します。
- 主成分分析(PCA): データの分散を最大化する方向に基づいて新しい軸(主成分)を作り、データを圧縮します。
- 線形判別分析(LDA): クラス間の分離を最大化するために新しい特徴量を生成します。PCAとは異なり、ラベル付きデータに対して使われます。
- t-SNE: 高次元のデータを視覚的に理解しやすい低次元(2次元や3次元)に変換する手法です。
Pythonによる特徴抽出の例
次に、PCAを使った特徴抽出のコード例を示します。
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
# データをロード
iris = load_iris()
X = iris.data
# PCAを適用
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(f"Original feature shape: {X.shape}")
print(f"Transformed feature shape: {X_pca.shape}")
この例では、4次元の特徴量を持つデータセット(アイリスデータ)を2次元に変換しています。PCAは、データの分散が最大になる方向に新しい軸を作り出し、その軸に沿ってデータを圧縮します。
特徴選択と特徴抽出の違い
以下に、特徴選択と特徴抽出の主な違いを表にまとめます。
特徴選択 | 特徴抽出 |
---|---|
元の特徴量から重要なものを選び出す。 | 元の特徴量を変換して新しい特徴量を生成する。 |
情報を損なわずに次元を減らすことができる。 | 特徴量の変換により、解釈が難しいことがある。 |
元のデータセット内の特徴量を保持。 | 新しい次元に変換されたデータが得られる。 |
計算コストが低い。 | PCAなど、変換のために計算コストが高くなる場合がある。 |
特徴選択と特徴抽出の併用
特徴選択と特徴抽出は、単独で使用するだけでなく、併用することも可能です。たとえば、まず特徴選択を行って重要な特徴を選び出し、その後PCAを適用してさらに次元を削減することができます。
併用の例
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectFromModel
# データをロード
iris = load_iris()
X, y = iris.data, iris.target
# ランダムフォレストによる特徴選択
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X, y)
selector = SelectFromModel(clf, prefit=True)
X_selected = selector.transform(X)
# PCAによる次元削減
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_selected)
print(f"Original feature shape: {X.shape}")
print(f"Selected feature shape: {X_selected.shape}")
print(f"PCA transformed feature shape: {X_pca.shape}")
このコードでは、まずランダムフォレストを使用して重要な特徴を選び出し、その後PCAを使ってさらに次元削減を行っています。
まとめ
特徴選択は、元の特徴量から重要なものを選択する手法で、特徴抽出は新しい特徴量を生成してデータを圧縮する手法です。これらの手法は次元削減において重要な役割を果たし、機械学習モデルの性能向上や計算コストの削減に役立ちます。それぞれの方法には利点と欠点がありますが、状況に応じて使い分けるか、併用することで最適な結果を得ることができます。