ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ExhaustiveSearcher

網羅的最近傍探索モデルの作成

説明

ExhaustiveSearcher モデル オブジェクトには、網羅的最近傍探索の学習データ、距離計量、および距離計量のパラメーター値が格納されます。網羅的探索アルゴリズムでは、学習データに含まれている n 個の観測値すべてについて、各クエリ観測値からの距離を求めます。距離は、n 行 K 列の数値行列になります。

ExhaustiveSearcher モデル オブジェクトを作成したら、knnsearch による最近傍探索または rangesearch による半径探索を実行して、クエリ データに対する学習データの近傍点を探索します。網羅的探索アルゴリズムは、K が大きい場合 (K > 10) に Kd 木アルゴリズムより効率的です。また、距離計量の選択に関して Kd 木アルゴリズムより柔軟です。また、ExhaustiveSearcher モデル オブジェクトはスパースなデータにも対応しています。

作成

関数 createns または関数 ExhaustiveSearcher (ここで説明) を使用して、ExhaustiveSearcher オブジェクトを作成します。どちらの関数も同じ構文を使用しますが、関数 createns には名前と値のペアの引数 'NSMethod' があります。これは、最近傍探索法を選択するために使用されます。関数 creatensKDTreeSearcher オブジェクトも作成します。ExhaustiveSearcher オブジェクトを作成するには 'NSMethod','exhaustive' を指定します。K > 10 であるか、学習データがスパースであるか、距離計量がユークリッド、市街地、チェビシェフ、ミンコフスキーのいずれでもない場合、既定値は 'exhaustive' です。

構文

Mdl = ExhaustiveSearcher(X)
Mdl = ExhaustiveSearcher(X,Name,Value)

説明

Mdl = ExhaustiveSearcher(X) は、学習データ (X) の n 行 K 列の数値行列を使用して、網羅的最近傍探索オブジェクト (Mdl) を作成します。

Mdl = ExhaustiveSearcher(X,Name,Value) では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。距離計量を指定し、距離計量のパラメーター (DistParameter プロパティ) を設定できます。たとえば、ExhaustiveSearcher(X,'Distance','chebychev') はチェビシェフ距離を使用する網羅的最近傍探索オブジェクトを作成します。DistParameter を指定するには、名前と値のペアの引数 CovP または Scale を使用します。

入力引数

すべて展開する

網羅的探索アルゴリズムを準備する学習データ。数値行列を指定します。X には、それぞれが観測値 (インスタンスまたは事例) に対応する n 個の行と、それぞれが予測子 (特徴量) に対応する K 個の列を含めます。

データ型: single | double

名前と値のペアの引数

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

例: 'Distance','mahalanobis','Cov',eye(3) は、最近傍を探索するときにマハラノビス距離を使用し、マハラノビス距離計量の共分散行列に 3 行 3 列の単位行列を使用するよう指定します。

以後のクエリ点について最近傍を探索するために knnsearch または rangesearch を呼び出すときに使用する距離計量。'Distance' と文字ベクトル、string スカラーまたは関数ハンドルから構成されるコンマ区切りのペアとして指定します。

文字ベクトルまたは string スカラーとして指定される距離計量を次の表で説明します。

説明
'chebychev'チェビシェフ距離 (最大座標差)。
'cityblock'市街地距離。
'correlation'1 から、一連の値として扱われる観測間の標本線形相関係数を引きます。
'cosine'(行ベクトルとして扱われる) 観測値間の夾角の余弦を 1 から減算します。
'euclidean'ユークリッド距離。
'hamming'異なる座標の比率を示すハミング距離。
'jaccard'1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。
'minkowski'ミンコフスキー距離。既定の指数は 2 です。異なる指数を指定するには、名前と値のペアの引数 'P' を使用します。
'mahalanobis'正定共分散行列を使用して計算されるマハラノビス距離。共分散行列の値を変更するには、名前と値のペアの引数 'Cov' を使用します。
'seuclidean'標準化されたユークリッド距離。Mdl.X の行とクエリ行列の行の間の各座標差は、Mdl.X から計算される、対応する標準偏差の要素で除算することによりスケーリングされます。他のスケーリングを指定するには、名前と値のペアの引数 'Scale' を使用します。
'spearman'1 から、観測値間の標本スピアマンの順位相関 (値の系列として扱われる) を引いた値。

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

@distfun のように @ を使用すると、カスタム距離計量用の関数ハンドルを指定できます。カスタムな距離関数は、次のようになっていなければなりません。

  • function D2 = distfun(ZI, ZJ) という形式になっている。

  • 次の引数を受け入れる。

    • X またはクエリ点 Y の 1 行が含まれている 1 行 K 列のベクトル ZI。K は X の列数です。

    • X または Y の複数行が含まれている m 行 K 列の行列 ZJ。m は正の整数です。

  • m 行 1 列の距離のベクトル D2 を返す。D2(j) は、観測値 ZIZJ(j,:) の間の距離です。

