Main Content

sequentialfs

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

    説明

    tf = sequentialfs(fun,X,y) は、y を予測するうえで重要な X 内の特徴量のサブセットを選択します。この関数は Xy を使用して 10 分割交差検証の無作為な非層化区分を定義してから、関数 fun で計算される交差検証予測基準値に基づいて逐次的に特徴量を選択します。初期特徴セットに特徴量は含まれません。sequentialfs は、各反復で 1 つずつセットに特徴量を追加し、特徴量を追加しても終了許容誤差の値を超えて基準値が低下しなくなるまで続けます。出力 tf は、選択された特徴量を示す logical ベクトルです。詳細については、アルゴリズムを参照してください。

    tf = sequentialfs(fun,X1,...,XN) は、X1,...,XN に対して定義される分割で基準値を交差検証して X1 内の特徴量のサブセットを選択します。

    tf = sequentialfs(___,Name,Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、再帰的特徴消去 (RFE) を実行するには "Direction","backward" と指定します。初期特徴セットにすべての特徴量が含まれます。sequentialfs は、各反復で 1 つずつセットから特徴量を削除し、特徴量を削除しても予測基準が低下しなくなるまで続けます。

    [tf,history] = sequentialfs(___) は、特徴選択プロセスに関する情報も返します。

    すべて折りたたむ

    ラッパー タイプを使用した前方逐次特徴選択を実行して、重要な特徴量を検出します。

    fisheriris データ セットを読み込みます。

    load fisheriris

    データ セットの変数を表示します。

    whos
      Name           Size            Bytes  Class     Attributes
    
      meas         150x4              4800  double              
      species      150x1             18100  cell                
    

    行列 meas に、150 本の 3 種のアヤメの花についての 4 つの測定値が格納されています。変数 species には、それぞれの花の種類がリストされています。

    予測子データ X と応答データ y を指定します。X を定義して 4 つの測定値と 6 つの確率変数を含めます。測定変数を列 1、3、5、および 7 に配置します。

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

    学習データ (XTrain および yTrain) とテスト データ (XTest および yTest) の 4 つの入力を受け取る無名関数の関数ハンドル myfun を定義します。この無名関数は、学習データを使用して分類モデルに学習させ、テスト データでの学習済みモデルの損失値を返します。

    myfun = @(XTrain,yTrain,XTest,yTest) ...
      size(XTest,1)*loss(fitcecoc(XTrain,yTrain),XTest,yTest);

    分類モデル オブジェクトの関数 loss は平均損失値を返しますが、sequentialfs は、それに加えて myfun から返される基準値の合計をテスト観測値の総数で除算します。そのため、損失値にテスト観測値の数を乗算した値を無名関数で返さなければなりません。

    層化 10 分割交差検証用に分割を無作為に作成します。

    cv = cvpartition(y,"KFold",10);

    関数 sequentialfs を使用して、myfun から返される基準値に基づいて X の重要な特徴量を逐次的に選択します。層化区分 cv を使用するように指定し、各反復で特徴選択プロセスに関する情報を表示するように反復オプションを設定します。

    opts = statset("Display","iter");
    tf = sequentialfs(myfun,X,y,"CV",cv,"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.0333333
    Step 3, added column 1, criterion value 0.0266667
    Step 4, added column 3, criterion value 0.0133333
    Final columns included:  1 3 5 7 
    

    sequentialfs で列 1、3、5、および 7 にある重要な予測子が正しく検出されています。

    ラッパー タイプを使用した後方逐次特徴選択、つまり再帰的特徴消去 (RFE) を実行して、重要な特徴量を検出します。

    hald データ セットを読み込みます。これは、セメントの硬化熱に対してセメントの組成が与える影響を測定したデータです。

    load hald

    このデータ セットには、変数 ingredients および heat が含まれています。行列 ingredients には、セメントに含まれている 4 種類の化学物質の組成率が格納されています。ベクトル heat には、各セメント標本に対する 180 日後の硬化熱の値が格納されています。

    関数 sequentialfs を使用して、myfun から返される基準値に基づいて後方逐次特徴選択を実行します。補助関数 myfun のコードについては、この例の最後に示してあります。名前と値の引数 Direction"backward" と指定して初期特徴セットにすべての特徴量を含め、各反復で 1 つずつ特徴量を逐次的に除外します。各反復で特徴選択プロセスに関する情報を表示するように反復オプションを設定します。

    rng("default") % For reproducibility
    opts = statset("Display","iter");
    tf = sequentialfs(@myfun,ingredients,heat, ...
        "Direction","backward","Options",opts);
    Start backward sequential feature selection:
    Initial columns included:  all
    Columns that must be included:  none
    Step 1, used initial columns, criterion value 12.4989
    Step 2, removed column 3, criterion value 6.25866
    Final columns included:  1 2 4 
    

    sequentialfsingredients の特徴量から 3 つ目の変数が除外されています。

    補助関数

    関数 myfun は、学習データ (XTrain および yTrain) とテスト データ (XTest および yTest) の 4 つの入力を受け取ります。この関数は、学習データを使用して回帰モデルに学習させ、テスト データでの学習済みモデルの二乗誤差の合計を返します。

    function criterion = myfun(XTrain,yTrain,XTest,yTest)
        mdl = fitrlinear(XTrain,yTrain);
        predictedYTest = predict(mdl,XTest);
        e = yTest - predictedYTest;
        criterion = e'*e;
    end

    特徴量の相関係数に基づいてフィルター タイプ特徴選択を実行します。

    carsmall データ セットを読み込みます。

    load carsmall

    6 つの変数を含む特徴量行列 X を作成します。

    X = [Acceleration Cylinders Displacement ...
        Horsepower Model_Year Weight];

    関数corrを使用して、X 内の特徴量の各ペアについてのペアワイズ線形相関係数を計算します。名前と値の引数 Rows"pairwise" と指定し、2 列の相関係数の各計算で NaN を含むすべての行をペア単位で除外します。

    corr(X,"Rows","pairwise")
    ans = 6×6
    
        1.0000   -0.6473   -0.6947   -0.6968    0.4843   -0.4879
       -0.6473    1.0000    0.9512    0.8622   -0.6053    0.8844
       -0.6947    0.9512    1.0000    0.9134   -0.5779    0.8895
       -0.6968    0.8622    0.9134    1.0000   -0.6082    0.8733
        0.4843   -0.6053   -0.5779   -0.6082    1.0000   -0.4964
       -0.4879    0.8844    0.8895    0.8733   -0.4964    1.0000
    
    

    高い相関がある特徴量が X に含まれています。たとえば、2 つ目と 3 つ目の特徴量 (CylindersDisplacement) の相関は 0.9512 です。

    関数 sequentialfs を使用して、相関値に基づいて X 内の特徴量をランク付けします。関数 sequentialfs を呼び出すときに次のようにオプションを指定します。

    • 補助関数 mycorr を使用して、相関係数行列の非対角要素の最大絶対値を返します。この補助関数のコードについては、この例の最後に示してあります。

    • "Direction","backward" および "NullModel",true を指定して、すべての特徴量を含む初期特徴セットから sequentialfs を開始し、セットから一度に 1 つずつすべての特徴量を除外します。

    • "CV","none" を指定して、交差検証なしで特徴選択を実行します。

    • 各反復で特徴選択プロセスに関する情報を表示するように反復オプションを設定します。

    opts = statset("Display","iter");
    [~,history] = sequentialfs(@mycorr,X, ...
        "Direction","backward","NullModel",true, ...
        "CV","none","Options",opts);
    Start backward sequential feature selection:
    Initial columns included:  all
    Columns that must be included:  none
    Step 1, used initial columns, criterion value 0.951167
    Step 2, removed column 3, criterion value 0.884401
    Step 3, removed column 6, criterion value 0.862164
    Step 4, removed column 4, criterion value 0.647346
    Step 5, removed column 2, criterion value 0.484253
    Step 6, removed column 1, criterion value 0
    Step 7, removed column 5, criterion value 0
    Final columns included:  none
    

    sequentialfs は、特徴選択プロセスに関する情報が格納された 2 つのフィールド (InCrit) をもつ構造体配列 history を返します。In フィールドには、行 i が反復 i で選択された特徴量を示す logical 行列が格納されます。行のエントリ true (logical 1) は、対応する特徴量が反復後の特徴セットに含まれることを示します。

    history.In
    ans = 7x6 logical array
    
       1   1   1   1   1   1
       1   1   0   1   1   1
       1   1   0   1   1   0
       1   1   0   0   1   0
       1   0   0   0   1   0
       0   0   0   0   1   0
       0   0   0   0   0   0
    
    

    Crit フィールドには、各反復で計算された基準値が格納されます。

    history.Crit
    ans = 1×7
    
        0.9512    0.8844    0.8622    0.6473    0.4843         0         0
    
    

    最後の 2 つの基準値がゼロになっているのは、関数 mycorr は入力に含まれる特徴量が 2 つより少ないと 0 を返すためです。

    除外された特徴量のインデックスを In フィールドの行列から抽出します。

    p = size(X,2);
    idx = NaN(1,p);
    for i = 1 : p
        idx(i) = find(history.In(i,:)~=history.In(i+1,:));
    end
    idx
    idx = 1×6
    
         3     6     4     2     1     5
    
    

    基準値が 0.8 未満の一連の特徴量を検出します。

    threshold = 0.8;
    iter_last_exclude = find(history.Crit(2:end)<threshold,1);
    idx_selected = idx(iter_last_exclude+1:end)
    idx_selected = 1×3
    
         2     1     5
    
    

    選択された特徴量の相関係数行列を計算します。

    corr(X(:,idx_selected),"Rows","pairwise")
    ans = 3×3
    
        1.0000   -0.6473   -0.6053
       -0.6473    1.0000    0.4843
       -0.6053    0.4843    1.0000
    
    

    非対角要素の絶対値がしきい値の 0.8 を下回っています。

    補助関数

    関数 mycorr は、特徴量が列に格納された行列を受け取り、相関係数行列の非対角要素の最大絶対値を返します。非対角要素は、入力データ内の 2 つの異なる特徴量の間の相関です。そのため、少なくとも 2 つの異なる特徴量が入力データに含まれていないと mycorr はゼロを返します。

    function criterion = mycorr(X)
        if size(X,2) < 2
            criterion = 0;
        else
            p = size(X,2);
            R = corr(X,"Rows","pairwise");
            R(logical(eye(p))) = NaN;
            criterion = max(abs(R),[],"all");
        end
    end

    関数onehotencodeおよびtable2arrayを使用して、数値変数とカテゴリカル変数の両方を含む table を配列に変換します。その後、関数 sequentialfs を使用して配列から重要な特徴量を選択します。

    carbig データ セットを読み込みます。

    load carbig

    このデータ セットには、ガロンあたりの走行マイル数 (MPG)、生産国 (Origin)、気筒数 (Cylinders) など、自動車のいくつかの側面について記述する変数が含まれています。それ以外の変数を使用して MPG の回帰モデルを作成できます。

    table 内の予測子データ tblX を指定し、応答データ y を指定します。

    tblX = table(Acceleration,Cylinders,Displacement, ...
        Horsepower,Model_Year,Weight,Origin);
    y = MPG;

    tblX 内の変数は、変数 Origin 以外はすべて数値です。

    関数 onehotencode を使用して、変数 Origin を one-hot 符号化します。

    tblOrigin = table(categorical(string(Origin)));
    tblOrigin = onehotencode(tblOrigin);

    変数 OrigintblX から削除し、符号化された値を tblX に追加します。

    tblX.Origin = [];
    tblX = [tblX tblOrigin];

    table tblX を配列に変換します。

    X = table2array(tblX);

    学習データ (XTrain および yTrain) とテスト データ (XTest および yTest) の 4 つの入力を受け取る無名関数の関数ハンドル myfun を定義します。この無名関数は、学習データを使用して回帰モデルに学習させ、テスト データでの学習済みモデルの損失値を返します。

    myfun = @(XTrain,yTrain,XTest,yTest) ...
      size(XTest,1)*loss(fitrtree(XTrain,yTrain),XTest,yTest);

    回帰モデル オブジェクトの関数 loss は平均二乗誤差 (MSE) を返しますが、sequentialfs は、それに加えて myfun から返される基準値の合計をテスト観測値の総数で除算します。そのため、損失値にテスト観測値の数を乗算した値を無名関数で返さなければなりません。

    関数 sequentialfs を使用して、myfun から返される基準値に基づいて X の重要な特徴量を逐次的に選択します。

    rng("default") % For reproducibility
    tf = sequentialfs(myfun,X,y);

    選択された特徴量の変数名を表示します。

    tblX.Properties.VariableNames(tf)'
    ans = 6x1 cell
        {'Cylinders'   }
        {'Displacement'}
        {'Model_Year'  }
        {'Weight'      }
        {'Germany'     }
        {'Italy'       }
    
    

    入力引数

    すべて折りたたむ

    特徴選択基準を計算する関数。関数ハンドルとして指定します。

    sequentialfs は、候補特徴セットのそれぞれについて、次のように関数 fun を繰り返し呼び出して交差検証基準値を計算します。

    1. sequentialfs は、名前と値の引数 CV で定義される各分割 (学習データ セットとテスト データ セットのグループ) について、関数 fun を呼び出して分割の基準値を取得します。

    2. sequentialfs は、基準値の合計をテスト観測値の総数で除算します。

    Xy を指定する場合、関数 fun は次の形式でなければなりません。

    criterion = fun(XTrain,yTrain,XTest,yTest)

    • 関数 fun は学習データ (XTrain および yTrain) とテスト データ (XTest および yTest) を受け入れます。

    • XTrainXTest には現在の候補特徴セットに対応する X の列のサブセットが含まれます。

    • 関数 fun はスカラー値 criterion を返します。

    • 一般に、fun は、学習データ (XTrainyTrain) を使用してモデルに学習させ、XTest の応答値を予測し、yTest と比較した予測値の損失を返します。一般的な損失測定値には、回帰モデルの二乗誤差の合計や分類モデルの誤分類された観測値の数があります。

      たとえば、関数 myFun を次のように定義し、fun@myFun として指定できます。

      function criterion = myFun(XTrain,yTrain,XTest,yTest)
        mdl = fitcsvm(XTrain,yTrain);
        predictedYTest = predict(mdl,XTest);
        criterion = sum(~strcmp(yTest,predictedYTest));
      end

      あるいは、無名関数の関数ハンドル myFunHandle を次のように定義し、funmyFunHandle として指定できます。

      myFunHandle = @(XTrain,yTrain,XTest,yTest) ...
        loss(fitcsvm(XTrain,yTrain),XTest,yTest)*size(XTest,1);

      sequentialfs は、fun から返される基準値の合計をテスト観測値の総数で除算します。そのため、fun では、損失値をテスト観測値の数で除算してはなりません。分類オブジェクトまたは回帰オブジェクトの関数 loss は平均の損失値を返します。そのため、fun では、損失値にテスト観測値の数を乗算した値を返さなければなりません。二乗誤差の合計または誤分類された観測値の数を返すように関数 fun を定義すると、交差検証基準値はそれぞれ平均二乗誤差または誤分類率になります。

    X1,...,XN を指定する場合、sequentialfsX1 からのみ特徴量を選択します。X1,...,XN について、それ以外に何らかの解釈を加えることはありません。この場合も、関数 fun は次の形式でなければなりません。

    criterion = fun(X1Train,⋯,XNTrain,X1Test,⋯,XNTest)

    • 関数 fun は学習データ (X1Train,…,XNTrain) とテスト データ (X1Test,…,XNTest) を受け入れます。

    • X1TrainX1Test には現在の候補特徴セットに対応する X1 の列のサブセットが含まれます。

    • 関数 fun はスカラー値 criterion を返します。

    データ型: function_handle

    特徴量データ。数値行列として指定します。X の行は観測値に対応し、X の列は特徴量に対応します。Xy の行数は同じでなければなりません。

    引数 fun で定義されるカスタム関数は、X を分割して定義される学習データ セットとテスト データ セットのグループを受け入れなければなりません。詳細については、引数 fun および名前と値の引数 CV を参照してください。

    データ型: single | double

    応答 (ラベル)。列ベクトルとして指定します。Xy の行数は同じでなければなりません。

    引数 fun で定義されるカスタム関数は、y を分割して定義される学習データ セットとテスト データ セットのグループを受け入れなければなりません。詳細については、引数 fun および名前と値の引数 CV を参照してください。

    データ型: single | double | logical | char | string | cell | categorical

    入力データ。行列として指定します。行列の行数は同じでなければなりません。

    sequentialfsX1 からのみ特徴量を選択します。X1,...,XN について、それ以外に何らかの解釈を加えることはありません。

    引数 fun で定義されるカスタム関数は、X1,...,XN を分割して定義される学習データ セットとテスト データ セットのグループを受け入れなければなりません。詳細については、引数 fun および名前と値の引数 CV を参照してください。

    データ型: single | double | logical | char | string | cell | categorical

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    例: KeepIn=[1 0 0 0],KeepOut=[0 0 0 1] は、最初の特徴量を常に含め、最後の特徴量を常に除外します。

    R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

    例: "KeepIn",[1 0 0 0],"KeepOut",[0 0 0 1]

    それぞれの候補特徴サブセットの基準を計算する交差検証オプション。正の整数、cvpartition オブジェクト、"resubstitution"、または "none" として指定します。

    それぞれの候補特徴サブセットについて、sequentialfs は、この引数で指定された分割を使用して、関数 fun から返される基準値を交差検証します。

    • 正の整数 ksequentialfsk 分割交差検証の無作為な非層化区分を使用します。

    • cvpartition オブジェクト — sequentialfscvpartition オブジェクトで指定される分割を使用します。層化区分、ホールドアウト検証の分割、または leave-one-out 交差検証の分割を指定できます。詳細については、cvpartition を参照してください。

    • "resubstitution"sequentialfs で入力データを分割しません。学習セットとテスト セットの両方に元のすべての観測値が含まれます。たとえば、Xy を指定する場合、sequentialfsfuncriterion = fun(X,y,X,y) として呼び出します。

    • "none"sequentialfs で基準値を検証しません。学習セットとテスト セットを分割せずに、funcriterion = fun(X,y) として呼び出します。

    例: "CV","none"

    交差検証用のモンテカルロ反復回数。正の整数として指定します。

    1 より大きい正の整数を指定すると、sequentialfs は、それぞれの候補特徴サブセットについて、指定された反復回数にわたって交差検証の計算を繰り返します。

    CV"none""resubstitution""resubstitution" タイプの cvpartition オブジェクト、"leaveout" タイプの cvpartition オブジェクト、またはカスタム cvpartition オブジェクト (IsCustom プロパティが 1 に設定されている) の場合、MCReps の値は 1 に設定されます。

    例: "MCReps",10

    データ型: single | double

    連続探索の方向。"forward" または "backward" として指定します。

    • "forward" — 初期特徴セットに特徴量を含めず、関数 sequentialfs で特徴量を逐次的にセットに追加します。

    • "backward" — 初期特徴セットにすべての特徴量を含め、関数 sequentialfs で特徴量を逐次的にセットから削除します。つまり、関数 sequentialfs は再帰的特徴消去 (RFE) を実行します。

    例: "Direction","backward"

    データ型: char | string

    含める特徴量。[]、logical ベクトル、または正の整数のベクトルとして指定します。

    既定では、sequentialfs は特徴選択プロセスですべての特徴量を調べます。この引数を使用して含める特徴量を指定すると、sequentialfs はその特徴量を候補特徴セットに常に含めます。logical ベクトルのエントリ true または正の整数のベクトルのインデックス値は、対応する特徴量を出力引数 tf に含める必要があることを示します。

    例: "KeepIn",[1 0 0 0]

    データ型: logical

    除外する特徴量。[]、logical ベクトル、または正の整数のベクトルとして指定します。

    既定では、sequentialfs は特徴選択プロセスですべての特徴量を調べます。この引数を使用して除外する特徴量を指定すると、sequentialfs はその特徴量を候補特徴セットから除外します。logical ベクトルのエントリ true または正の整数のベクトルのインデックス値は、対応する特徴量を出力引数 tf で除外する必要があることを示します。

    例: "KeepOut",[0 0 0 1]

    データ型: logical

    選択する特徴量の数。[] または正の整数として指定します。

    既定では、sequentialfs は、名前と値の引数 Options で指定された停止条件 (MaxIter または TolFun) のいずれかを関数が満たしたときに反復を停止します。名前と値の引数 NFeatures を正の整数として指定すると、sequentialfs は、指定された数の特徴を選択した時点で反復を停止します。この引数は他の反復オプションをオーバーライドします。

    例: "NFeatures",2

    データ型: single | double

    ヌル モデル (特徴量を含まないモデル) を含めるためのフラグ。logical 1 (true) または 0 (false) として指定します。

    true を指定すると、関数 sequentialfs はヌル モデルを出力 tf の有効なオプションとして含め、空の入力データについての基準値を計算します。そのため、関数 fun で空の行列を入力引数の値として受け入れ可能でなければなりません。

    例: "NullModel",true

    データ型: logical

    反復と並列計算のオプション。statset によって返される構造体として指定します。

    次の表は、オプションのフィールドとその値の一覧です。

    フィールド名フィールドの値既定値
    Display

    表示のレベル。"off""final"、または "iter" として指定します。

    • "off" — 何の情報も表示しません。

    • "final" — 最終情報を表示します。

    • "iter" — 各反復で情報を表示します。

    "off"
    MaxIter許容される最大反復回数。正の整数として指定Inf
    TolFun基準値の終了許容誤差。正のスカラーとして指定します。Direction"forward" の場合は 1e-6Direction"backward" の場合は 0
    TolTypeFun基準値の終了許容誤差のタイプ。"abs" (絶対許容誤差) または "rel" (相対許容誤差) として指定します。"rel"
    UseParallel並列実行のフラグ。logical の 1 (true) または 0 (false) として指定します。false
    UseSubstreams

    計算を再現可能な方法で実行するためのフラグ。logical の 1 (true) または 0 (false) として指定します。

    再現性のある計算を行うには、Streams をサブストリームを許可する型 ("mlfg6331_64" または "mrg32k3a") に設定します。

    false
    Streams

    乱数ストリーム。RandStream オブジェクトまたはそのようなオブジェクトの cell 配列として指定します。UseParallel の値が true でなく、UseSubstreams の値も false でない場合、単一オブジェクトを使用します。この場合は、並列プールと同じサイズの cell 配列を使用します。

    MATLAB® の既定の乱数ストリーム

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

    例: "Options",statset("Display","iter")

    データ型: struct

    出力引数

    すべて折りたたむ

    選択された特徴量。logical ベクトルとして返されます。エントリ true (logical 1) は、対応する特徴量が選択されていることを示します。

    特徴選択プロセスの履歴。In フィールドと Crit フィールドを含む構造体配列として返されます。

    • In は、行 i が反復 i で選択された特徴量を示す logical 行列です。

    • Crit は、各反復で計算された基準値を格納するベクトルです。

    詳細

    すべて折りたたむ

    特徴選択

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

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

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

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

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

    詳細については、特徴選択の紹介を参照してください。

    アルゴリズム

    sequentialfs は、次の手順を実行して X 内の特徴量を逐次的に選択します。

    1. n 個の観測値に対する 10 分割交差検証の無作為な非層化区分を定義します。ここで、nX 内の観測値の数です。

    2. 選択された特徴セット S を空のセットとして初期化します。

    3. X 内の各特徴量 xi について、関数 fun を使用して交差検証基準値を計算します。

    4. 基準値が最も小さい特徴量を S に追加します。

    5. X\S 内の各特徴量 xi について、候補特徴セット CiS∪{xi} として定義します。fun を使用して Ci の交差検証基準値を計算します。

    6. 候補セット (Ci) の中から、S の基準値と比較して基準値を最も低下させるセットを選択します。選択した候補セットに対応する特徴量を S に追加します。

    7. 特徴量を追加しても終了許容誤差の値を超えて基準値が低下しなくなるまで、手順 5 と 6 を繰り返します。

    特徴選択プロセスをカスタマイズするには、sequentialfs の名前と値の引数を使用します。

    • 交差検証オプションは、名前と値の引数 CV および MCReps を使用して指定できます。

      • ラッパー タイプ特徴選択の場合、それぞれの候補特徴セットの基準値を交差検証するように引数を指定します。モデルに学習させて学習済みモデルの基準値を返すように関数 fun を定義できます。例については、前方特徴選択を参照してください。

      • フィルター タイプ特徴選択の場合、交差検証はないため、CV"none" として指定し、関数 fun を使用して入力データの特性 (相関など) を測定します。例については、フィルター タイプ特徴選択を参照してください。

    • 後方特徴選択、つまり再帰的特徴消去 (RFE) を実行するには、名前と値の引数 Direction"backward" として指定します。sequentialfs は、選択された特徴セット S をすべての特徴量を含むセットとして初期化し、セットから一度に 1 つずつ特徴量を削除します。

    • 常に含める特徴量と常に除外する特徴量、最終的に選択される特徴セットに含める特徴量の数、および特徴量を含まないモデルを有効なオプションと見なすかどうかを指定できます。詳細については、名前と値の引数 KeepInKeepOutNFeatures、および NullModel を参照してください。

    • 反復と並列計算のオプションを指定するには、名前と値の引数 Options を使用します。たとえば、Options,statset("TolFun",1e-2) は、基準値の反復終了許容誤差を 1e-2 に設定します。

    拡張機能

    バージョン履歴

    R2008a で導入