Main Content

特徴選択の紹介

このトピックでは、特徴選択アルゴリズムの基本と、Statistics and Machine Learning Toolbox™ で利用できる特徴選択関数について説明します。

特徴選択アルゴリズム

"特徴選択" では、測定した特徴 (予測子変数) のサブセットのみを選択してモデルを作成することによりデータの次元を削減します。特徴選択アルゴリズムは、必要な、もしくは除外すべき特徴量、サブセットのサイズなどの制約のもとで、測定された応答を最適にモデル化する予測子のサブセットを探索します。特徴選択の主なメリットは、予測性能を改善し、より高速で費用対効果の高い予測子を提供し、データ生成プロセス[1]の理解を深められることです。使用する特徴量の数が多すぎると、すべての特徴量が関連性を持ち応答変数に関する情報を含んでいたとしても、予測性能が低下する場合があります。

特徴選択アルゴリズムは次の 3 つの種類に分けることができます。

  • フィルター タイプ特徴選択 — フィルター タイプ特徴選択アルゴリズムは、特徴量の分散や特徴量の応答に対する関連度といった特徴量の特性によって特徴量の重要度を測定します。データの前処理ステップの一部として重要な特徴量を選択し、選択した特徴量を使用してモデルを学習させます。そのため、フィルター タイプ特徴選択は学習アルゴリズムとは無相関です。

  • ラッパー タイプ特徴選択 — ラッパー タイプ特徴選択アルゴリズムは、特徴量のサブセットを使用して学習を開始し、その後に選択基準を使用して特徴量を追加または削除します。選択基準は、特徴量を追加または削除することによるモデル性能の変化を直接測定します。アルゴリズムは、停止条件が達成されるまで学習とモデルの改善を繰り返します。

  • 組み込み型特徴選択 — 組み込み型特徴選択アルゴリズムは、モデルの学習プロセスの一部として特徴量の重要度を学習します。一度モデルを学習させると、学習済みモデルの中に特徴量の重要度が得られます。この種のアルゴリズムでは、特定の学習プロセスに対してうまく機能する特徴量が選択されます。

さらに、アルゴリズムが特徴量を逐次にランク付けするかどうかによって、特徴選択アルゴリズムを分類できます。Minimum Redundancy Maximum Relevance (MRMR) アルゴリズムとステップワイズ回帰は、逐次特徴選択アルゴリズムの 2 つの例です。詳細については、逐次特徴選択を参照してください。

部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットを作成することにより、予測子変数の重要度を視覚的に比較できます。詳細については、plotPartialDependenceを参照してください。

分類問題の場合、特徴量を選択した後、2 つのモデル (たとえば、完全なモデルと、予測子のサブセットを使用して学習したモデル) を学習させ、関数 compareHoldouttestcholdout、または testckfold を使用して精度を比較することができます。

元々の特徴量とその単位が重要であり、モデリングの目標が影響力のあるサブセットの特定である場合、特徴選択は特徴変換よりも適切です。カテゴリカル特徴量が存在し、数値への変換が不適切な場合、特徴選択は次元削減の主要な方法になります。

特徴選択関数

Statistics and Machine Learning Toolbox には、特徴選択のために複数の関数が用意されています。対象の問題と特徴量のデータ型に基づき、適切な特徴選択関数を選択してください。

フィルター タイプ特徴選択

関数サポートされる問題サポートされるデータ型説明
fscchi2分類categorical 特徴量および連続的特徴量

個々のカイ二乗検定を使用して各予測子変数が応答変数から独立しているかどうかを調べた後、カイ二乗検定統計量の p 値を使用して特徴量をランク付けします。

例については、関数 fscchi2 のリファレンス ページを参照してください。

fscmrmr分類categorical 特徴量および連続的特徴量

Minimum Redundancy Maximum Relevance (MRMR) アルゴリズムを使用して逐次的に特徴量をランク付けします。

例については、関数 fscmrmr のリファレンス ページを参照してください。

fscnca*分類連続的特徴量

