主要内容

このページの翻訳は最新ではありません。ここをクリックして,英语の最新版を参照してください。

fscmrmr

最小冗余最大相关性(MRMR)アルゴリズムを使用した分类用の特徴量のランク付け

说明

idx.= fscmrmr(TBLResponseVarNameは,MRMRアルゴリズムを使用して特徴量(予测子)をランク付けします。テーブルTBLには予测子変数と応答変数が含まれていて,ResponseVarNameTBL内の応答変数の名前です。关数はidx.を返します。これには予测子の重要度顺に并べ替えられた予测子のインデックスが含まれます。idx.を使用して,分类问题用の重要な予测子を选択できます。

idx.= fscmrmr(TBL公式は,公式を使用してTBL内の変数を考虑するために応答変数と予测子変数を指定します。

idx.= fscmrmr(TBLyは,応答変数yを使用してTBL内の予测子をランク付けします。

idx.= fscmrmr(Xyは,応答変数yを使用してX内の予测子をランク付けします。

idx.= fscmrmr(___名称,价值では,前の构文におけるいずれかの入力引数の组み合わせに加えて,1つ以上の名前と値のペアの引数を使用して追加のオプションを指定します。たとえば,事前确率と観测値の重みを指定できます。

[idx.得分] = fscmrmr(___は,予测子スコア得分も返します。大きなスコア値は,対応する予测子が重要であることを示します。

すべて折りたたむ

标本データを読み込みます。

加载电离层

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

[IDX,分数] = fscmrmr(X,Y);

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

栏(分数(IDX))xlabel(“预测排名”)ylabel(“预测变量重要性评分”

最も重要な予测子の1番目と2番目の间のスコアの下落は大きいですが,6番目の予测子の后は比较的小さいです。重要度スコアの下落は,特徴选択の信頼度を表します。したがって,大きな下落は,ソフトウェアが确実に最も重要な予测子を选択していることを示します。小さな下落は,予测子の重要度の差が有意ではないことを示します。

上位5つの最も重要な予测子を选択します。Xにおけるこれらの予测子の列を求めます。

IDX(1:5)
ans =.1×55 4 1 7 24

Xの5列目が,yの最も重要な予测子です。

fscmrmrを使用して重要な予测子を検出します。次に,testckfold.を使用して,完全分类モデル(すべての予测子を使用する)と上位5つの重要な予测子を使用する次元削减されたモデルの精度を比较します。

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

加载census1994

census1994内のテーブルadultdataには,个人の年收が$ 50,000个を超えるかどうかを予测するための,米国势调查局の人口统计データが含まれています。テーブルの最初の3行を表示します。

头(adultdata,3)
ANS =3×15表年龄workClass fnlwgt教育education_num婚姻状况职业关系种族性别capital_gain capital_loss hours_per_week NATIVE_COUNTRY工资___ ________________ __________ _________ _____________ __________________ _________________ _____________ _____ ____ ____________ ____________ ______________ ______________ ______ 39国政务77516个学士13未婚ADM-文书不在位家庭白人男性2174 0 40美国-美国<= 50K 50自EMP-未INC 83311所大学13已婚-CIV-配偶Exec的-管理夫白人男性0 0 13美利坚-美国<= 50K 38私人2.1565e + 05 HS-9毕业离婚处理程序,清洁工不在位家庭白人男性0 0 40美国 - 美国<= 50K

fscmrmrの出力引数には,关数によってランク付けされた変数のみが含まれます。テーブルを关数に渡す前に,出力引数の顺序がテーブルの顺序と一致するように,応答変数と重みなどのランク付けを行わない変数をテーブルの最后に移动します。

テーブルadultdataでは,3番目の列fnlwgt.はサンプルの重みで,最后の列薪水は応答変数です。关数movevarsを使用してfnlwgt.薪水の左侧に移动します。

adultdata = movevars(adultdata,'fnlwgt''前''薪水');头(adultdata,3)
ANS =3×15表年龄workClass教育education_num婚姻状况职业关系种族性别capital_gain capital_loss hours_per_week NATIVE_COUNTRY fnlwgt工资___ ________________ _________ _____________ __________________ _________________ _____________ _____ ____ ____________ ____________ ______________ ______________ __________ ______ 39国政务学士13未婚ADM-文书不在位家庭白人男性21740 40美国-美国77516 <= 50K 50自EMP-未INC大学13已婚-CIV-配偶Exec的-管理夫白人男性0 0 13美利坚-美国83311 <= 50K 38私人HS-研究所9离婚处理程序的清洁剂未在家庭白人男性0 0 40美国,美国2.1565e + 05 <= 50K

adultdataの予测子をランク付けします。列薪水を応答変数として指定します。

[IDX,分数] = fscmrmr(adultdata,'薪水'“权重”'fnlwgt');

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

栏(分数(IDX))xlabel(“预测排名”)ylabel(“预测变量重要性评分”)xticklabels(strrep(adultdata.Properties.VariableNames(IDX),'_''\ _'))xtickangle(45)

上位5つの重要な予测子は,关系capital_loss资本收益教育および每周几小时です。

すべての予测子を使用して学习した分类木の精度を,上位5つの重要な予测子を使用して学习した分类木の精度と比较します。

既定のオプションを使用して,分类木テンプレートを作成します。

C = templateTree;

すべての予测子を含むように表TBL1を定义し,上位5つの重要な予测子を含むようにテーブルTBL2を定义します。

TBL1 = adultdata(:,adultdata.Properties.VariableNames(IDX(1:13)));TBL2 = adultdata(:,adultdata.Properties.VariableNames(IDX(1:5)));

分类木テンプレートと2つのテーブルを关数testckfold.に渡します。关数は,反复交差検证により2つのモデルの精度を比较します。“另类”,“大”を指定して,すべての予测子を使用するモデルの精度は,5つの予测子を使用するモデルの精度と同程度であるという帰无仮说を検定します。'测试''5x2t'(5行2列のペアT.検定)または'10x10t'(10行10列の反复交差検证T.検定)である场合,“更大”オプションを使用できます。

[H,P] = testckfold(C,C,TBL1,TBL2,adultdata.salary,“权重”,adultdata.fnlwgt,'选择'“更大”'测试''5x2t'
h =逻辑0.
p值= 0.9969

Hが0であり,P.値がほぼ1であるということは,帰无仮说が弃却できなかったことを示します0.5つの予测子を使用するモデルを使用しても,すべての予测子を使用するモデルと比较して,精度が失われる结果にはなりません。

これで,选択した予测子を使用して分类木を学习させます。

MDL = fitctree(adultdata,'工资〜+关系+ capital_loss + capital_gain教育+ hours_per_week'......“权重”,adultdata.fnlwgt)
MDL = ClassificationTree PredictorNames:{1×5细胞} ResponseName: '工资' CategoricalPredictors:[1 2]的类名:[<= 50K> 50K] ScoreTransform: '无' NumObservations:32561的属性,方法

入力数

すべて折りたたむ

标本データ。テーブルとして指定します。文字ベクトルの细胞配列ではない细胞配列と复数列の変数は使用できません。

TBLの各行は1つの観测値に,各列は1つの予测子変数に対応します。必要に応じて,TBLに応答変数用および観测値の重み用の追加列を含めることができます。

応答変数は,分类配列,文字配列,字符串配列的,逻辑的ベクトル,数値ベクトル,または文字ベクトルの细胞配列にすることができます。応答変数が文字配列である场合,応答変数の各要素は配列の1つの行に対応しなければなりません。

  • TBLに応答変数が含まれている场合にTBL内の他の変数をすべて予测子として使用するには,ResponseVarNameを使用して応答変数を指定します。TBLに観测値の重みも含まれている场合,重量を使用して重みを指定できます。

  • TBLに応答変数が含まれている场合にTBL内の他の変数のサブセットのみを予测子として使用するには,公式を使用して変数のサブセットを指定します。

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

fscmrmrTBL内の変数のサブセットを予测子として使用する场合,关数はサブセットのみを使用して予测子にインデックスを作成します。名前と値のペアの引数'CategoricalPredictors'と出力引数idx.内の値は,关数がランク付けを行わない予测子はカウントしません。

fscmrmrは,応答変数のTBLに含まれている''(空の文字ベクトル),(空の字符串),<缺失>,および<未定义>の値を欠损値と见なします。fscmrmrは,応答変数に欠损値がある観测値を使用しません。

データ型:桌子

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

たとえば,応答変数がTBLの列ytbl.y.)である场合,ResponseVarName'是'として指定します。

データ型:char|细绳

応答変数および予测子変数サブセットの说明モデル。'Y〜X1 + X2 + X3'という形式の文字ベクトルまたは串スカラーを指定します。この式では,yは応答変数を,X1X2およびX3は予测子変数を表します。

予测子としてTBL内の変数のサブセットを指定するには,式を使用します。式を指定した场合,fscmrmr公式に现れないTBL内の変数をランク付けしません。

式の変数名はTBLの変数名(tbl.properties.variablenames.)であり,有效なMATLAB®识别子でなければなりません。详细については,ヒントを参照してください。

データ型:char|细绳

応答変数。数値ベクトル,分类ベクトル,逻辑ベクトル,文字配列,字符串配列,または文字ベクトルの细胞配列として指定します。yの各行は,Xの対応する行のラベルを表します。

fscmrmryに含まれている''(空の文字ベクトル),(空の字符串),<缺失>および<未定义>値を欠损値と见なします。fscmrmrは,yに対し欠损値がある観测値を使用しません。

データ型:单身的|双倍的|分类|逻辑|char|细绳|细胞

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

データ型:单身的|双倍的

名称と値のペアペアの数

オプションの名称,价值引数のコンマ区切りペアを指定します。姓名は引数名で,价值は対応する値です。姓名は引用符で囲まなければなりません。名1,值1,...,NameN,值Nのように,复数の名前と値のペアの引数を,任意の顺番で指定できます。

例:'CategoricalPredictors',[1 2], '冗长',2は,最初の2つの予测子変数をカテゴリカル変数として指定し,详细レベルを2に指定します。

カテゴリカル予测子のリスト。'CategoricalPredictors'と次の表のいずれかの値から构成されるコンマ区切りのペアとして指定します。

说明
正の整数のベクトル ベクトルの各エントリは,カテゴリカル変数が含まれている予测子データ(XまたはTBL)の列に対応するインデックス値です。
逻辑ベクトル 真的というエントリは,予测子データ(XまたはTBL)の対応する列がカテゴリカル変数であることを意味します。
文字行列 行列の各行は予测子変数の名前です。名前はTBLの名前に一致しなくてはなりません。文字行列の各行が同じ长さになるように,名前を余分な空白で埋めてください。
文字ベクトルの细胞配列または串配列 配列の各要素は予测子変数の名前です。名前はTBLの名前に一致しなくてはなりません。
'全部' すべての予测子がカテゴリカルです。

既定では,予测子データがテーブル(TBL)内にある场合,fscmrmrは,その変数が逻辑ベクトル,顺序付けのない分类ベクトル,文字配列,字符串配列または文字ベクトルの细胞配列のいずれかである场合に,変数を分类であると见なします。予测子データが行列(X)である场合,fscmrmrはすべての予测子が连続的であると见なします。他の予测子をカテゴリカル予测子として指定するには,名前と値のペアの引数'CategoricalPredictors'を使用してそれらを指定します。

fscmrmrTBL内の変数のサブセットを予测子として使用する场合,关数はサブセットのみを使用して予测子にインデックスを作成します。'CategoricalPredictors'値は,关数がランク付けしない予测子をカウントしません。

例:'CategoricalPredictors', '所有'

データ型:单身的|双倍的|逻辑|char|细绳|细胞

ランク付けに使用するクラスの名前。'classnames'と分类配列,文字配列,字符串配列的,逻辑的ベクトル,数値ベクトル,または文字ベクトルの细胞配列から构成されるコンマ区切りのペアとして指定します。Classnames.のデータ型はyまたはTBL内の応答変数と同じでなければなりません。

Classnames.が文字配列の场合,各要素は配列の1つの “行” に対応しなければなりません。

'classnames'の使用目的は次のとおりです。

  • クラスの顺序に対応する事先的の次元の顺序を指定する。

  • ランク付け用にクラスのサブセットを选択する。たとえば,yに含まれているすべての异なるクラス名の集合が{'a','b','c'}であるとします。クラス'一种'および'C'のみの観测値を使用して予测子をランク付けするには,'类名',{ '一个', 'C'}を指定します。

'classnames'の既定値は,yまたはTBL内の応答変数に含まれているすべての异なるクラス名の集合です。応答変数に顺序がある场合,既定値'classnames'には数学的顺序が设定されています。それ以外の场合,既定値にはアルファベット顺が设定されています。

例:'classnames',{'b','g'}

データ型:分类|char|细绳|逻辑|单身的|双倍的|细胞

各クラスの事前确率。'事先的'と以下のいずれかで构成されるコンマ区切りのペアとして指定します。

  • 文字ベクトルまたは串スカラー。

    • '经验'yまたはTBLの応答変数のクラスの频度からクラス确率を决定します。観测値の重みを渡す场合,fscmrmrはこの重みを使用してクラス确率を计算します。

    • '制服'はすべてのクラス确率を均等に设定します。

  • ベクトル(クラスごとに1つのスカラー値)。'事先的'の対応する要素についてクラスの顺序を指定するには,名前と値のペアの引数Classnames.も指定します。

  • 次の2つのフィールドがある构造体S.

    • S.Classnames.には,yまたはTBLの応答変数と同じ型の変数のクラス名が格纳されます。

    • S.Classprobs.には,対応する确率のベクトルが格纳されます。

“权重”'事先的'の両方に値を设定する场合,fscmrmrは,合计がクラスの事前确率の値になるように各クラスの重みを正规化します。

例:“前”,“均匀”

データ型:char|细绳|单身的|双倍的|塑造

予测子内の欠损値を使用するか破弃するかを示すインジケーター。'UseMissing'と,ランク付けのために予测子内の欠损値を使用する(真的)または破弃する(错误的)のいずれかから构成されるコンマ区切りのペアとして指定します。

fscmrmrは,''(空の文字ベクトル),(空の字符串),<缺失>,および<未定义>の値を欠损値と见なします。

'UseMissing',真を指定した场合,fscmrmrはランク付けに欠损値を使用します。カテゴリカル変数の场合,fscmrmrは欠损値を追加のカテゴリとして扱います。连続変数の场合,fscmrmrはビン化するために别个のビン内に値を配置します。

'UseMissing',假を指定した场合,fscmrmrはランク付けに欠损値を使用しません。fscmrmrは変数の各ペアについて相互情报を计算するため,关数は行内の値が部分的に欠损している场合も行全体を破弃することはありません。fscmrmrは,欠损値を含まないすべてのペアの値を使用します。

例:'UseMissing',真

データ型:逻辑

详细レベル。'verbose'と非负の整数値から构成されるコンマ区切りのペアとして指定します。verbの値は,コマンドウィンドウに表示される诊断情报の量を制御します。

  • 0 -fscmrmrは诊断情报を何も表示しません。

  • 1 -fscmrmrは,相互情报の计算と予测子のランク付けにかかる経过时间を表示します。

  • ≥2 -fscmrmrは,経过时间と相互情报の计算に关连する追加メッセージを表示します。情报の量は,'verbose'値が増加するにつれて増加します。

例:'冗长',1

データ型:单身的|双倍的

観测値の重み。“权重”とスカラー値のベクトルまたはTBL内の変数の名前から构成されるコンマ区切りのペアとして指定します。关数は,XまたはTBLの各行の観测値に,重量の対応する値で重みを付けます。重量のサイズは,XまたはTBLの行数と同じでなければなりません。

入力データをテーブルTBLとして指定した场合,重量は数値ベクトルが含まれているTBL内の変数の名前にすることができます。この场合,重量には文字ベクトルまたは串スカラーを指定しなければなりません。たとえば,重みベクトルがTBLの列W.TBL.W.)である场合,'权重,' W”を指定します。

fscmrmrは,合计がクラスの事前确率の値になるように各クラスの重みを正规化します。

データ型:单身的|双倍的|char|细绳

出力引数

すべて折りたたむ

予测子の重要度顺に并べ替えられたXまたはTBLの予测子のインデックス0.1行ř列の数値ベクトルとして返されます.Rはランク付けされた予测子の数です。

fscmrmrTBL内の変数のサブセットを予测子として使用する场合,关数はサブセットのみを使用して予测子にインデックスを作成します。たとえば,TBLに列が10个あり,公式を使用してTBLの最后の5列を予测子変数として指定するとします。IDX(3)5.である场合,3番目に重要な予测子はTBLの10列目(サブセットの5番目の予测子)です。

予测子スコア0.1行ř列の数値ベクトルとして返されます.Rはランク付けされた予测子の数です。

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

  • Xを使用して予测子を指定するか,TBL内のすべての変数を予测子として使用する场合,得分内の値の顺序は,XまたはTBL内の予测子と同じ顺序です。

  • TBL内の変数のサブセットを予测子として指定する场合,得分内の値の顺序は,サブセットと同じ顺序です。

たとえば,TBLに列が10个あり,公式を使用してTBLの最后の5列を予测子変数として指定するとします。この场合,得分(3)にはTBL内の8番目の列のスコア値が含まれます。これは,サブセットの3番目の予测子です。

详细

すべて折りたたむ

相互情报

2つの変数间の相互情报は,ある変数の不确かさの度合いが,他の変数がわかるとどの程度削减できるかを测定します。

离散确率変数Xとžの相互情报は我,

一世 X Z. = σ. 一世 j P. X = X 一世 Z. = Z. j 日志 P. X = X 一世 Z. = Z. j P. X = X 一世 P. Z. = Z. j

として定义されます.XとŽが独立している场合,我は0と等しくなります.XとŽが同じ确率変数である场合,我はXのエントロピーと等しくなります。

关节fscmrmrは,この定义を使用して,カテゴリカル(离散)変数および连続変数の両方の相互情报の値を计算します。fscmrmrは,连続変数を256个のビンか,それが256个より少ない场合は変数内の独自の値の数に离散化させます。关数は,适応アルゴリズムを使用して変数の各ペアに最适な二変量ビンを求めます[2]

ヒント

  • 入力数公式を使用して応答変数と予测子変数を指定する场合,式の変数名はTBLの変数名(tbl.properties.variablenames.)であり,かつ有效なMATLAB识别子でなければなりません。

    关节isvarnameを使用してTBLの変数名を検证できます。次のコードは,有效な変数名をもつ各変数の逻辑1真的)を返します。

    cellfun(@ isvarname,Tbl.Properties.VariableNames)
    TBLの変数名が有效ではない场合,关数matlab.lang.makevalidname.を使用してそれらを変换します。
    Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);

アルゴリズム

すべて折りたたむ

最小冗余最大相关性(MRMR)アルゴリズム

MRMRアルゴリズム[1]は,相互に,最大に类似していない最适な特徴量のセットを求め,応答変数を效率的に表すことができます。このアルゴリズムにより,特徴セットの冗长性が最小化され,応答変数に対する特徴量セットの关连性が最大化されます。変数の相互情报を使用して,冗长性と关连性,つまり特徴量のペアワイズ相互情报と特徴量および応答の相互情报が定量化されます。このアルゴリズムを分类问题に使用できます。

MRMRアルゴリズムの目的は,応答変数ýに关してVS.(Sの关连性)を最大化し,WS.(Sの冗长性)を最小化する特徴量の最适なセット小号を検出することです。ここで,VS.とw ^S.相互情报我を使用して定义されます。

V. S. = 1 | S. | σ. X S. 一世 X y

W. S. = 1 | S. | 2 σ. X Z. S. 一世 X Z.

| S |は小号内の特徴量の数です。

最适なセット小号の検出には,すべての2|Ω|の组み合わせを考虑することが必要です。ここで,Ωは特徴セット全体です。代わりに,MRMRアルゴリズムは前方追加方式により特徴量をランク付けします。これには,互信息商数(MIQ)の値を使用したO(|Ω|·| S |)计算が必要です。

MIQ. X = V. X W. X

ここでVXとw ^Xは,それぞれ特徴量の关连性と冗长性です。

V. X = 一世 X y

W. X = 1 | S. | σ. Z. S. 一世 X Z.

关节fscmrmrはMRMRアルゴリズムを使用してΩ内のすべての特徴量をランク付けし,idx.(特徴量の重要度顺に并べ替えられた特徴量のインデックス)を返します。したがって,计算コストはO(|Ω|2となります。关数は,ヒューリスティックなアルゴリズムを使用して特徴量の重要度を定量化し,分数を返します。大きなスコア値は,対応する予测子が重要であることを示します。また,特徴量の重要度スコアの下落は,特徴选択の信頼度を表します。たとえば,ソフトウェアが确実に特徴量Xを选択している场合,次に最も重要な特徴量のスコア値がXのスコア値よりさらに小さくなります。出力を使用して,特徴量の特定の数の最适なセット小号を検出します。

fscmrmrは次のように特徴量をランク付けします。

  1. 关连性が最も高い特徴量 最大限度 X ω. V. X を选択します。选択した特徴量を空のセット小号に追加します。

  2. S,SCの补数の关连性が非ゼロで冗长性がゼロである特徴量を検出します。

    • 关连性が非ゼロで冗长性がゼロである特徴量が小号Cに含まれていない场合,ステップ4に进みます。

    • それ以外の场合,关连性が最も高い特徴量 最大限度 X S. C W. X = 0. V. X を选択します。选択した特徴量をセット小号に追加します。

  3. S.Cのすべての特徴量について冗长性がゼロではなくなるまでステップ2を缲り返します。

  4. S.Cの关连性が非ゼロで冗长性が非ゼロの,MIQの最大値をもつ特徴量を选択し,选択した特徴量をセット小号に追加します。

    最大限度 X S. C MIQ. X = 最大限度 X S. C 一世 X y 1 | S. | σ. Z. S. 一世 X Z.

  5. S.Cのすべての特徴量について关连性がゼロになるまでステップ4を缲り返します。

  6. 关连性がゼロである特徴量を无作为顺で小号に追加します。

ソフトウェアでステップ内に记述されている条件を満たす特徴量を検出できない场合,任意のステップを省略できます。

互换性の考虑事项

すべて展开する

R2020aでの动作変更

参照

[1]丁,C.,和H.彭。“从微阵列基因表达数据的最小冗余特征选择”。期刊生物信息学和计算生物学。卷。3,第2号,2005年,页185-205。

[2] Darbellay,G. A.,和I. Vajda。“的由观察空间的自适应分区的信息估计。”IEEE交易信息理论。卷。45,第4号,1999年,第1315至1321年。

R2019bで导入