Main Content

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

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

入力引数

すべて展開する

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

データ型: single | double

名前と値の引数

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

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

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

プロパティ

すべて展開する

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

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

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

データ型: single | double

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

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

距離計量は ExhaustiveSearcher モデル オブジェクトの作成に使用されないので、ドット表記を使用して変更できます。'fast' から始まるアルゴリズムでは、スパース データはサポートされません。

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

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

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

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

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

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

'minkowski'

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

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

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

'seuclidean'

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

  1. scale = std(Mdl.X,'omitnan') を使用して 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 で導入

すべて展開する