INDEX
特徴選択と特徴抽出の違い
特徴選択(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でさらに低次元へ変換しています。
機械学習で重要な理由
- 不要な特徴量を減らせる
- モデルの学習を効率化できる
- 過学習を防ぎやすくなる
- 高次元データを扱いやすくできる
- データの可視化に役立つ