Main Content

relieff

ReliefF または RReliefF アルゴリズムを使用した予測子の重要度のランク付け

説明

[idx,weights] = relieff(X,y,k) は、ReliefF または RReliefF アルゴリズムのいずれかと k 最近傍法を使用して、予測子をランク付けします。入力行列 X には予測子変数が含まれており、ベクトル y には応答ベクトルが含まれています。関数は、最も重要な予測子のインデックスが含まれている idx と、予測子の重みが含まれている weights を返します。

y が数値である場合、既定では relieff は回帰用の RReliefF 分析を実行します。それ以外の場合、relieff はクラスごとに k 最近傍法を使用して、分類用の ReliefF 分析を実行します。ReliefF および RReliefF の詳細については、アルゴリズムを参照してください。

[idx,weights] = relieff(X,y,k,Name,Value) では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば 'updates',10 は、重みの計算用に無作為選択する観測値の個数を 10 に設定します。

すべて折りたたむ

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

load fisheriris

10 個の最近傍を使用して、重要な予測子を求めます。

[idx,weights] = relieff(meas,species,10)
idx = 1×4

     4     3     1     2

weights = 1×4

    0.1399    0.1226    0.3590    0.3754

idx は、ランク順に予測子の番号を示します。重要度が最も高いのは 4 番目の予測子、最も低いのは 2 番目の予測子です。weights は、予測子と同じ順序で重みの値を与えます。1 番目の予測子の重みは 0.1399、4 番目の予測子の重みは 0.3754 です。

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

load ionosphere

10 個の最近傍を使用した重要度に基づいて予測子をランク付けします。

[idx,weights] = relieff(X,Y,10);

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

bar(weights(idx))
xlabel('Predictor rank')
ylabel('Predictor importance weight')

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

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

idx(1:5)
ans = 1×5

    24     3     8     5    14

X の 24 列目が、Y の最も重要な予測子です。

relieff を使用して、カテゴリカル予測子をランク付けします。

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

load carbig

カテゴリカル予測子変数 MfgModel および Origin を数値に変換し、結合して入力行列にします。応答変数 MPG を指定します。

X = [grp2idx(Mfg) grp2idx(Model) grp2idx(Origin)];
y = MPG;

10 個の最近傍を使用し、X 内のデータをカテゴリカルとして扱って、予測子変数のランクと重みを求めます。

[idx,weights] = relieff(X,y,10,'categoricalx','on')
idx = 1×3

     2     3     1

weights = 1×3

   -0.0019    0.0501    0.0114

MPG の予測では、予測子 Model が最も重要です。変数 Mfg の重みは負になっているので、MPG の予測子として適切ではないことがわかります。

入力引数

すべて折りたたむ

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

データ型: single | double

応答データ。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列を指定します。

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

最近傍の個数。正の整数スカラーを指定します。

データ型: single | double

名前と値の引数

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

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

例: relieff(X,y,5,'method','classification','categoricalx','on') は、5 つの最近傍を指定し、応答変数と予測子データをカテゴリカルとして扱います。

重みを計算する方法。'method''regression' または 'classification' のいずれかから構成されるコンマ区切りのペアとして指定します。y が数値である場合、既定の方法は 'regression' です。それ以外の場合、既定は 'classification' です。

例: 'method','classification'

各クラスの事前確率。'prior' と次の表の値から構成されるコンマ区切りのペアとして指定します。

説明
'empirical'クラスの確率は、y 内のクラスの頻度から決定されます。
'uniform'すべてのクラスの確率が均等になります。
数値ベクトル異なるグループ名ごとに 1 つずつ値が存在します。
構造体

構造体 S には 2 つのフィールドがあります。

  • S.group には、y と同じ型の変数としてグループ名が格納されます。

  • S.prob には、対応する確率のベクトルが格納されます。

例: 'prior','uniform'

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

重みの計算用に無作為選択する観測値の個数。'updates''all' または正の整数スカラーのいずれかから構成されるコンマ区切りのペアとして指定します。既定では、relieff はすべての観測値を使用します。

例: 'updates',25

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

カテゴリカル予測子のフラグ。'categoricalx''on' または 'off' のいずれかから構成されるコンマ区切りのペアとして指定します。'on' を指定した場合、relieffX 内のすべての予測子をカテゴリカルとして扱います。それ以外の場合は、X 内のすべての予測子が数値として扱われます。数値予測子とカテゴリカル予測子を混在させることはできません。

例: 'categoricalx','on'

距離スケール係数。'sigma' と正の数値スカラーから構成されるコンマ区切りのペアとして指定します。観測値 i について、最近傍 j が予測子の重みに与える影響に e(rank(i,j)/sigma)2 が乗算されます。rank(i,j) は、距離順に並べ替えられた i 番目の観測値の最近傍のうち j 番目の観測値の位置です。既定値は、分類の場合は Inf (すべての最近傍が同じ影響を与えます)、回帰の場合は 50 です。

例: 'sigma',20

データ型: single | double

出力引数

すべて折りたたむ

予測子の重要度順に並べ替えられた X の予測子のインデックス。数値ベクトルとして返されます。たとえば、idx(3)5 である場合、3 番目に重要な予測子は X の 5 列目です。

データ型: double

