Main Content

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

fsulaplacian

ラプラシアン スコアを使用して教師なし学習の特徴量をランク付け

説明

idx = fsulaplacian(X) は、ラプラシアン スコアを使用して X の特徴量 (変数) をランク付けします。関数は idx を返します。これには特徴量の重要度順に並べ替えられた特徴量のインデックスが含まれます。idx を使用して、教師なし学習用の重要な特徴量を選択できます。

idx = fsulaplacian(X,Name,Value) では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、'NumNeighbors',10 を指定すると、10 個の最近傍を使用して類似度グラフを作成できます。

[idx,scores] = fsulaplacian(___) は、前の構文におけるいずれかの入力引数の組み合わせを使用して、特徴量スコア scores も返します。大きなスコア値は、対応する特徴量が重要であることを示します。

すべて折りたたむ

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

load ionosphere

重要度に基づいて特徴量をランク付けします。

[idx,scores] = fsulaplacian(X);

特徴量の重要度スコアの棒グラフを作成します。

bar(scores(idx))
xlabel('Feature rank')
ylabel('Feature importance score')

Figure contains an axes. The axes contains an object of type bar.

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

idx(1:5)
ans = 1×5

    15    13    17    21    19

X の 15 列目が、最も重要な特徴量です。

フィッシャーのアヤメのデータセットから類似度行列を計算し、類似度行列を使用して特徴量をランク付けします。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris

既定のユークリッド距離計量で関数pdistsquareformを使用して、meas に含まれている観測値の各ペア間の距離を求めます。

D = pdist(meas);
Z = squareform(D);

類似度行列を作成し、これが対称であることを確認します。

S = exp(-Z.^2);
issymmetric(S)
ans = logical
   1

特徴量をランク付けします。

idx = fsulaplacian(meas,'Similarity',S)
idx = 1×4

     3     4     1     2

類似度行列 S を使用したランク付けは、'NumNeighbors'size(meas,1) として指定することによるランク付けと同じです。

idx2 = fsulaplacian(meas,'NumNeighbors',size(meas,1))
idx2 = 1×4

     3     4     1     2

入力引数

すべて折りたたむ

入力データ。n 行 p 列の数値行列を指定します。X の行は観測値 (点) に、列は特徴量に対応します。

NaNX の欠損データとして扱われ、最低 1 つの NaN を含む X の任意の行を無視します。

データ型: single | double

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'NumNeighbors',10,'KernelScale','auto' は、最近傍の個数を 10 に、カーネル スケール係数を 'auto' に指定します。

類似度行列。'Similarity' と n 行 n 列の対称行列から構成されるコンマ区切りのペアとして指定します。n は観測値の個数です。類似度行列 (または隣接行列) は、データ点間の局所的な近傍関係をモデル化することで入力データを表します。類似度行列内の値は、類似度グラフ内で接続しているノード (データ点) 間のエッジ (または接続) を表します。詳細は、類似度行列を参照してください。

'Similarity' の値を指定する場合、別の名前と値のペアの引数を指定することはできません。'Similarity' の値を指定しない場合、別の名前と値のペアの引数によって指定されたオプションを使用して類似度行列の計算が行われます。

データ型: single | double

距離計量。'Distance' と次の表で説明されている文字ベクトル、string スカラーまたは関数ハンドルから構成されるコンマ区切りのペアとして指定します。

説明
'euclidean'

ユークリッド距離 (既定)

'seuclidean'

標準化されたユークリッド距離。観測値間の各座標差は、X から計算された標準偏差の対応する要素で除算することによりスケーリングされます。名前と値のペアの引数 Scale を使用して、異なるスケーリング係数を指定します。

'mahalanobis'

X の標本共分散を使用したマハラノビス距離、C = cov(X,'omitrows')。名前と値のペアの引数 Cov を使用して、異なる共分散行列を指定します。

'cityblock'

市街地距離

'minkowski'

ミンコフスキー距離。既定の指数は 2 です。名前と値のペアの引数 P を使用して、別の指数を指定します。P は正のスカラー値です。

'chebychev'

チェビシェフ距離 (最大座標差)

'cosine'

1 から、ベクトルとして扱われる観測間の夾角の余弦を減算

'correlation'

1 から、観測値間の標本相関を減算 (値の系列として処理)

'hamming'

ハミング距離 (異なる座標の比率)

'jaccard'

1 からジャカード係数 (異なる非ゼロ座標の比率) を減算

'spearman'

1 から観測値間の標本スピアマン順位相関係数を減算 (値の系列として処理)

@distfun

カスタム距離関数のハンドル。距離関数の形式は次のようになります。

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
ここで、

  • ZI は、単一の観測値が含まれている 1n 列のベクトルです。

  • ZJ は、複数の観測値が含まれている m2n 列の行列です。distfun は、任意の個数の観測値が含まれている行列 ZJ を受け入れなければなりません。

  • D2m21 列の距離のベクトルであり、D2(k) は観測値 ZIZJ(k,:) の間の距離です。

データがスパースでない場合、通常は関数ハンドルではなく組み込みの距離を使用する方が高速に距離を計算できます。

詳細は、距離計量を参照してください。

'seuclidean''minkowski' または 'mahalanobis' 距離計量を使用する場合、追加の名前と値のペアの引数 'Scale''P' または 'Cov' をそれぞれ指定して、距離計量を制御することができます。

例: 'Distance','minkowski','P',3 は、指数 3 のミンコフスキー距離計量を使用することを指定します。

ミンコフスキー距離計量の指数。'P' と正のスカラー値をコンマで区切って指定します。

この引数は、'Distance''minkowski' である場合のみ有効です。