近傍成分分析 (NCA) を対角的に適用することにより、特徴量の重みを特定します。これは、観測値間のペアワイズ距離を使用して応答を予測する距離ベースの教師ありモデルにおいて特徴量の重要度を推定するのに最適なアルゴリズムです。

詳細については、関数 fscnca のリファレンス ページと以下のトピックを参照してください。

fsrftest回帰categorical 特徴量および連続的特徴量

F 検定を使用して各予測子の重要度を個別に調べた後、F 検定統計量の p 値を使用して特徴量をランク付けします。各 F 検定は、予測子変数値でグループ化された応答値が、平均が同じである複数の母集団から抽出されたという仮説を、母集団の平均はすべて同じではないという対立仮説に対して検定します。

例については、関数 fsrftest のリファレンス ページを参照してください。

fsrmrmr回帰categorical 特徴量および連続的特徴量

Minimum Redundancy Maximum Relevance (MRMR) アルゴリズムを使用して逐次的に特徴量をランク付けします。

例については、関数 fsrmrmr のリファレンス ページを参照してください。

fsrnca*回帰連続的特徴量

近傍成分分析 (NCA) を対角的に適用することにより、特徴量の重みを特定します。これは、観測値間のペアワイズ距離を使用して応答を予測する距離ベースの教師ありモデルにおいて特徴量の重要度を推定するのに最適なアルゴリズムです。

詳細については、関数 fsrnca のリファレンス ページと以下のトピックを参照してください。

fsulaplacian教師なし学習連続的特徴量

ラプラシアン スコアを使用して特徴量をランク付けします。

例については、関数 fsulaplacian のリファレンス ページを参照してください。

relieff分類および回帰すべて categorical またはすべて連続的な特徴量

分類にはReliefFアルゴリズム、回帰にはRReliefFアルゴリズムを使用して特徴量をランク付けします。これは、観測値間のペアワイズ距離を使用して応答を予測する距離ベースの教師ありモデルにおいて特徴量の重要度を推定するのに最適なアルゴリズムです。

例については、関数 relieff のリファレンス ページを参照してください。

sequentialfs分類および回帰すべて categorical またはすべて連続的な特徴量

カスタム基準を使用して逐次的に特徴量を選択します。データの特性を測定して特徴量を選択する関数を定義して、関数ハンドルを関数 sequentialfs に受け渡します。名前と値のペアの引数 'Direction' を使用して、逐次前方選択または逐次後方選択を指定できます。sequentialfs は交差検証を使用して基準を評価します。

*fscncafsrnca は、組み込み型特徴選択関数とみなすこともできます。これらは、学習済みモデル オブジェクトを返し、オブジェクト関数 predict および loss を使用できるためです。しかし、通常、これらのオブジェクト関数はアルゴリズムの正則化パラメーターを調整するために使用されます。関数 fscnca または fsrnca でデータ前処理ステップの一部として特徴量を選択した後、問題に別の分類または回帰アルゴリズムを適用することができます。

ラッパー タイプ特徴選択

関数サポートされる問題サポートされるデータ型説明
sequentialfs分類および回帰すべて categorical またはすべて連続的な特徴量

カスタム基準を使用して逐次的に特徴量を選択します。教師あり学習アルゴリズムを実装する関数または学習アルゴリズムの性能を測定する関数を定義し、関数ハンドルを関数 sequentialfs に受け渡します。名前と値のペアの引数 'Direction' を使用して、逐次前方選択または逐次後方選択を指定できます。sequentialfs は交差検証を使用して基準を評価します。

例については、関数 sequentialfs のリファレンス ページと以下のトピックを参照してください。

組み込み型特徴選択

関数サポートされる問題サポートされるデータ型説明
ClassificationDiscriminant モデル オブジェクトの DeltaPredictor プロパティ線形判別分析による分類連続的特徴量

fitcdiscr を使用して線形判別分析分類器を作成します。ClassificationDiscriminant として返される学習済み分類器の DeltaPredictor プロパティには、係数の大きさが保存されています。この値は DeltaPredictor で予測子の重要度の尺度として使用できます。この分類器は、2 つの正則化パラメーターガンマとデルタを使用して冗長な予測子を特定および削除します。これらのパラメーターの適切な値は、関数 cvshrink または名前と値のペアの引数 'OptimizeHyperparameters' を使用して取得できます。