予測子の重み。数値ベクトルとして返されます。weights 内の値の順序は X 内の予測子と同じです。weights の範囲は –11 であり、重要な予測子には大きい正の重みが割り当てられます。

データ型: double

ヒント

  • 通常、予測子のランクと重みは k に依存します。k を 1 に設定した場合、ノイズが多いデータでは推定値の信頼性が低くなる可能性があります。kX 内の観測値の個数 (行数) と同じ程度の値に設定した場合、relieff は重要な予測子を見つけられない可能性があります。k = 10 から始めて、さまざまな値の k について relieff のランクと重みの安定性および信頼性を調べることができます。

  • relieff は、NaN 値がある観測値を削除します。

アルゴリズム

すべて折りたたむ

ReliefF

ReliefF は、y がマルチクラスのカテゴリカル変数である場合に予測子の重みを求めます。このアルゴリズムでは、同じクラスの近傍に対して異なる値を与える予測子にペナルティを課し、異なるクラスの近傍に対して異なる値を与える予測子を優遇します。

ReliefF では、はじめに予測子の重み Wj をすべて 0 に設定します。そして、無作為な観測値 xr を反復的に選択し、各クラスについて xr に対する k 最近傍観測値を探索し、各最近傍 xq について予測子 Fj の重みをすべて次のように更新します。

xr と xq が同じクラスに属している場合

Wji=Wji1Δj(xr,xq)mdrq.

xr と xq が異なるクラスに属している場合

Wji=Wji1+pyq1pyrΔj(xr,xq)mdrq.

  • Wji は、i 番目の反復ステップにおける予測子 Fj の重みです。

  • pyr は、xr が属するクラスの事前確率です。pyq は、xq が属するクラスの事前確率です。

  • m は、'updates' によって指定された反復回数です。

  • Δj(xr,xq) は、観測値 xr と xq の間における予測子 Fj の値の差です。観測値 xr に対する j 番目の予測子の値を xrj と表し、観測値 xq に対する j 番目の予測子の値を xqj と表します。

    • 離散的な Fj の場合

      Δj(xr,xq)={0,xrj=xqj1,xrjxqj.

    • 連続的な Fj の場合

      Δj(xr,xq)=|xrjxqj|max(Fj)min(Fj).

  • drq は、次の形式の距離関数です。

    drq=d˜rql=1kd˜rl.

    距離は次のようにスケーリングされます。

    d˜rq=e(rank(r,q)/sigma)2

    rank(r,q) は、距離順に並べ替えられた r 番目の観測値の最近傍のうち q 番目の観測値の位置です。k は、k によって指定された最近傍の個数です。スケーリングは、'sigma' を指定することにより変更できます。

RReliefF

RReliefF は、連続的な y に対して機能します。ReliefF と同じように、RReliefF も、同じ応答値をもつ近傍に対して異なる値を与える予測子にペナルティを課し、異なる応答値をもつ近傍に対して異なる値を与える予測子を優遇します。ただし RReliefF では、最終的な予測子の重みを計算するための中間的な重みを使用します。

2 つの最近傍について、次のように仮定します。

  • Wdy は、応答 y について異なる値をもつ重みです。

  • Wdj は、予測子 Fj について異なる値をもつ重みです。

  • Wdydj は、予測子 Fj について異なる値および異なる応答値をもつ重みです。

RReliefF では、はじめに重み Wdy、WdjWdydj および Wj を 0 に設定します。そして、無作為な観測値 xr を反復的に選択し、xr に対する k 最近傍観測値を探索し、各最近傍 xq についてすべての中間的な重みを次のように更新します。

Wdyi=Wdyi1+Δy(xr,xq)drq.

Wdji=Wdji1+Δj(xr,xq)drq.

Wdydji=Wdydji1+Δy(xr,xq)Δj(xr,xq)drq.

  • 添字 i および i-1 は、反復ステップ番号を表します。m は、'updates' によって指定された反復回数です。

  • Δy(xr,xq) は、観測値 xr と xq の間における連続的な応答 y の値の差です。観測値 xr に対する応答の値を yr と表し、観測値 xq に対する応答の値を yq と表します。

    Δy(xr,xq)=|yryq|max(y)min(y).

  • 関数 Δj(xr,xq) および drq は、ReliefFの場合と同じです。

RReliefF は、中間的な重みをすべて完全に更新した後で、予測子の重み Wj を計算します。

Wj=WdydjWdyWdjWdydjmWdy.

詳細は、[2]を参照してください。

参照

[1] Kononenko, I., E. Simec, and M. Robnik-Sikonja. (1997). “Overcoming the myopia of inductive learning algorithms with RELIEFF.” Retrieved from CiteSeerX: https://link.springer.com/article/10.1023/A:1008280620621

[2] Robnik-Sikonja, M., and I. Kononenko. (1997). “An adaptation of Relief for attribute estimation in regression.” Retrieved from CiteSeerX: https://www.semanticscholar.org/paper/An-adaptation-of-Relief-for-attribute-estimation-in-Robnik-Sikonja-Kononenko/9548674b6a3c601c13baa9a383d470067d40b896

[3] Robnik-Sikonja, M., and I. Kononenko. (2003). “Theoretical and empirical analysis of ReliefF and RReliefF.” Machine Learning, 53, 23–69.

バージョン履歴

R2010b で導入