メインコンテンツ

fsrmrmr

Minimum Redundancy Maximum Relevance (MRMR) アルゴリズムを使用した回帰用の特徴量のランク付け

R2022a 以降

    説明

    fsrmrmr は、回帰問題用の重要な予測子を識別するために MRMR アルゴリズムを使用して特徴量 (予測子) をランク付けします。

    分類用に MRMR に基づく特徴量のランク付けを実行するには、fscmrmr を参照してください。

    idx = fsrmrmr(Tbl,ResponseVarName) は、予測子の重要度順 (重要度が高いものから低いものの順) に並べ替えられた予測子のインデックス idx を返します。table Tbl には予測子変数と応答変数が含まれ、ResponseVarName に応答値が格納されます。idx を使用して、回帰問題のための重要な予測子を選択できます。

    idx = fsrmrmr(Tbl,formula) は、formula を使用して Tbl 内の変数を考慮するために応答変数と予測子変数を指定します。たとえば、fsrmrmr(cartable,"MPG ~ Acceleration + Displacement + Horsepower") は、cartable 内の応答変数 MPG を使用して、cartable 内の予測子 AccelerationDisplacement、および Horsepower をランク付けします。

    idx = fsrmrmr(Tbl,Y) は、応答変数 Y を使用して Tbl 内の予測子をランク付けします。

    idx = fsrmrmr(X,Y) は、応答変数 Y を使用して X 内の予測子をランク付けします。

    idx = fsrmrmr(___,Name=Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、観測値の重みを指定できます。

    [idx,scores] = fsrmrmr(___) は、予測子スコア scores も返します。大きなスコア値は、対応する予測子が重要であることを示します。

    すべて折りたたむ

    モデル y=x4+2x7+e から 1000 個の観測値をシミュレートします。

    • X={x1,...,x10} は、標準正規の要素の 1000 行 10 列の行列です。

    • "e" は、平均が 0、標準偏差が 0.3 のランダムな正規誤差のベクトルです。

    rng("default") % For reproducibility
    X = randn(1000,10);
    Y = X(:,4) + 2*X(:,7) + 0.3*randn(1000,1);

    重要度に基づいて予測子をランク付けします。

    idx = fsrmrmr(X,Y);

    上位 2 つの最も重要な予測子を選択します。

    idx(1:2)
    ans = 1×2
    
         7     4
    
    

    関数により、X の 7 列目と 4 列目が Y の最も重要な予測子として識別されます。

    carbig データ セットを読み込み、さまざまな変数が含まれている table を作成します。応答変数 MPG を table の最後の変数として含めます。

    load carbig
    cartable = table(Acceleration,Cylinders,Displacement, ...
        Horsepower,Model_Year,Weight,Origin,MPG);

    重要度に基づいて予測子をランク付けします。応答変数を指定します。

    [idx,scores] = fsrmrmr(cartable,"MPG");

    メモ: fsrmrmr が table 内の変数のサブセットを予測子として使用する場合、関数は予測子のサブセットのみにインデックスを作成します。関数でランク付けされない変数 (応答変数も含む) は、返されるインデックスでカウントされません。

    予測子の重要度スコアの棒グラフを作成します。予測子の名前を x 軸の目盛りラベルに使用します。

    bar(scores(idx))
    xlabel("Predictor rank")
    ylabel("Predictor importance score")
    predictorNames = cartable.Properties.VariableNames(1:end-1);
    xticklabels(strrep(predictorNames(idx),"_","\_"))
    xtickangle(45)

    Figure contains an axes object. The axes object with xlabel Predictor rank, ylabel Predictor importance score contains an object of type bar.

    最も重要な予測子の 2 番目と 3 番目の間のスコアの下落は大きいですが、3 番目の予測子の後は比較的小さい下落になっています。重要度スコアの下落は、特徴選択の信頼度を表します。したがって、最も重要な予測子の選択においては、大きな下落は、ソフトウェアが確実に 2 番目の最も重要な予測子を選択していることを示します。小さな下落は、予測子の重要度の差が有意ではないことを示します。

    上位 2 つの最も重要な予測子を選択します。

    idx(1:2)
    ans = 1×2
    
         3     5
    
    

    cartable の 3 列目が MPG の最も重要な予測子です。cartable の 5 列目が MPG の 2 番目に最も重要な予測子です。

    回帰モデルの性能を改善するために、genrfeatures を使用して新しい特徴量を生成し、fsrmrmr を使用して最も重要な予測子を選択します。元の特徴量だけを使用して学習させたモデルのテスト セット性能と最も重要な生成された特徴量を使用して学習させたモデルの性能を比較します。

    停電のデータをワークスペースに table として読み込みます。欠損値がある観測値を削除し、table の最初の数行を表示します。

    outages = readtable("outages.csv");
    Tbl = rmmissing(outages);
    head(Tbl)
           Region           OutageTime        Loss     Customers     RestorationTime            Cause       
        _____________    ________________    ______    __________    ________________    ___________________
    
        {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
        {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
        {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
        {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }
        {'West'     }    2003-06-18 02:49         0             0    2003-06-18 10:54    {'attack'         }
        {'NorthEast'}    2003-07-16 16:23    239.93         49434    2003-07-17 01:12    {'fire'           }
        {'MidWest'  }    2004-09-27 11:09    286.72         66104    2004-09-27 16:37    {'equipment fault'}
        {'SouthEast'}    2004-09-05 17:48    73.387         36073    2004-09-05 20:46    {'equipment fault'}
    

    変数の中には、OutageTimeRestorationTime など、fitrensemble のような回帰モデル学習関数でサポートされないデータ型の変数も含まれています。

    cvpartitionを使用して、データ セットを学習セットとテスト セットに分割します。観測値の約 70% を学習データとして使用し、それ以外の約 30% をテスト データとして使用します。

    rng("default") % For reproducibility of the data partition
    c = cvpartition(length(Tbl.Loss),"Holdout",0.30);
    trainTbl = Tbl(training(c),:);
    testTbl = Tbl(test(c),:);

    関数 isoutlier を使用して、学習データから Customers の外れ値を特定して削除します。

    [customersIdx,customersL,customersU] = isoutlier(trainTbl.Customers);
    trainTbl(customersIdx,:) = [];

    学習データの計算で使用したのと同じ下限および上限のしきい値を使用して、テスト データから Customers の外れ値を削除します。

    testTbl(testTbl.Customers < customersL | testTbl.Customers > customersU,:) = [];

    trainTbl 内の予測子から、バギング アンサンブルの学習に使用できる特徴量を 35 個生成します。応答として変数 Loss を指定し、特徴選択手法として MRMR を指定します。

    [Transformer,newTrainTbl] = genrfeatures(trainTbl,"Loss",35, ...
        TargetLearner="bag",FeatureSelectionMethod="mrmr");

    返される table newTrainTbl には、各種の設計された特徴量が含まれます。newTrainTbl の最初の 3 列は関数 fitrensemble を使用して回帰モデルの学習に使用できる trainTbl の元の特徴量で、newTrainTbl の残りの列は応答変数 Loss です。

    originalIdx = 1:3;
    head(newTrainTbl(:,[originalIdx end]))
        c(Region)    Customers        c(Cause)         Loss 
        _________    __________    _______________    ______
    
        SouthEast    1.4294e+05    winter storm        289.4
        West         3.4037e+05    equipment fault    434.81
        MidWest      2.1275e+05    severe storm       186.44
        West                  0    attack                  0
        MidWest           66104    equipment fault    286.72
        SouthEast         36073    equipment fault    73.387
        SouthEast    1.0698e+05    winter storm       46.918
        NorthEast    1.0444e+05    winter storm       255.45
    

    newTrainTbl の予測子をランク付けします。応答変数を指定します。

    [idx,scores] = fsrmrmr(newTrainTbl,"Loss");

    メモ: fsrmrmr が table 内の変数のサブセットを予測子として使用する場合、関数はサブセットのみにインデックスを作成します。関数でランク付けされない変数 (応答変数も含む) は、返されるインデックスでカウントされません。

    予測子の重要度スコアの棒グラフを作成します。

    bar(scores(idx))
    xlabel("Predictor rank")
    ylabel("Predictor importance score")

    Figure contains an axes object. The axes object with xlabel Predictor rank, ylabel Predictor importance score contains an object of type bar.

    7 番目と 8 番目の最も重要な予測子のスコア間に大きなギャップがあるため、7 個の最も重要な特徴量を選択してバギング アンサンブル モデルに学習させます。

    importantIdx = idx(1:7);
    fsMdl = fitrensemble(newTrainTbl(:,importantIdx),newTrainTbl.Loss, ...
        Method="Bag");

    比較のために、モデルの学習に使用できる 3 つの元の予測子を使用して別のバギング アンサンブル モデルに学習させます。

    originalMdl = fitrensemble(newTrainTbl(:,originalIdx),newTrainTbl.Loss, ...
        Method="Bag");

    テスト データ セットを変換します。

    newTestTbl = transform(Transformer,testTbl);

    2 つの回帰モデルのテストの平均二乗誤差 (MSE) を計算します。

    fsMSE = loss(fsMdl,newTestTbl(:,importantIdx), ...
        newTestTbl.Loss)
    fsMSE = 
    1.0867e+06
    
    originalMSE = loss(originalMdl,newTestTbl(:,originalIdx), ...
        newTestTbl.Loss)
    originalMSE = 
    1.0961e+06
    

    fsMSEoriginalMSE より小さくなっており、最も重要な生成された特徴量で学習させたバギング アンサンブルの方が元の特徴量で学習させたバギング アンサンブルよりも性能がわずかに高くなっていることを示しています。

    入力引数

    すべて折りたたむ

    標本データ。table として指定します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

    Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、Tbl に応答変数用および観測値の重み用の追加列を含めることができます。応答変数は、数値ベクトルでなければなりません。

    • Tbl に応答変数が含まれている場合に Tbl 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。Tbl に観測値の重みも含まれている場合、Weights を使用して重みを指定できます。

    • Tbl に応答変数が含まれている場合に Tbl 内の他の変数のサブセットのみを予測子として使用するには、formula を使用して変数のサブセットを指定します。

    • Tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数と Tbl の行数は同じでなければなりません。

    fsrmrmrTbl 内の変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。名前と値の引数 CategoricalPredictors と出力引数 idx 内の値は、関数がランク付けを行わない予測子はカウントしません。

    Tbl に応答変数が格納されている場合、fsrmrmr は応答変数に含まれる NaN の値を欠損値と見なします。fsrmrmr は、応答変数に欠損値がある観測値を使用しません。

    データ型: table

    応答変数名。Tbl 内の変数の名前を含む文字ベクトルまたは string スカラーを指定します。

    たとえば、応答変数が Tbl の列 Y (Tbl.Y) である場合、ResponseVarName"Y" として指定します。

    データ型: char | string

    応答変数および予測子変数サブセットの説明モデル。"Y ~ x1 + x2 + x3" という形式の文字ベクトルまたは string スカラーとして指定します。この形式では、Y は応答変数を、x1x2 および x3 は予測子変数を表します。

    予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、fsrmrmrformula に現れない Tbl 内の変数をランク付けしません。

    式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

    データ型: char | string

    応答変数。数値ベクトルとして指定します。Y の各行は、X または Tbl の対応する行の応答を表します。

    fsrmrmrY に含まれる NaN の値を欠損値と見なします。fsrmrmr は、Y に欠損値がある観測値を使用しません。

    データ型: single | double

    予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。

    データ型: single | double

    名前と値の引数

    すべて折りたたむ

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

    例: fsrmrmr(Tbl,"y",CategoricalPredictors=[1 2 4],Weights="w") は、Tbly 列を応答変数、Tblw 列を観測値の重みの格納先、Tbl の 1 列目、2 列目、4 列目をカテゴリカル予測子 (y 列と w 列を削除) として指定します。

    カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。

    説明
    正の整数のベクトル

    ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。

    fsrmrmr が入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重みの変数、または関数で使用されないその他の変数は、いずれも CategoricalPredictors 値でカウントされません。

    logical ベクトル

    true というエントリは、対応する予測子がカテゴリカルであることを意味します。ベクトルの長さは p です。

    文字行列行列の各行は予測子変数の名前です。名前は Tbl の名前に一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
    文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は Tbl の名前に一致しなくてはなりません。
    "all"すべての予測子がカテゴリカルです。

    既定では、予測子データが table (Tbl) の場合、fsrmrmr は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fsrmrmr はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。

    例: "CategoricalPredictors","all"

    例: CategoricalPredictors=[1 5 6 8]

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

    予測子内の欠損値を使用するかどうかを示すインジケーター。ランク付けに値を使用する場合は true、値を破棄する場合は false として指定します。

    fsrmrmr は、NaN'' (空の文字ベクトル)、"" (空の string)、<missing>、および <undefined> の値を欠損値と見なします。

    UseMissingtrue として指定した場合、fsrmrmr はランク付けに欠損値を使用します。カテゴリカル変数の場合、fsrmrmr は欠損値を追加のカテゴリとして扱います。連続変数の場合、fsrmrmr はビン化するために別個のビン内に NaN 値を配置します。

    UseMissingfalse として指定した場合、fsrmrmr はランク付けに欠損値を使用しません。fsrmrmr は変数の各ペアについて相互情報を計算するため、関数は行内の値が部分的に欠損している場合も行全体を破棄することはありません。fsrmrmr は、欠損値を含まないすべてのペアの値を使用します。

    例: "UseMissing",true

    例: UseMissing=true

    データ型: logical

    詳細レベル。非負の整数を指定します。Verbose の値は、コマンド ウィンドウに表示される診断情報の量を制御します。

    • 0 — fsrmrmr は診断情報を何も表示しません。

    • 1 — fsrmrmr は、相互情報の計算と予測子のランク付けにかかる経過時間を表示します。

    • ≥ 2 — fsrmrmr は、経過時間と相互情報の計算に関連する追加メッセージを表示します。情報の量は、Verbose 値が増加するにつれて増加します。

    例: Verbose=1

    データ型: single | double

    観測値の重み。スカラー値のベクトルまたは Tbl 内の変数の名前として指定します。関数は、X または Tbl の各行の観測値に、Weights の対応する値で重みを付けます。Weights のサイズは、X または Tbl の行数と同じでなければなりません。

    入力データを table Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトルが Tbl の列 W (Tbl.W) である場合、Weights="W" を指定します。

    fsrmrmr は、合計が 1 になるように重みを正規化します。Inf の重みはサポートされません。

    データ型: single | double | char | string

    出力引数

    すべて折りたたむ

    予測子の重要度順に並べ替えられた X または Tbl の予測子のインデックス。1 行 r 列の数値ベクトルとして返されます。r はランク付けされた予測子の数です。

    Tbl に応答変数が含まれている場合、関数は応答変数を除外して予測子にインデックスを付けます。たとえば、Tbl に列が 10 個あり、Tbl の 2 列目を応答変数として指定するとします。idx(3)5 である場合、3 番目に重要な予測子は Tbl の 6 列目です。

    fsrmrmrTbl 内の変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。たとえば、Tbl に列が 10 個あり、formula を使用して Tbl の最後の 5 列を予測子変数として指定するとします。idx(3)5 である場合、3 番目に重要な予測子は Tbl の 10 列目 (サブセットの 5 番目の予測子) です。

    予測子スコア。1 行 r 列の数値ベクトルとして返されます。r はランク付けされた予測子の数です。

    大きなスコア値は、対応する予測子が重要であることを示します。また、特徴量の重要度スコアの下落は、特徴選択の信頼度を表します。たとえば、ソフトウェアが確実に特徴量 x を選択している場合、次に最も重要な特徴量のスコア値が x のスコア値よりさらに小さくなります。

    • X を使用して予測子を指定するか、Tbl 内のすべての変数を予測子として使用する場合、scores 内の値の順序は、X または Tbl 内の予測子と同じ順序です。

    • Tbl 内の変数のサブセットを予測子として指定する場合、scores 内の値の順序は、サブセットと同じ順序です。

    たとえば、Tbl に列が 10 個あり、formula を使用して Tbl の最後の 5 列を予測子変数として指定するとします。この場合、score(3) には Tbl 内の 8 番目の列のスコア値が含まれます。これは、サブセットの 3 番目の予測子です。

    詳細

    すべて折りたたむ

    アルゴリズム

    すべて折りたたむ

    参照

    [1] Ding, C., and H. Peng. "Minimum redundancy feature selection from microarray gene expression data." Journal of Bioinformatics and Computational Biology. Vol. 3, Number 2, 2005, pp. 185–205.

    [2] Darbellay, G. A., and I. Vajda. "Estimation of the information by an adaptive partitioning of the observation space." IEEE Transactions on Information Theory. Vol. 45, Number 4, 1999, pp. 1315–1321.

    バージョン履歴

    R2022a で導入