例については、以下のトピックを参照してください。

fitcecoctemplateLinear高次元データのマルチクラス学習の線形分類連続的特徴量

fitcecoc と、templateLinear で定義された線形バイナリ学習器を使用して、線形分類モデルに学習をさせます。LASSO 正則化を使用するには、templatelinear'Regularization''lasso' に指定します。

たとえば、交差検証の使用による適切な LASSO ペナルティの特定を参照してください。この例は、kfoldLoss を使用して異なる強度値でモデルを評価することにより、適した LASSO ペナルティの強度を決定します。kfoldEdgekfoldMarginedgeloss、または margin を使用してモデルを評価することもできます。

fitclinear高次元データのバイナリ学習の線形分類連続的特徴量

fitclinear を使用して線形分類モデルを学習させます。LASSO 正則化を使用するには、fitclinear'Regularization''lasso' に指定します。

たとえば、交差検証 AUC の使用による適切な LASSO ペナルティの特定を参照してください。この例は、AUC の値を使用して異なる強度値でモデルを評価することにより、適した LASSO ペナルティの強度を決定します。kfoldPredict を使用して交差検証事後クラス確率を計算し、rocmetrics を使用して AUC の値を計算します。kfoldEdgekfoldLosskfoldMarginedgelossmargin、または predict を使用してモデルを評価することもできます。

fitrgp回帰categorical 特徴量および連続的特徴量

fitrgp を使用してガウス過程回帰 (GPR) モデルを学習させます。関連度自動決定 (ARD) を使用するには、名前と値のペアの引数 KernelFunction を設定します。利用可能なオプションは 'ardsquaredexponential''ardexponential''ardmatern32''ardmatern52'、および 'ardrationalquadratic' です。KernelInformation プロパティに格納された負の学習済み特性長スケールの指数を使用して、予測子の重みを求めます。

例については、以下のトピックを参照してください。

fitrlinear高次元データの線形回帰連続的特徴量

fitrlinear を使用して線形回帰モデルを学習させます。LASSO 正則化を使用するには、fitrlinear'Regularization''lasso' に指定します。

例については、以下のトピックを参照してください。

lasso線形回帰連続的特徴量

lasso を使用してLASSOの正則化で線形回帰モデルを学習させます。名前と値のペアの引数 'Alpha' を使用してリッジ最適化に対する LASSO 最適化の重みを指定できます。

例については、関数 lasso のリファレンス ページと以下のトピックを参照してください。

lassoglm一般化線形回帰連続的特徴量

lassoglm を使用してLASSOの正則化で一般化線形回帰モデルを学習させます。名前と値のペアの引数 'Alpha' を使用してリッジ最適化に対する LASSO 最適化の重みを指定できます。

詳細については、関数 lassoglm のリファレンス ページと以下のトピックを参照してください。

ClassificationBaggedEnsembleoobPermutedPredictorImportance**バギングされた決定木 (ランダム フォレストなど) のアンサンブルによる分類categorical 特徴量および連続的特徴量

fitcensemble を使用し、'Method''bag' に指定することで、木学習器でバギングされたアンサンブル分類を学習させます。その後、oobPermutedPredictorImportance を使用して並べ替えによる out-of-bag 予測子の重要度の推定を計算します。この関数は、応答の予測においてモデル内の予測子変数がどの程度影響を与えるかを測ります。

例については、関数のリファレンス ページとトピック oobPermutedPredictorImportance を参照してください。

RegressionBaggedEnsembleoobPermutedPredictorImportance**バギングされた決定木 (ランダム フォレストなど) のアンサンブルによる回帰categorical 特徴量および連続的特徴量

fitrensemble を使用し、'Method''bag' に指定することで、木学習器でバギング回帰アンサンブルを学習させます。その後、oobPermutedPredictorImportance を使用して並べ替えによる out-of-bag 予測子の重要度の推定を計算します。この関数は、応答の予測においてモデル内の予測子変数がどの程度影響を与えるかを測ります。