例: 'P',3

データ型: single | double

マハラノビス距離計量の共分散行列。'Cov' と正定値行列から構成されるコンマ区切りのペアとして指定します。

この引数は、'Distance''mahalanobis' である場合のみ有効です。

例: 'Cov',eye(4)

データ型: single | double

標準化されたユークリッド距離計量のスケール係数。'Scale' と非負値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。

X の各次元 (列) には対応する Scale の値があるので、Scale の長さは p (X の列数) です。fsulaplacian は、X の各次元について、Scale 内の対応する値を使用して、観測値の差を標準化します。

この引数は、'Distance''seuclidean' である場合のみ有効です。

データ型: single | double

類似度グラフの作成に使用される最近傍の個数。'NumNeighbors' と正の整数で構成されるコンマ区切りのペアとして指定します。

例: 'NumNeighbors',10

データ型: single | double

カーネルのスケール係数。'KernelScale''auto' または正のスカラーで構成されるコンマ区切りのペアとして指定します。距離を類似度測定に変換するために、スケール係数が使用されます。詳細は、類似度グラフを参照してください。

  • 'auto' オプションは、'euclidean' および 'seuclidean' の距離計量でのみサポートされます。

  • 'auto' を指定した場合、ヒューリスティック手法を使用して適切なスケール係数が選択されます。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。結果を再現するには、fsulaplacian を呼び出す前に rng を使用して乱数シードを設定します。

例: 'KernelScale','auto'

出力引数

すべて折りたたむ

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

特徴量スコア。数値ベクトルとして返されます。大きな scores スコア値は、対応する特徴量が重要であることを示します。scores 内の値の順序は、X 内の特徴量と同じ順序です。

詳細

すべて折りたたむ

類似度グラフ

類似度グラフは、X のデータ点間の局所的な近傍関係を無向グラフとしてモデル化します。グラフ内のノードはデータ点を表し、無向のエッジはデータ点間の接続を表します。

任意の 2 つのノード i および j 間のペアワイズ距離 Disti,j が正である (またはあるしきい値よりも大きい) 場合、類似度グラフはエッジ[2]を使用して 2 つのノードを接続します。2 つのノード間のエッジは、ペアワイズ類似度 Si,j によって重み付けされます。ここで、指定されたカーネル スケール σ の値に対して Si,j=exp((Disti,jσ)2) です。

fsulaplacian は、最近傍法を使用して類似度グラフを作成します。関数は、最近傍である X 内の点を接続します。'NumNeighbors' を使用して、最近傍の個数を指定します。

類似度行列

類似度行列は、類似度グラフの行列表現です。n 行 n 列の行列 S=(Si,j)i,j=1,,n には、類似度グラフで接続しているノード間のペアワイズ類似度の値が含まれます。グラフの類似度行列は、隣接行列とも呼ばれます。

類似度グラフのエッジが無向であるため、類似度行列は対称です。Si,j = 0 の値は、類似度グラフのノード i と j が接続していないことを意味します。

次数行列

次数行列 Dg は、類似度行列 S の行を合計することで得られる n 行 n 列の対角行列です。つまり、Dg の i 番目の対角要素は Dg(i,i)=j=1nSi,j. です。

ラプラシアン行列

類似度グラフを表す 1 つの方法であるラプラシアン行列は、次数行列 Dg類似度行列 S の差として定義されます。

L=DgS.

アルゴリズム

すべて折りたたむ

ラプラシアン スコア

関数 fsulaplacian は、最近傍の類似度グラフから取得したラプラシアン スコア[1]を使用して特徴量をランク付けします。

fsulaplacian は、次のように scores の値を計算します。

  1. X 内の各データ点に対して、最近傍法を使用して局所的な近傍を定義し、近傍内のすべての点 i および j のペアワイズ距離 Disti,j を求めます。

  2. カーネル変換 Si,j=exp((Disti,jσ)2) を使用して距離を類似度行列 S に変換します。ここで σ は、名前と値のペアの引数 'KernelScale' によって指定されるカーネルのスケール係数です。

  3. 各特徴量をその平均を削除することでセンタリングします。

    x˜r=xrxrTDg11TDg11,

    ここで xr は r 番目の特徴量、Dg次数行列であり、1T=[1,,1]T です。

  4. 各特徴量のスコア sr を計算します。

    sr=x˜rTSx˜rx˜rTDgx˜r.

[1] がラプラシアン スコアを

Lr=x˜rTLx˜rx˜rTDgx˜r=1x˜rTSx˜rx˜rTDgx˜r,

のように定義していることに注意してください。ここで L は Dg と S の間の差として定義されているラプラシアン行列です。関数 fsulaplacian は、scores のスコア値にこの方程式の 2 つ目の項のみを使用するため、大きいスコア値が重要な予測子を示します。

ラプラシアン スコアを使用した特徴量の選択は、値

i,j(xirxjr)2Si,jVar(xr),

の最小化と一致します。ここで、xir は r 番目の特徴量の i 番目の観測値を表します。この値を最小化することは、アルゴリズムでは大きな分散をもつ特徴量が推奨されることを示します。また、アルゴリズムは、類似性グラフの 2 つのデータ点の間にエッジがある場合のみ、重要な特徴量の 2 つのデータ点が近いと仮定します。

参照

[1] He, X., D. Cai, and P. Niyogi. "Laplacian Score for Feature Selection." NIPS Proceedings. 2005.

[2] Von Luxburg, U. “A Tutorial on Spectral Clustering.” Statistics and Computing Journal. Vol.17, Number 4, 2007, pp. 395–416.

R2019b で導入