ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

特徴選択

特徴選択の紹介

"特徴選択" では、測定した特徴 (予測子変数) のサブセットのみを選択してモデルを作成することによりデータの次元を削減します。通常、異なるサブセットに近似された複数のモデルについて、その予測誤差に関する測定量の最小化が選択基準となります。アルゴリズムは、必要な、もしくは除外すべき特徴量、サブセットのサイズなどの制約のもとで、測定された応答を最適にモデル化する予測子のサブセットを探索します。

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

逐次特徴選択

一般的な特徴選択の方法は、"逐次特徴選択" です。このメソッドには 2 つの成分があります。

  • "基準" と呼ばれる目的関数。メソッドは、これを最小とするものを実行可能な特徴量サブセット全体から探索します。一般に用いられる基準は、平均二乗誤差 (回帰モデルの場合) と誤分類率 (分類モデルの場合) です。

  • 連続検索アルゴリズム。基準を評価しつつ、候補サブセットから特徴量を追加または削除します。n 特徴データセットのすべての 2n サブセットにおける基準値の徹底的な比較は一般的に実行不可能です (n のサイズと目的の呼び出しのコストにより異なります)。そのため、連続検索は 1 方向にのみ進み、候補セットは常に成長するか、常に縮小します。

メソッドには 2 つのバリアントがあります。

  • "逐次前方選択" ("SFS")。それ以上特徴量を追加しても基準が減少しなくなるまで、特徴量が空の候補セットに順次追加されます。

  • "逐次後方選択" ("SBS")。それ以上特徴量を削除すると基準が増加するようになるまで、特徴量が候補セット全体から順次削除されます。

ステップワイズ回帰は、特に最小二乗近似用に設計された逐次特徴選択手法です。関数 stepwisestepwisefit は、最小二乗基準でのみ可能な最適化を利用します。一般化した逐次特徴選択と異なり、ステップワイズ回帰は、追加されていた特徴量を削除するか、削除されていた特徴量を追加することができます。

Statistics and Machine Learning Toolbox™ の関数 sequentialfs は、逐次特徴選択を行います。入力引数には、予測子データ、応答データ、基準関数を実装するファイルに対する関数ハンドルなどがあります。オプションの入力により、SFS または SBS、必須または除外される特徴量、特徴量サブセットのサイズを指定できます。関数は cvpartitioncrossval を呼び出して、さまざまな候補セットで基準を評価します。

比較予測力による特徴量のサブセットの選択

10 個の予測子の観測値が 100 個含まれているデータセットを考えてみましょう。予測子の値の各セットで二項分布応答を使用して、ロジスティック モデルから乱数データを生成します。一部の係数は 0 に設定されるので、すべての予測子が応答に影響を与えるわけではありません。

rng(456) % Set the seed for reproducibility
n = 100;
m = 10;
X = rand(n,m);
b = [1 0 0 2 .5 0 0 0.1 0 1];
Xb = X*b';
p = 1./(1+exp(-Xb));
N = 50;
y = binornd(N,p);

fitglm を使用して、ロジスティック モデルをデータにあてはめます。

Y = [y N*ones(size(y))];
model0 = fitglm(X,Y,'Distribution','binomial')
model0 = 
Generalized linear regression model:
    logit(y) ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE        tStat        pValue  
                   _________    _______    ________    __________

    (Intercept)      0.22474    0.30043     0.74806       0.45443
    x1               0.68782    0.17207      3.9973     6.408e-05
    x2                0.2003    0.18087      1.1074       0.26811
    x3             -0.055328    0.18871    -0.29319       0.76937
    x4                2.2576     0.1813      12.452    1.3566e-35
    x5               0.54603    0.16836      3.2432     0.0011821
    x6              0.069701    0.17738     0.39294       0.69437
    x7              -0.22562    0.16957     -1.3306       0.18334
    x8              -0.19712    0.17317     -1.1383       0.25498
    x9              -0.20373    0.16796      -1.213       0.22514
    x10              0.99741    0.17247      5.7832    7.3296e-09


100 observations, 89 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 222, p-value = 4.92e-42

あてはめの逸脱度を表示します。

dev0 = model0.Deviance
dev0 = 101.5648

このモデルは、特徴量のすべてと初期定数項を使用するフル モデルです。逐次特徴選択は、フル モデルと同等の予測力をもつ特徴量サブセットを検索します。

特徴選択を実行する前に、特徴量を選択する基準を指定しなければなりません。このケースでは、基準はあてはめの逸脱度 (残差二乗和の汎化) です。関数 critfun (この例の終わりで現れます) は、fitglm を呼び出してあてはめの逸脱度を返します。

この例のライブ スクリプト ファイルを使用している場合、関数 critfun は既にファイルの終わりに含まれています。それ以外の場合は、この関数を .m ファイルの終わりに作成するか、MATLAB パス上のファイルとして追加する必要があります。

特徴選択を実行します。sequentialfs は、関数ハンドルを介して基準関数を呼び出します。

maxdev = chi2inv(.95,1);     
opt = statset('display','iter',...
              'TolFun',maxdev,...
              'TolTypeFun','abs');

inmodel = sequentialfs(@critfun,X,Y,...
                       'cv','none',...
                       'nullmodel',true,...
                       'options',opt,...
                       'direction','forward');
Start forward sequential feature selection:
Initial columns included:  none
Columns that can not be included:  none
Step 1, used initial columns, criterion value 323.173
Step 2, added column 4, criterion value 184.794
Step 3, added column 10, criterion value 139.176
Step 4, added column 1, criterion value 119.222
Step 5, added column 5, criterion value 107.281
Final columns included:  1 4 5 10 

新しい特徴量がモデルに追加されるにつれ、反復表示は基準値の減少を示します。最終結果は、sequentialfs が返す logical ベクトル inmodel で示されているように、元の 10 個の特徴量のうち 4 つの特徴量 (X14510 列) のみが含まれている次元削減されたモデルです。

次元削減されたモデルの逸脱度は、フル モデルの逸脱度より大きくなっています。しかし、他のいずれかの特徴量を 1 つ追加しても、オプション構造体で設定した絶対許容誤差 maxdev を上回って基準値が低下することはありません。影響のない特徴量の追加により、逸脱度は自由度 1 のカイ二乗分布をもつ量だけ減少します。有意な特徴量を追加すると、逸脱度がより大きく変化します。maxdevchi2inv(.95,1) に設定することにより、逸脱度の変化が偶然による変化より大きい場合は特徴量を追加し続けるよう sequentialfs に指示します。

初期定数項をもつ次元削減されたモデルを作成します。

model = fitglm(X(:,inmodel),Y,'Distribution','binomial')
model = 
Generalized linear regression model:
    logit(y) ~ 1 + x1 + x2 + x3 + x4
    Distribution = Binomial

Estimated Coefficients:
                    Estimate       SE         tStat        pValue  
                   __________    _______    _________    __________

    (Intercept)    -0.0052025    0.16772    -0.031018       0.97525
    x1                0.73814    0.16316       4.5241    6.0666e-06
    x2                 2.2139    0.17402       12.722    4.4369e-37
    x3                0.54073     0.1568       3.4485    0.00056361
    x4                 1.0694    0.15916       6.7191    1.8288e-11


100 observations, 95 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 216, p-value = 1.44e-45

次のコードは、関数 critfun を作成します。

function dev = critfun(X,Y)
model = fitglm(X,Y,'Distribution','binomial');
dev = model.Deviance;
end

参考