Main Content

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

KDTreeSearcher

Kd 木最近傍探索モデルを作成

説明

KDTreeSearcherモデル オブジェクトには、Kd 木アルゴリズムを使用した最近傍探索の結果が格納されます。結果は、学習データ、距離計量とそのパラメーター、および各葉ノードにおけるデータ点の最大数 (つまりバケット サイズ) です。Kd 木アルゴリズムでは、K 次元空間で n 個の点を再帰的に二分木に分割することにより、n 行 K 列のデータセットを分割します。

KDTreeSearcherモデル オブジェクトの作成後、knnsearchによる最近傍探索またはrangesearchによる半径探索を実行して、格納されている木からクエリ データに対するすべての近傍点を探索できます。K が小さく (K ≤ 10)、学習セットとクエリ セットがスパースではなく、学習セットとクエリ セットに多数の観測値が含まれている場合、Kd 木アルゴリズムは網羅的探索アルゴリズムより効率的です。

作成

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

説明

Mdl= KDTreeSearcher(X)は、n 行 K 列の学習データの数値行列 (X) を使用して、既定の Kd 木 (Mdl) を成長させます。

Mdl= KDTreeSearcher(X,Name,Value)では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。各葉ノードにおけるデータ点の最大数 (つまりバケット サイズ) および距離計量の指定と、距離計量パラメーター (DistParameter) プロパティの設定を行うことができます。たとえばKDTreeSearcher(X,'Distance','minkowski','BucketSize',10)は、最近傍を探索するときにミンコフスキー距離を使用し、バケット サイズに10を使用するよう指定します。DistParameterを指定するには、名前と値のペアの引数Pを使用します。

入力引数

すべて展開する

Kd 木を成長させるための学習データ。数値行列を指定します。Xには、それぞれが観測値 (インスタンスまたは事例) に対応する n 個の行と、それぞれが予測子 (特徴量) に対応する K 個の列を含めます。

データ型:single|double

名前と値のペアの引数

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

例:'Distance','minkowski','P',3,'BucketSize',10は、最近傍を探索するときに、ミンコフスキー距離、ミンコフスキー距離計量の指数として3、バケット サイズとして10を使用するよう指定します。

以後のクエリ点について最近傍を探索するためにknnsearchまたはrangesearchを呼び出すときに使用する距離計量。'Distance'と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。

説明
'chebychev' チェビシェフ距離 (最大座標差)。
'cityblock' 市街地距離。
'euclidean' ユークリッド距離。
'minkowski' ミンコフスキー距離。既定の指数は 2 です。別の指数を指定するには、'P'名前と値のペアの引数を使用します。

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

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

例:'Distance','minkowski'

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

例:'P',3

データ型:single|double

Kd 木の各葉ノードにおける最大データ点数。'BucketSize'と正の整数をコンマで区切って指定します。

例:'BucketSize',10

データ型:single|double

プロパティ

すべて展開する

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

Kd 木を成長させるための学習データ。数値行列を指定します。Xには、それぞれが観測値 (インスタンスまたは事例) に対応する n 個の行と、それぞれが予測子 (特徴量) に対応する K 個の列を含めます。

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

データ型:single|double

以後のクエリ点について最近傍を探索するためにknnsearchまたはrangesearchを呼び出すときに使用する距離計量。'chebychev''cityblock''euclidean'または'minkowski'を指定します。

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

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

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

Distance'minkowski'である場合、DistParameterはミンコフスキー距離の式における指数です。それ以外の場合、DistParameter[]になります。これは、指定された距離計量の式にパラメーターがないことを示します。

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

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

データ型:single|double

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

Kd 木の各葉ノードにおけるデータ点の最大数。正の整数を指定します。

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

データ型:single|double

オブジェクト関数

knnsearch 探索モデル オブジェクトを使用して k 最近傍を探索
rangesearch 探索モデル オブジェクトを使用して指定距離内の近傍をすべて探索

すべて折りたたむ

ユークリッド距離を使用する 4 次元のKd 木を成長させます。

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

loadfisheririsX =量;(n, k)大小(X) =
n = 150
k = 4

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

データセット全体を学習データとして使用して、4 次元のKd 木を成長させます。

Mdl1 = KDTreeSearcher(X)
Mdl1 = KDTreeSearcher with properties: BucketSize: 50 Distance: 'euclidean' DistParameter: [] X: [150x4 double]

Mdl1KDTreeSearcherモデル オブジェクトで、プロパティがコマンド ウィンドウに表示されます。このオブジェクトには、距離計量など、成長した 4 次元Kd 木に関する情報が格納されています。プロパティの値は、ドット表記を使用して変更できます。

または、creatensを使用してKd 木を成長させることができます。

Mdl2 = createns(X)
Mdl2 = KDTreeSearcher属性:BucketSize: 50 Distance: 'euclidean' DistParameter: [] X: [150x4 double]

Mdl2KDTreeSearcherモデル オブジェクトでもあり、Mdl1と等価です。Xには 4 つの列があり、既定の距離計量はユークリッドであるため、creatensは既定ではKDTreeSearcherモデルを作成します。

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

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

loadfisheririsX = meas(:,[3 4]);% Predictors

creatensと学習データを使用して 2 次元のKd 木を成長させます。ミンコフスキー距離計量を指定します。

Mdl = createns(X,'Distance','Minkowski')
Mdl = KDTreeSearcher with properties: BucketSize: 50 Distance: 'minkowski' DistParameter: 2 X: [150x2 double]

Xには 2 つの列があり、距離計量がミンコフスキーであるため、creatensは既定ではKDTreeSearcherモデル オブジェクトを作成します。

ドット表記を使用してMdlのプロパティにアクセスします。たとえば、Mdl。DistParameterを使用してミンコフスキー距離指数にアクセスします。

Mdl。DistParameter
ans = 2

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

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

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

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

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

loadfisheririsX =量;

データセット全体を学習データとして使用して、既定の 4 次元Kd 木を成長させます。

Mdl = KDTreeSearcher(X)
Mdl = KDTreeSearcher with properties: BucketSize: 50 Distance: 'euclidean' DistParameter: [] X: [150x4 double]

近傍探索モデルでミンコフスキー尺度を使用して学習データとクエリ データの間の距離を計算するように指定します。

Mdl。Distance ='minkowski'
Mdl = KDTreeSearcher with properties: BucketSize: 50 Distance: 'minkowski' DistParameter: 2 X: [150x4 double]

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

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

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

loadfisheriris

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

rng(1);% For reproducibilityn = size(meas,1);% Sample sizeqIdx = randsample(n,5);% Indices of query datatIdx = ~ismember(1:n,qIdx);% Indices of training dataQ = meas(qIdx,:); X = meas(tIdx,:);

学習データを使用して 4 次元のKd 木を成長させます。最近傍の探索にミンコフスキー距離を指定します。

Mdl = createns(X,'Distance','minkowski')
Mdl = KDTreeSearcher with properties: BucketSize: 50 Distance: 'minkowski' DistParameter: 2 X: [145x4 double]

Xには 4 つの列があり、距離計量がミンコフスキーであるため、既定ではcreatensKDTreeSearcherモデル オブジェクトを作成します。既定では、ミンコフスキー距離の指数は2です。

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

IdxNN =knnsearch(Mdl,Q,'K',2)
IdxNN =5×217 4 6 2 1 12 89 66 124 100

IdxNNの各行はクエリ データの観測値に、列の順序は距離の昇順で並べ替えた最近傍の順序に対応しています。たとえば、ミンコフスキー距離に基づくと、Q(3,:)の 2 番目の最近傍はX(12,:)になります。

拡張機能

R2010a で導入