例については、関数 oobPermutedPredictorImportance のリファレンス ページおよびランダム フォレストの予測子の選択を参照してください。

ClassificationEnsemblepredictorImportance**決定木のアンサンブルによる分類categorical 特徴量および連続的特徴量

fitcensemble を使用して、木学習器でアンサンブル分類を学習させます。その後、predictorImportance を使用して、すべての予測子について分割によるリスク変動を合計し、この合計を枝ノード数で除算することにより、アンサンブルの予測子の重要度の推定を計算します。

例については、関数 predictorImportance のリファレンス ページを参照してください。

ClassificationTreepredictorImportance**決定木による分類categorical 特徴量および連続的特徴量

fitctree を使用して分類木を学習させます。その後、predictorImportance を使用して、すべての予測子について分割によるリスク変動を合計し、この合計を枝ノード数で除算することにより、木の予測子の重要度の推定を計算します。

例については、関数 predictorImportance のリファレンス ページを参照してください。

RegressionEnsemblepredictorImportance**決定木のアンサンブルによる回帰categorical 特徴量および連続的特徴量

fitrensemble を使用して、木学習器でアンサンブル回帰を学習させます。その後、predictorImportance を使用して、すべての予測子について分割によるリスク変動を合計し、この合計を枝ノード数で除算することにより、アンサンブルの予測子の重要度の推定を計算します。

例については、関数 predictorImportance のリファレンス ページを参照してください。

RegressionTreepredictorImportance**決定木による回帰categorical 特徴量および連続的特徴量

fitrtree を使用して回帰木を学習させます。その後、predictorImportance を使用して、すべての予測子について分割による平均二乗誤差 (MSE) の変動を合計し、この合計を枝ノード数で除算することにより、木のPredictor Importanceの推定を計算します。

例については、関数 predictorImportance のリファレンス ページを参照してください。

stepwiseglm***一般化線形回帰categorical 特徴量および連続的特徴量

stepwiseglm を使用して、ステップワイズ回帰により一般化線形回帰モデルを当てはめます。あるいは、fitglm を使用して線形回帰モデルを当てはめた後、step を使用してモデルを調整することもできます。ステップワイズ回帰は、応答変数の説明における各項の統計的な重要性に基づき、モデルから項を追加したり削除するための体系的な方法です。

詳細については、関数 stepwiseglm のリファレンス ページと以下のトピックを参照してください。

stepwiselm***線形回帰categorical 特徴量および連続的特徴量

stepwiselm を使用して、ステップワイズ回帰により線形回帰モデルを当てはめます。あるいは、fitlm を使用して線形回帰モデルを当てはめた後、step を使用してモデルを調整することもできます。ステップワイズ回帰は、応答変数の説明における各項の統計的な重要性に基づき、モデルから項を追加したり削除するための体系的な方法です。

詳細については、関数 stepwiselm のリファレンス ページと以下のトピックを参照してください。

**木ベースのアルゴリズムでは、交互作用テストを使用して最適な分割予測子を選択するために、'PredictorSelection''interaction-curvature' に指定します。交互作用テストは、多くの無関係な変数が存在する状況下で重要な変数を特定するのに役立ちます。また、多数の予測子が学習データに含まれている場合、学習について 'NumVariablesToSample''all' に指定します。このようにしないと、重要度が過小評価されて一部の予測子が選択されない可能性があります。詳細については、fitctreefitrtree および templateTree を参照してください。

***stepwiseglm および stepwiselm は別の学習関数のラッパーとして使用できないため、ラッパー タイプの関数ではありません。ただし、これら 2 つの関数はラッパー タイプのアルゴリズムを使用して重要な特徴量を見つけます。

参照

[1] Guyon, Isabelle, and A. Elisseeff. "An introduction to variable and feature selection." Journal of Machine Learning Research. Vol. 3, 2003, pp. 1157–1182.

参考

(Bioinformatics Toolbox)

関連するトピック