ドキュメンテーション

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

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 は最終的に選択された特徴量を示す論理ベクトルです。

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、... を指定できます。。sequentialfs では X からの特徴量 (列) のみを選択し、これ以外の場合は XYZ、... の解釈を行いません。。列ベクトルの場合も行列の場合も、すべてのデータ入力は同じ行数でなければなりません。sequentialfs は、XYZ, ... の学習サブセットとテスト サブセットを使用して次のように fun を呼び出します。

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

sequentialfs では、XTRAINYTRAINZTRAIN、...、XTESTYTESTZTEST、... を作成するために、XYZ、... の行のサブセットを選択します。。fun はスカラー値 criterion を返さなければなりませんが、この値を計算する方法に制限はありません。論理ベクトル inmodel の要素は X の列に対応し、最終的に選択された特徴量を示します。

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

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

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

[] = 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'

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

'keepout'

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

'nfeatures'

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

'nullmodel'

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

'options'

statset で作成されるような、反復連続探索アルゴリズム用の options 構造体。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 オブジェクトまたはそのようなオブジェクトで構成されるセル配列。Streams を指定しないと、sequentialfs には既定のストリームが使用されます。

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

load fisheriris;
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)...
      (sum(~strcmp(yt,classify(Xt,XT,yT,'quadratic'))));

[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 7, criterion value 0.04
Step 2, added column 5, criterion value 0.0266667
Final columns included:  5 7 

fs =
     0  0  0  0  1  0  1  0  0  0
history = 
      In: [2x10 logical]
    Crit: [0.0400 0.0267]

history.In
ans =
     0  0  0  0  0  0  1  0  0  0
     0  0  0  0  1  0  1  0  0  0

関連する例

R2008a で導入

この情報は役に立ちましたか?