ExhaustiveSearcher モデル オブジェクトの作成には距離計量が使用されないので、オブジェクトの作成後にドット表記を使用して距離計量を変更できます。

例: 'Distance','mahalanobis'

マハラノビス距離計量の共分散行列。'Cov' と K 行 K 列の正定行列から構成されるコンマ区切りのペアとして指定します。K は X の列数です。この引数は、'Distance''mahalanobis' である場合のみ有効です。

例: 'Cov',eye(3)

データ型: single | double

ミンコフスキー距離計量の指数。'P' と正のスカラー値をコンマで区切って指定します。この引数は、'Distance''minkowski' である場合のみ有効です。

例: 'P',3

データ型: single | double

標準化されたユークリッド距離計量のスケール パラメーター値。'Scale' と長さ K の非負の数値ベクトルから構成されるコンマ区切りのペアとして指定します。K は X の列数です。学習データとクエリ データの間の距離は、対応する Scale の要素を使用してスケーリングされます。この引数は、'Distance''seuclidean' である場合のみ有効です。

例: 'Scale',quantile(X,0.75) - quantile(X,0.25)

データ型: single | double

プロパティ

すべて展開する

このプロパティは読み取り専用です。

網羅的探索アルゴリズムを準備する学習データ。数値行列を指定します。X には、それぞれが観測値 (インスタンスまたは事例) に対応する n 個の行と、それぞれが予測子 (特徴量) に対応する K 個の列を含めます。

このプロパティの設定は、createns または ExhaustiveSearcher の入力引数 X で行います。

データ型: single | double

以後のクエリ点について最近傍を探索するために knnsearch または rangesearch を呼び出すときに使用する距離計量。文字ベクトルまたは string スカラー ('chebychev''cityblock''correlation''cosine''euclidean''hamming''jaccard''minkowski''mahalanobis''seuclidean''spearman')、または関数ハンドルを指定します。

このプロパティの設定は、createns または ExhaustiveSearcher の名前と値のペアの引数 'Distance' で行います。

距離計量は ExhaustiveSearcher モデル オブジェクトの作成に使用されないので、ドット表記を使用して変更できます。

距離計量のパラメーター値。空 ([]) または正のスカラーを指定します。

サポートされる距離計量の距離パラメーターを次の表で説明します。

距離計量パラメーターの説明
'mahalanobis'

マハラノビス距離の計算に使用する共分散行列を表す正定行列。既定では、nancov(Mdl.X) を使用して共分散が設定されます。

このプロパティの設定は、createns または ExhaustiveSearcher の名前と値のペアの引数 'Cov' で行います。

Mdl.DistParameter = CovNew のようにドット表記を使用して DistParameter を変更できます。CovNew は K 行 K 列の正定数値行列です。

'minkowski'

ミンコフスキー距離の指数を表す正のスカラー。既定の指数は 2 です。

このプロパティの設定は、createns または ExhaustiveSearcher の名前と値のペアの引数 'P' で行います。

Mdl.DistParameter = PNew のようにドット表記を使用して DistParameter を変更できます。PNew は正のスカラーです。

'seuclidean'

標準化されたユークリッド距離を計算するときに予測子のスケーリングに使用する値を表す正の数値ベクトル。既定の設定では、次の処理が行われます。

  1. scale = nanstd(Mdl.X) を使用して X の各予測子 (列) の標準偏差を推定する。

  2. 対応する scale の要素で除算して、X とクエリ行列の行間の座標差をスケーリングする。

このプロパティの設定は、createns または ExhaustiveSearcher の名前と値のペアの引数 'Scale' で行います。

Mdl.DistParameter = sNew のようにドット表記を使用して DistParameter を変更できます。sNew は K 次元の正の数値ベクトルです。

Mdl.Distance がこの表に記載されているパラメーターのいずれにも該当しない場合、Mdl.DistParameter[] にします。これは、指定した距離計量の式にパラメーターがないことを意味します。

データ型: single | double

オブジェクト関数

knnsearchオブジェクトの使用による k 最近傍の探索
rangesearchオブジェクトを使用した指定距離内のすべての近傍の探索

すべて折りたたむ

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

load fisheriris
X = meas;
[n,k] = size(X)
n = 150
k = 4

X には 150 個の観測値と 4 つの予測子があります。

データセット全体を学習データとして使用して、網羅的最近傍探索モデルを準備します。

