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

sequentialfs

カスタム基準を使用した逐次特徴選択

構文

inmodel = sequentialfs(fun,X,y)
inmodel = sequentialfs(fun,X,Y,Z,...)
[inmodel,history] = sequentialfs(fun,X,...)
[] = sequentialfs(...,param1,val1,param2,val2,...)

説明

inmodel = sequentialfs(fun,X,y) は、データ行列 X から特徴的なサブセットを選択します。そして、予測に改善が見られなくなるまで連続して特徴を選択し、y のデータを最大限予測します。X の行は観測値に対応し、列は変数または特徴量に対応します。yX の各観測値に対する応答値の列ベクトルまたはクラス ラベルです。Xy の行数は同じでなければなりません。fun は、特徴量の選択と停止時期の決定に使用される規準を定義する関数への関数ハンドルです。出力 inmodel は最終的に選択された特徴量を示す logical ベクトルです。

sequentialfs は、空の特徴セットから開始して、まだ選択されていない特徴を 1 つずつ連続的に追加して候補特徴のサブセットを作成します。候補特徴のサブセットのそれぞれについて、sequentialfsfun を繰り返し呼び出し 10 分割交差検証を実行します。この呼び出しでは、Xy の異なる学習 サブセット (XTRAINytrain)、および Xy の検定サブセット (XTESTytest) を次のように使用します。

criterion = fun(XTRAIN,ytrain,XTEST,ytest)

XTRAINytrain には XY の行の同じサブセットが含まれ、XTESTytest には行の相補サブセットが含まれます。XTRAINXTEST には、現在の候補特徴セットに対応する X の列から受け取ったデータが含まれます。

fun は呼び出されるごとに、スカラー値 criterion を必ず返します。通常、fun では XTRAINytrain を使用してモデルの学習またはあてはめを行い、そのモデルを使用して XTEST の値を予測し、ytest からのそれらの予測値の何らかの距離の尺度、つまり "損失" を返します。与えられた候補特徴セットに対する交差検証計算では、sequentialfsfun からの戻り値を総和し、それをテスト観測総数で割ります。そしてこの平均値を使用して、候補特徴サブセットのそれぞれを評価します。

一般的な損失測定値には、回帰モデルの二乗誤差の総和 (この場合、sequentialfs は平均二乗誤差を計算)、および分類モデルの誤分類された観測総数 (この場合、sequentialfs は誤分類率を計算) が含まれます。

メモ

sequentialfsfun がすべての検定セットについて返した値の総和を、テストの観測総数で割ります。したがって、fun はその出力値をテストの観測総数で割る必要はありません。

候補特徴サブセットのそれぞれについて平均の criterion 値を計算した後、sequentialfs は平均規準値を最小にする候補特徴サブセットを選択します。このプロセスは、特徴量を追加してもそれ以上規準値が減少しなくなるまで続けられます。

inmodel = sequentialfs(fun,X,Y,Z,...) は、XYZ, ...など、入力変数の数に制限はありません。. sequentialfsXYZ などに特別の解釈をせず、X の列にある特徴だけを選択します。列ベクトルの場合も行列の場合も、すべてのデータ入力は同じ行数でなければなりません。sequentialfs は、XYZ, ... の学習サブセットとテスト サブセットを使用して次のように fun を呼び出します。

criterion = fun(XTRAIN,YTRAIN,ZTRAIN,...,
                XTEST,YTEST,ZTEST,...)

sequentialfs は、XTRAINYTRAINZTRAIN、..., XTESTYTESTZTEST などを作成しますが、そのために XYZ などの行のサブセットを選択します。. fun はスカラー値 criterion を返さなければなりませんが、その値の計算はどのような方法で行ってもかまいません。logical ベクトル inmodel の要素は X の列に対応し、最終的に選択された特徴量を示します。

[inmodel,history] = sequentialfs(fun,X,...) は、各ステップにおいて選択された特徴に関する情報を返します。history はスカラー構造体で、次のフィールドがあります。

  • Crit — 各ステップにおいて計算される規準値を含むベクトル。

  • In — ステップ i で選択された特徴量を、行 i にもつ logical 行列。

[] = sequentialfs(...,param1,val1,param2,val2,...) は、次の表に示すオプション パラメーターの名前と値のペアを指定します。

パラメーター
'cv'

