fsrmrmr
構文
説明
fsrmrmr
は、回帰問題用の重要な予測子を識別するために MRMR アルゴリズムを使用して特徴量 (予測子) をランク付けします。
分類用に MRMR に基づく特徴量のランク付けを実行するには、fscmrmr
を参照してください。
は、予測子の重要度順 (重要度が高いものから低いものの順) に並べ替えられた予測子のインデックス idx
= fsrmrmr(Tbl
,ResponseVarName
)idx
を返します。table Tbl
には予測子変数と応答変数が含まれ、ResponseVarName
に応答値が格納されます。idx
を使用して、回帰問題のための重要な予測子を選択できます。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用して追加のオプションを指定します。たとえば、観測値の重みを指定できます。idx
= fsrmrmr(___,Name=Value
)
例
重要度を基準とした予測子のランク付け
モデル から 1000 個の観測値をシミュレートします。
は、標準正規の要素の 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)
最も重要な予測子の 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'} 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 {'winter storm' } {'SouthEast'} 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 {'winter storm' } {'West' } 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 {'equipment fault'} {'MidWest' } 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 {'severe storm' } {'West' } 18-Jun-2003 02:49:00 0 0 18-Jun-2003 10:54:00 {'attack' } {'NorthEast'} 16-Jul-2003 16:23:00 239.93 49434 17-Jul-2003 01:12:00 {'fire' } {'MidWest' } 27-Sep-2004 11:09:00 286.72 66104 27-Sep-2004 16:37:00 {'equipment fault'} {'SouthEast'} 05-Sep-2004 17:48:00 73.387 36073 05-Sep-2004 20:46:00 {'equipment fault'}
変数の中には、OutageTime
や RestorationTime
など、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")
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
fsMSE
が originalMSE
より小さくなっており、最も重要な生成された特徴量で学習させたバギング アンサンブルの方が元の特徴量で学習させたバギング アンサンブルよりも性能がわずかに高くなっていることを示しています。
入力引数
Tbl
— 標本データ
テーブル
標本データ。テーブルとして指定します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、Tbl
に応答変数用および観測値の重み用の追加列を含めることができます。応答変数は、数値ベクトルでなければなりません。
Tbl
に応答変数が含まれている場合にTbl
内の他の変数をすべて予測子として使用するには、ResponseVarName
を使用して応答変数を指定します。Tbl
に観測値の重みも含まれている場合、Weights
を使用して重みを指定できます。Tbl
に応答変数が含まれている場合にTbl
内の他の変数のサブセットのみを予測子として使用するには、formula
を使用して変数のサブセットを指定します。Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数とTbl
の行数は同じでなければなりません。
fsrmrmr
が Tbl
内の変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。名前と値の引数 CategoricalPredictors
と出力引数 idx
内の値は、関数がランク付けを行わない予測子はカウントしません。
Tbl
に応答変数が格納されている場合、fsrmrmr
は応答変数に含まれる NaN
の値を欠損値と見なします。fsrmrmr
は、応答変数に欠損値がある観測値を使用しません。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前を含む文字ベクトルまたは string スカラー
応答変数名。Tbl
内の変数の名前を含む文字ベクトルまたは string スカラーを指定します。
たとえば、応答変数が Tbl
の列 Y
(Tbl.Y
) である場合、ResponseVarName
を "Y"
として指定します。
データ型: char
| string
formula
— 応答変数および予測子変数サブセットの説明モデル
文字ベクトル | string スカラー
応答変数および予測子変数サブセットの説明モデル。"Y ~ x1 + x2 + x3"
という形式の文字ベクトルまたは string スカラーとして指定します。この形式では、Y
は応答変数を、x1
、x2
および x3
は予測子変数を表します。
予測子として Tbl
内の変数のサブセットを指定するには、式を使用します。式を指定した場合、fsrmrmr
は formula
に現れない Tbl
内の変数をランク付けしません。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
データ型: char
| string
X
— 予測子データ
数値行列
予測子データ。数値行列として指定します。X
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: fsrmrmr(Tbl,"y",CategoricalPredictors=[1 2 4],Weights="w")
は、Tbl
の y
列を応答変数、Tbl
の w
列を観測値の重みの格納先、Tbl
の 1 列目、2 列目、4 列目をカテゴリカル予測子 (y
列と w
列を削除) として指定します。
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | "all"
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は 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
UseMissing
— 予測子内の欠損値を使用するかどうかを示すインジケーター
false
(既定値) | true
予測子内の欠損値を使用するかどうかを示すインジケーター。ランク付けに値を使用する場合は true
、値を破棄する場合は false
として指定します。
fsrmrmr
は、NaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
、および <undefined>
の値を欠損値と見なします。
UseMissing
を true
として指定した場合、fsrmrmr
はランク付けに欠損値を使用します。カテゴリカル変数の場合、fsrmrmr
は欠損値を追加のカテゴリとして扱います。連続変数の場合、fsrmrmr
はビン化するために別個のビン内に NaN
値を配置します。
UseMissing
を false
として指定した場合、fsrmrmr
はランク付けに欠損値を使用しません。fsrmrmr
は変数の各ペアについて相互情報を計算するため、関数は行内の値が部分的に欠損している場合も行全体を破棄することはありません。fsrmrmr
は、欠損値を含まないすべてのペアの値を使用します。
例: "UseMissing",true
例: UseMissing=true
データ型: logical
Verbose
— 詳細レベル
0
(既定値) | 非負の整数
詳細レベル。非負の整数を指定します。Verbose
の値は、コマンド ウィンドウに表示される診断情報の量を制御します。
0 —
fsrmrmr
は診断情報を何も表示しません。1 —
fsrmrmr
は、相互情報の計算と予測子のランク付けにかかる経過時間を表示します。≥ 2 —
fsrmrmr
は、経過時間と相互情報の計算に関連する追加メッセージを表示します。情報の量は、Verbose
値が増加するにつれて増加します。
例: Verbose=1
データ型: single
| double
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | スカラー値のベクトル | Tbl
内の変数の名前
観測値の重み。スカラー値のベクトルまたは Tbl
内の変数の名前として指定します。関数は、X
または Tbl
の各行の観測値に、Weights
の対応する値で重みを付けます。Weights
のサイズは、X
または Tbl
の行数と同じでなければなりません。
入力データをテーブル Tbl
として指定した場合、Weights
は数値ベクトルが含まれている Tbl
内の変数の名前にすることができます。この場合、Weights
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトルが Tbl
の列 W
(Tbl.W
) である場合、Weights="W"
を指定します。
fsrmrmr
は、合計が 1 になるように重みを正規化します。
データ型: single
| double
| char
| string
出力引数
idx
— 予測子の重要度順に並べ替えられた予測子のインデックス
数値ベクトル
scores
— 予測子スコア
数値ベクトル
予測子スコア。1 行 r 列の数値ベクトルとして返されます。r はランク付けされた予測子の数です。
大きなスコア値は、対応する予測子が重要であることを示します。また、特徴量の重要度スコアの下落は、特徴選択の信頼度を表します。たとえば、ソフトウェアが確実に特徴量 x を選択している場合、次に最も重要な特徴量のスコア値が x のスコア値よりさらに小さくなります。
たとえば、Tbl
に列が 10 個あり、formula
を使用して Tbl
の最後の 5 列を予測子変数として指定するとします。この場合、score(3)
には Tbl
内の 8 番目の列のスコア値が含まれます。これは、サブセットの 3 番目の予測子です。
詳細
相互情報
2 つの変数間の相互情報は、ある変数の不確かさの度合いが、他の変数がわかるとどの程度削減できるかを測定します。
離散確率変数 X と Z の相互情報 I は、
として定義されます。X と Z が独立している場合、I は 0 と等しくなります。X と Z が同じ確率変数である場合、I は X のエントロピーと等しくなります。
関数 fsrmrmr
は、この定義を使用して、カテゴリカル (離散) 変数および連続変数の両方の相互情報の値を計算します。応答を含む各連続変数について、fsrmrmr
は、変数を 256 個のビンか、それが 256 個より少ない場合は変数内の独自の値の数に離散化させます。関数は、適応アルゴリズムを使用して変数の各ペアに最適な二変量ビンを求めます[2]。
アルゴリズム
Minimum Redundancy Maximum Relevance (MRMR) アルゴリズム
MRMR アルゴリズム[1]は、相互に、最大に類似していない最適な特徴量のセットを求め、応答変数を効率的に表すことができます。このアルゴリズムにより、特徴セットの冗長性が最小化され、応答変数に対する特徴量セットの関連性が最大化されます。変数の相互情報を使用して、冗長性と関連性、つまり特徴量のペアワイズ相互情報と特徴量および応答の相互情報が定量化されます。このアルゴリズムを回帰問題に使用できます。
MRMR アルゴリズムの目的は、応答変数 y に関して VS (S の関連性) を最大化し、WS (S の冗長性) を最小化する特徴量の最適なセット S を検出することです。ここで、VS と WS は相互情報 I を使用して定義されます。
|S| は S 内の特徴量の数です。
最適なセット S の検出には、すべての 2|Ω| の組み合わせを考慮することが必要です。ここで、Ω は特徴セット全体です。代わりに、MRMR アルゴリズムは前方追加方式により特徴量をランク付けします。これには、Mutual Information Quotient (MIQ) の値を使用した O(|Ω|·|S|) 計算が必要です。
ここで Vx と Wx は、それぞれ特徴量の関連性と冗長性です。
関数 fsrmrmr
は MRMR アルゴリズムを使用して Ω 内のすべての特徴量をランク付けし、idx
(特徴量の重要度順に並べ替えられた特徴量のインデックス) を返します。したがって、計算コストは O(|Ω|2) となります。関数は、ヒューリスティックなアルゴリズムを使用して特徴量の重要度を定量化し、スコア (scores
) を返します。大きなスコア値は、対応する予測子が重要であることを示します。また、特徴量の重要度スコアの下落は、特徴選択の信頼度を表します。たとえば、ソフトウェアが確実に特徴量 x を選択している場合、次に最も重要な特徴量のスコア値が x のスコア値よりさらに小さくなります。出力を使用して、特徴量の特定の数の最適なセット S を検出します。
fsrmrmr
は次のように特徴量をランク付けします。
関連性が最も高い特徴量 を選択します。選択した特徴量を空のセット S に追加します。
S、Sc の補数の関連性が非ゼロで冗長性がゼロである特徴量を検出します。
関連性が非ゼロで冗長性がゼロである特徴量が Sc に含まれていない場合、ステップ 4 に進みます。
それ以外の場合、関連性が最も高い特徴量 を選択します。選択した特徴量をセット S に追加します。
Sc のすべての特徴量について冗長性がゼロではなくなるまでステップ 2 を繰り返します。
Sc の関連性が非ゼロで冗長性が非ゼロの、MIQ の最大値をもつ特徴量を選択し、選択した特徴量をセット S に追加します。
Sc のすべての特徴量について関連性がゼロになるまでステップ 4 を繰り返します。
関連性がゼロである特徴量を無作為順で S に追加します。
ソフトウェアでステップ内に記述されている条件を満たす特徴量を検出できない場合、任意のステップを省略できます。
参照
[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 で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)