Mdl1 = ExhaustiveSearcher(X)
Mdl1 = 
  ExhaustiveSearcher with properties:

         Distance: 'euclidean'
    DistParameter: []
                X: [150x4 double]

Mdl1ExhaustiveSearcher モデル オブジェクトで、プロパティがコマンド ウィンドウに表示されます。このオブジェクトには、距離計量など、学習済みアルゴリズムに関する情報が格納されています。プロパティの値は、ドット表記を使用して変更できます。

または、createns を使用し、探索法として 'exhaustive' を指定することによっても、網羅的最近傍探索モデルを準備できます。

Mdl2 = createns(X,'NSMethod','exhaustive')
Mdl2 = 
  ExhaustiveSearcher with properties:

         Distance: 'euclidean'
    DistParameter: []
                X: [150x4 double]

Mdl2ExhaustiveSearcher モデル オブジェクトでもあり、Mdl1 と等価です。

一連のクエリ データに対する最近傍を X から探索するには、ExhaustiveSearcher モデル オブジェクトとクエリ データを knnsearch または rangesearch に渡します。

フィッシャーのアヤメのデータセットを読み込みます。花弁の寸法に焦点を当てます。

load fisheriris
X = meas(:,[3 4]); % Predictors

網羅的最近傍探索モデルを準備します。マハラノビス距離計量を指定します。

Mdl = createns(X,'Distance','mahalanobis')
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'mahalanobis'
    DistParameter: [2x2 double]
                X: [150x2 double]

距離計量がマハラノビスであるため、createns は既定では ExhaustiveSearcher モデル オブジェクトを作成します。

ドット表記を使用して Mdl のプロパティにアクセスします。たとえば、マハラノビス共分散パラメーターにアクセスするには、Mdl.DistParameter を使用します。

Mdl.DistParameter
ans = 2×2

    3.1163    1.2956
    1.2956    0.5810

クエリ データと Mdl は、次の関数に渡すことができます。

  • 最近傍のインデックスと距離を求めるための knnsearch

  • 指定距離内にある最近傍のインデックスをすべて求めるための rangesearch

ドット表記を使用して、ExhaustiveSearcher モデル オブジェクトを作成し、Distance プロパティを変更します。

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

load fisheriris
X = meas;

データセット全体を学習データとして使用して、既定の網羅的探索アルゴリズムを学習させます。

Mdl = ExhaustiveSearcher(X)
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'euclidean'
    DistParameter: []
                X: [150x4 double]

近傍探索モデルでマハラノビス尺度を使用して学習データとクエリ データの間の距離を計算するように指定します。

Mdl.Distance = 'mahalanobis'
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'mahalanobis'
    DistParameter: [4x4 double]
                X: [150x4 double]

Mdl とクエリ データを knnsearch または rangesearch のいずれかに渡すと、マハラノビス距離に基づいてクエリ データ内の点に対する最近傍を求めることができます。

関数 createns を使用して、網羅的探索モデル オブジェクトを作成します。k 最近傍を探索するため、オブジェクトとクエリ データを関数 knnsearch に渡します。

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

load fisheriris

クエリ セットとして使用するため、5 つのアヤメのデータを無作為に予測子データから抽出します。

rng('default');             % For reproducibility
n = size(meas,1);           % Sample size
qIdx = randsample(n,5);     % Indices of query data
X = meas(~ismember(1:n,qIdx),:);
Y = meas(qIdx,:);

学習データを使用して網羅的最近傍探索モデルを準備します。最近傍の探索にマハラノビス距離を指定します。

Mdl = createns(X,'Distance','mahalanobis')
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'mahalanobis'
    DistParameter: [4x4 double]
                X: [145x4 double]

距離計量がマハラノビスであるため、createns は既定では ExhaustiveSearcher モデル オブジェクトを作成します。

マハラノビス距離の計算には、学習データ内の予測子 (列) の共分散行列が使用されます。この値を表示するには、Mdl.DistParameter を使用します。

Mdl.DistParameter
ans = 4×4

    0.6547   -0.0368    1.2320    0.5026
   -0.0368    0.1914   -0.3227   -0.1193
    1.2320   -0.3227    3.0671    1.2842
    0.5026   -0.1193    1.2842    0.5800

求める学習データ (Mdl.X) のインデックスは、クエリ データ (Y) の各点における 2 つの最近傍です。

IdxNN = knnsearch(Mdl,Y,'K',2)
IdxNN = 5×2

     5     6
    98    95
   104   128
   135    65
   102   115

IdxNN の各行は、クエリ データの観測値に対応します。列の順序は、距離の昇順で並べ替えた最近傍の順序に対応します。たとえば、マハラノビス距離に基づくと、Y(3,:) の 2 番目の最近傍は X(128,:) になります。

拡張機能

R2010a で導入