このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ExhaustiveSearcher
網羅的最近傍探索モデルの作成
説明
ExhaustiveSearcher
モデル オブジェクトには、網羅的最近傍探索の学習データ、距離計量、および距離計量のパラメーター値が格納されます。網羅的探索アルゴリズムでは、学習データに含まれている n 個の観測値すべてについて、各クエリ観測値からの距離を求めます。距離は、n 行 K 列の数値行列になります。
ExhaustiveSearcher
モデル オブジェクトを作成したら、knnsearch
による最近傍探索または rangesearch
による半径探索を実行して、クエリ データに対する学習データの近傍点を探索します。網羅的探索アルゴリズムは、K が大きい場合 (K > 10) に Kd 木アルゴリズムより効率的です。また、距離計量の選択に関して Kd 木アルゴリズムより柔軟です。また、ExhaustiveSearcher
モデル オブジェクトはスパースなデータにも対応しています。
作成
関数 createns
または関数 ExhaustiveSearcher
(ここで説明) を使用して、ExhaustiveSearcher
オブジェクトを作成します。どちらの関数も同じ構文を使用しますが、関数 createns
には名前と値のペアの引数 'NSMethod'
があります。これは、最近傍探索法を選択するために使用されます。関数 createns
は KDTreeSearcher
オブジェクトも作成します。ExhaustiveSearcher
オブジェクトを作成するには 'NSMethod','exhaustive'
を指定します。K > 10 であるか、学習データがスパースであるか、距離計量がユークリッド、市街地、チェビシェフ、ミンコフスキーのいずれでもない場合、既定値は 'exhaustive'
です。
説明
では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。距離計量を指定し、距離計量のパラメーター (Mdl
= ExhaustiveSearcher(X
,Name,Value
)DistParameter
プロパティ) を設定できます。たとえば、ExhaustiveSearcher(X,'Distance','chebychev')
はチェビシェフ距離を使用する網羅的最近傍探索オブジェクトを作成します。DistParameter
を指定するには、名前と値のペアの引数 Cov
、P
または Scale
を使用します。
入力引数
X
— 学習データ
数値行列
網羅的探索アルゴリズムを準備する学習データ。数値行列を指定します。X
には、それぞれが観測値 (インスタンスまたは事例) に対応する n 個の行と、それぞれが予測子 (特徴量) に対応する K 個の列を含めます。
データ型: single
| double
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'Distance','mahalanobis','Cov',eye(3)
は、最近傍を探索するときにマハラノビス距離を使用し、マハラノビス距離計量の共分散行列に 3 行 3 列の単位行列を使用するよう指定します。
Distance
— 距離計量
'euclidean'
(既定値) | 文字ベクトル | string スカラー | カスタム距離関数
以後のクエリ点について最近傍を探索するために 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
)ZI
とZJ(
の間の距離です。j
,:)
ExhaustiveSearcher
モデル オブジェクトの作成には距離計量が使用されないので、オブジェクトの作成後にドット表記を使用して距離計量を変更できます。
例: 'Distance','mahalanobis'
Cov
— マハラノビス距離計量の共分散行列
cov(X,'omitrows')
(既定値) | 正定値行列
マハラノビス距離計量の共分散行列。'Cov'
と K 行 K 列の正定値行列から構成されるコンマ区切りのペアとして指定します。K は X
の列数です。この引数は、'Distance'
が 'mahalanobis'
である場合のみ有効です。
例: 'Cov',eye(3)
データ型: single
| double
P
— ミンコフスキー距離計量の指数
2
(既定値) | 正のスカラー
ミンコフスキー距離計量の指数。'P'
と正のスカラー値をコンマで区切って指定します。この引数は、'Distance'
が 'minkowski'
である場合のみ有効です。
例: 'P',3
データ型: single
| double
Scale
— 標準化されたユークリッド距離計量のスケール パラメーター値
std(X,'omitnan')
(既定値) | 非負の数値ベクトル
標準化されたユークリッド距離計量のスケール パラメーター値。'Scale'
と長さ K の非負の数値ベクトルから構成されるコンマ区切りのペアとして指定します。K は X
の列数です。学習データとクエリ データの間の距離は、対応する Scale
の要素を使用してスケーリングされます。この引数は、'Distance'
が 'seuclidean'
である場合のみ有効です。
例: 'Scale',quantile(X,0.75) - quantile(X,0.25)
データ型: single
| double
プロパティ
X
— 学習データ
数値行列
この プロパティ は読み取り専用です。
網羅的探索アルゴリズムを準備する学習データ。数値行列を指定します。X
には、それぞれが観測値 (インスタンスまたは事例) に対応する n 個の行と、それぞれが予測子 (特徴量) に対応する K 個の列を含めます。
このプロパティの設定は、createns
または ExhaustiveSearcher
の入力引数 X
で行います。
データ型: single
| double
Distance
— 距離計量
文字ベクトル | string スカラー | カスタム距離関数
以後のクエリ点について最近傍を探索するために knnsearch
または rangesearch
を呼び出すときに使用する距離計量。文字ベクトルまたは string スカラー ('chebychev'
、'cityblock'
、'correlation'
、'cosine'
、'euclidean'
、'hamming'
、'jaccard'
、'minkowski'
、'mahalanobis'
、'seuclidean'
、'spearman'
)、または関数ハンドルを指定します。
このプロパティの設定は、createns
または ExhaustiveSearcher
の名前と値のペアの引数 'Distance'
で行います。
距離計量は ExhaustiveSearcher
モデル オブジェクトの作成に使用されないので、ドット表記を使用して変更できます。
DistParameter
— 距離計量のパラメーター値
[]
| 正のスカラー
距離計量のパラメーター値。空 ([]
) または正のスカラーを指定します。
サポートされる距離計量の距離パラメーターを次の表で説明します。
距離計量 | パラメーターの説明 |
---|---|
'mahalanobis' | マハラノビス距離の計算に使用する共分散行列を表す正定値行列。既定では、 このプロパティの設定は、
|
'minkowski' | ミンコフスキー距離の指数を表す正のスカラー。既定の指数は このプロパティの設定は、
|
'seuclidean' | 標準化されたユークリッド距離を計算するときに予測子のスケーリングに使用する値を表す正の数値ベクトル。既定の設定では、次の処理が行われます。
このプロパティの設定は、
|
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]
Mdl1
は ExhaustiveSearcher
モデル オブジェクトで、プロパティがコマンド ウィンドウに表示されます。このオブジェクトには、距離計量など、学習済みアルゴリズムに関する情報が格納されています。プロパティの値は、ドット表記を使用して変更できます。
または、createns
を使用し、探索法として 'exhaustive'
を指定することによっても、網羅的最近傍探索モデルを準備できます。
Mdl2 = createns(X,'NSMethod','exhaustive')
Mdl2 = ExhaustiveSearcher with properties: Distance: 'euclidean' DistParameter: [] X: [150x4 double]
Mdl2
は ExhaustiveSearcher
モデル オブジェクトでもあり、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
モデルのプロパティの変更
ドット表記を使用して、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,:)
になります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
関数
knnsearch
およびrangesearch
はコード生成をサポートします。ExhaustiveSearcher
モデル オブジェクトに学習をさせる場合、名前と値のペアの引数'Distance'
の値をカスタム距離関数にすることはできません。
詳細については、コード生成の紹介と最近傍探索モデルのコード生成を参照してください。
バージョン履歴
R2010a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)