特徴選択と特徴抽出の違い | 次元削減と特徴量抽出 | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

特徴選択と特徴抽出の違い

特徴選択(Feature Selection)と特徴抽出(Feature Extraction)は、どちらも特徴量の数を減らし、機械学習モデルを扱いやすくするための手法です。

特徴選択は、元の特徴量の中から重要なものを選ぶ方法です。一方、特徴抽出は、元の特徴量を変換して新しい特徴量を作る方法です。どちらも次元削減に役立ちますが、考え方が異なります。

特徴選択と特徴抽出の違いを図で理解する

特徴選択と特徴抽出の違いを図で理解する

特徴選択とは

特徴選択は、元の特徴量の中からモデルに有用なものだけを選び、不要な特徴量を取り除く手法です。

新しい特徴量を作るのではなく、既存の特徴量をそのまま残すため、結果を解釈しやすいという特徴があります。

  • 重要な特徴量だけを残す
  • 不要な特徴量を削除する
  • 元の特徴量の意味を保ちやすい
  • 過学習の防止や計算時間の短縮に役立つ

特徴選択の主な手法

手法 内容
フィルタ法 相関係数や統計量を使って特徴量を選ぶ
ラッパー法 モデルの性能を確認しながら特徴量の組み合わせを選ぶ
埋め込み法 モデルの学習過程で重要な特徴量を選ぶ

Pythonによる特徴選択の例

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, random_state=42)
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}")

このコードでは、ランダムフォレストで特徴量の重要度を評価し、重要な特徴量だけを選択しています。

特徴抽出とは

特徴抽出は、元の特徴量を変換して、新しい特徴量を作る手法です。

元の特徴量をそのまま選ぶのではなく、複数の特徴量を組み合わせて新しい軸や表現を作ります。そのため、次元を減らしながらデータの重要な情報を残すことができます。

  • 元の特徴量を変換する
  • 新しい特徴量を作る
  • 高次元データを低次元に圧縮できる
  • 可視化やノイズ削減に役立つ

特徴抽出の主な手法

手法 内容
主成分分析(PCA) 分散が大きい方向に新しい軸を作り、次元を削減する
線形判別分析(LDA) クラスの分離が大きくなるように特徴量を変換する
t-SNE 高次元データを2次元や3次元に可視化しやすく変換する

Pythonによる特徴抽出の例

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次元の特徴量を持つIrisデータを、PCAによって2次元に変換しています。

特徴選択と特徴抽出の違い

項目 特徴選択 特徴抽出
考え方 元の特徴量から重要なものを選ぶ 元の特徴量を変換して新しい特徴量を作る
元の特徴量 そのまま残る 変換される
解釈しやすさ 高い やや低くなることがある
代表例 相関分析、Lasso、特徴量重要度 PCA、LDA、t-SNE
向いている場面 重要な特徴量を明確にしたい場合 高次元データを圧縮・可視化したい場合

特徴選択と特徴抽出の使い分け

  • 特徴量の意味を残したい場合: 特徴選択が向いています。
  • 次元を大きく減らしたい場合: 特徴抽出が向いています。
  • モデルの解釈性を重視する場合: 特徴選択が使いやすいです。
  • 可視化や圧縮を重視する場合: 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, random_state=42)
clf.fit(X, y)

selector = SelectFromModel(clf, prefit=True)
X_selected = selector.transform(X)

# 特徴抽出
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でさらに低次元へ変換しています。

機械学習で重要な理由

  • 不要な特徴量を減らせる
  • モデルの学習を効率化できる
  • 過学習を防ぎやすくなる
  • 高次元データを扱いやすくできる
  • データの可視化に役立つ