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
の行は観測値に対応し、列は変数または特徴量に対応します。y
は X
の各観測値に対する応答値の列ベクトルまたはクラス ラベルです。X
と y
の行数は同じでなければなりません。fun
は、特徴量の選択と停止時期の決定に使用される規準を定義する関数への関数ハンドルです。出力 inmodel
は最終的に選択された特徴量を示す logical ベクトルです。
sequentialfs
は、空の特徴セットから開始して、まだ選択されていない特徴を 1 つずつ連続的に追加して候補特徴のサブセットを作成します。候補特徴のサブセットのそれぞれについて、sequentialfs
は fun
を繰り返し呼び出し 10 分割交差検証を実行します。この呼び出しでは、X
と y
の異なる学習 サブセット (XTRAIN
と ytrain
)、および X
と y
の検定サブセット (XTEST
と ytest
) を次のように使用します。
criterion = fun(XTRAIN,ytrain,XTEST,ytest)
XTRAIN
と ytrain
には X
と Y
の行の同じサブセットが含まれ、XTEST
と ytest
には行の相補サブセットが含まれます。XTRAIN
と XTEST
には、現在の候補特徴セットに対応する X
の列から受け取ったデータが含まれます。
fun
は呼び出されるごとに、スカラー値 criterion
を必ず返します。通常、fun
では XTRAIN
と ytrain
を使用してモデルの学習または当てはめを行い、そのモデルを使用して XTEST
の値を予測し、ytest
からのそれらの予測値の何らかの距離の尺度、つまり "損失" を返します。与えられた候補特徴セットに対する交差検証計算では、sequentialfs
は fun
からの戻り値を総和し、それをテスト観測総数で割ります。そしてこの平均値を使用して、候補特徴サブセットのそれぞれを評価します。
一般的な損失測定値には、回帰モデルの二乗誤差の総和 (この場合、sequentialfs
は平均二乗誤差を計算)、および分類モデルの誤分類された観測総数 (この場合、sequentialfs
は誤分類率を計算) が含まれます。
メモ
sequentialfs
は fun
がすべての検定セットについて返した値の総和を、テストの観測総数で割ります。したがって、fun
はその出力値をテストの観測総数で割るべきではありません。
候補特徴サブセットのそれぞれについて平均の criterion
値を計算した後、sequentialfs
は平均規準値を最小にする候補特徴サブセットを選択します。このプロセスは、特徴量を追加してもそれ以上規準値が減少しなくなるまで続けられます。
inmodel = sequentialfs(fun,X,Y,Z,...)
は、X
、Y
、Z
, ...など、入力変数の数に制限はありません。. sequentialfs
は X
、Y
、Z
などに特別の解釈をせず、X
の列にある特徴だけを選択します。列ベクトルの場合も行列の場合も、すべてのデータ入力は同じ行数でなければなりません。sequentialfs
は、X
、Y
、Z
, ... の学習サブセットとテスト サブセットを使用して次のように fun
を呼び出します。
criterion = fun(XTRAIN,YTRAIN,ZTRAIN,..., XTEST,YTEST,ZTEST,...)
sequentialfs
は、XTRAIN
、YTRAIN
、ZTRAIN
、..., XTEST
、YTEST
、ZTEST
などを作成しますが、そのために X
、Y
、Z
などの行のサブセットを選択します。. fun
はスカラー値 criterion
を返さなければなりませんが、その値の計算はどのような方法で行ってもかまいません。logical ベクトル inmodel
の要素は X
の列に対応し、最終的に選択された特徴量を示します。
[inmodel,history] = sequentialfs(fun,X,...)
は、各ステップにおいて選択された特徴に関する情報を返します。history
はスカラー構造体で、次のフィールドがあります。
Crit
— 各ステップにおいて計算される規準値を含むベクトル。In
— ステップi
で選択された特徴量を、行i
にもつ logical 行列。
[] = sequentialfs(...,
は、次の表に示すオプション パラメーターの名前と値のペアを指定します。param1
,val1
,param2
,val2
,...)
パラメーター | 値 |
---|---|
'cv' | 特徴サブセットの各候補に対する規準を計算するために使用する検証方法。
既定値は いわゆる "ラッパー法" では、学習アルゴリズムを実装する関数 |
'mcreps' | 交差検証用のモンテカルロ反復回数を示す正の整数。既定値は |
'direction' | 連続探索の方向。既定の設定は |
'keepin' | 含まれなければならない特徴量を指定する logical ベクトル、または列番号のベクトル。既定値は空です。 |
'keepout' | 除外されなければならない特徴量を指定する logical ベクトル、または列番号のベクトル。既定値は空です。 |
'nfeatures' |
|
'nullmodel' | ヌル モデル ( |
'options' |
並列計算を行うには、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 で導入
参考
crossval
| cvpartition
| stepwiselm
| statset
| relieff
| fsrnca
| fscnca
| fscmrmr
| fsrmrmr
| fsulaplacian