特徴サブセットの各候補に対する規準を計算するために使用する検定方法。

  • この値が正の整数 k の場合、sequentialfs は層別化をしない k 分割交差検証を使用します。

  • この値が cvpartition クラスのオブジェクトの場合、他の形式の交差検証を指定できます。

  • この値が 'resubstitution' の場合、元のデータは学習データ、検定データの区別なしに fun に渡され、規準を計算します。

  • この値が 'none' の場合、sequentialfs は検定セットと学習セットを分割せずに、criterion = fun(X,Y,Z,...) という形式で fun を呼び出します。

既定値は 10 で、層別化をしない 10 分割交差検証になります。

いわゆる "ラッパー法" では、学習アルゴリズムを実装する関数 fun を使用します。通常これらのメソッドは、交差検証を適用して特徴量を選択します。いわゆる "フィルター法" では、データの特性 (相関など) を評価して特徴量を選択する関数 fun を使用します。

'mcreps'

交差検証用のモンテカルロ反復回数を示す正の整数。既定値は 1 です。'cv' 値が'resubstitution' または 'none' の場合、この値は 1 でなければなりません。

'direction'

連続探索の方向。既定の設定は 'forward' です。値 'backward' は初期の候補集合を指定します。この集合は、すべての特徴量と、規準値が増加しなくなるまで連続的に特徴量を削除するアルゴリズムとを含みます。

'keepin'

含まれなければならない特徴量を指定する logical ベクトル、または列番号のベクトル。既定値は空です。

'keepout'

除外されなければならない特徴量を指定する logical ベクトル、または列番号のベクトル。既定値は空です。

'nfeatures'

sequentialfs が停止条件とする特徴量の数。inmodel にはこの数の特徴量が正確に含まれます。既定値は空で、sequentialfs は規準の局所的最小値が見つかった時点で停止します。値が空でない場合は、'options''MaxIter''TolFun' の値がオーバーライドされます。

'nullmodel'

ヌル モデル (X からの特徴量を含まないモデル) を特徴の選択と history 出力に含めるかどうかを示す論理値。既定の設定は false です。

'options'

statset が作成した、反復連続探索アルゴリズムのオプション構造体。

sequentialfs は、以下の statset のパラメーターを使用します。

  • Display — アルゴリズムで表示される情報量。既定の設定は 'off' です。

  • MaxIter — 許容される最大反復回数。既定の設定は Inf です。

  • TolFun — 目的関数値の終了許容誤差。既定の設定は、'direction''forward' の場合は 1e-6'direction''backward' の場合は 0 です。

  • TolTypeFun — 目的関数の許容誤差として絶対値または相対値のいずれかを指定します。既定の設定は 'rel' です。

  • UseParallel — 並列計算する場合は true に設定します。既定値は false です。

  • UseSubstreams — 再生成可能な方法で並列計算する場合は true に設定します。既定値は false です。再現性のある計算を行うには、Streams をサブストリームを許可する型、'mlfg6331_64' または 'mrg32k3a' に設定します。

  • StreamsRandStream オブジェクトまたはそのようなオブジェクトで構成される cell 配列。Streams を指定しないと、sequentialfs には既定のストリームが使用されます。

並列計算を行うには、Parallel Computing Toolbox™ が必要です。

ノイズのある特徴量を分類するために逐次特徴選択を実行します。

load fisheriris
rng('default') % For reproducibility
X = randn(150,10);
X(:,[1 3 5 7])= meas;
y = species;

c = cvpartition(y,'k',10);
opts = statset('Display','iter');
fun = @(XT,yT,Xt,yt)loss(fitcecoc(XT,yT),Xt,yt);

[fs,history] = sequentialfs(fun,X,y,'cv',c,'options',opts)

Start forward sequential feature selection:
Initial columns included:  none
Columns that can not be included:  none
Step 1, added column 5, criterion value 0.00266667
Step 2, added column 7, criterion value 0.00222222
Step 3, added column 1, criterion value 0.00177778
Step 4, added column 3, criterion value 0.000888889
Final columns included:  1 3 5 7 

fs =

  1×10 logical array

   1   0   1   0   1   0   1   0   0   0


history = 

  struct with fields:

      In: [4×10 logical]
    Crit: [0.0027 0.0022 0.0018 8.8889e-04]

history.In

ans =

  4×10 logical array

   0   0   0   0   1   0   0   0   0   0
   0   0   0   0   1   0   1   0   0   0
   1   0   0   0   1   0   1   0   0   0
   1   0   1   0   1   0   1   0   0   0

拡張機能

R2008a で導入