主要内容

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

dbscan

基于密度的带噪声应用空间聚类(DBSCAN)

説明

idx= dbscan (Xεminpts)は,DBSCANアルゴリズム(アルゴリズムを参照)を使用して,n行p列のデータ行列X内の観測値をクラスターに分割します。dbscanは,コア点の識別に必要な近傍探索半径εおよび最小近傍点数minptsのしきい値に基づいて,観測値(または点)をクラスター化します。この関数は,各観測値のクラスターインデックスが格納されているn行1列のベクトル(idx)を返します。

idx= dbscan (Xεminpts名称,值)では1つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば,“距离”、“闵可夫斯基”,“P”3を指定すると,DBSCANアルゴリズムで指数3のミンコフスキー距離計量を使用できます。

idx= dbscan (Dεminpts“距离”“预算”)は,事前計算済みの観測値間のペアワイズ距離Dに対するクラスターインデックスのベクトルを返します。Dには,pdistまたはpdist2の出力を指定するか,pdistまたはpdist2の出力形式にそれぞれ従う,より一般的な非類似度ベクトルまたは行列を指定できます。

idxcorepts) = dbscan (___)は,前の構文におけるいずれかの入力引数の組み合わせを使用して,dbscanが識別したコア点が格納されている逻辑ベクトルcoreptsも返します。

すべて折りたたむ

既定のユークリッド距離計量でDBSCANを使用して,2次元の円状データセットをクラスター化します。また2乗ユークリッド距離計量でDBSCANとk——クラスタリングを使用してデータセットをクラスター化した結果を比較します。

ノイズがある2つの円が含まれている人工的なデータを生成します。

rng (“默认”)%的再现性%数据生成参数N = 300;%每个集群的大小r1 = 0.5;第一个圆的半径r2 = 5;%第二个圆的半径θ= linspace(0, 2 *π,N) ';X1 = r1*[cos(theta,sin)]+ rand(N,1);X2 = r2*[cos(),sin()]+ rand(N,1);X = (X1, X2);%嘈杂的二维圆形数据集

データセットを可視化します。

散射(X (: 1), (2):,)

图中包含一个坐标轴。坐标轴包含一个散点类型的对象。

プロットには2つの異なるクラスターがデータセットに含まれていることが示されています。

データに対してDBSCANクラスタリングを実行します。εの値として1を,minptsの値として5を指定します。

idx = dbscan (X 1 5);默认的距离度量是欧氏距离

クラスタリングを可視化します。

gscatter (X (: 1) X (:, 2), idx);标题(“使用欧几里得距离度量的DBSCAN”)

图中包含一个坐标轴。标题为DBSCAN Using Euclidean Distance Metric的轴包含2个类型为line的对象。这些对象代表1 2。

ユークリッド距離計量を使用した場合,DBSCANはデータセット内の2つのクラスターを正しく識別します。

2乗ユークリッド距離計量を使用して,DBSCANを実行します。εの値として1を,minptsの値として5を指定します。

idx2 = dbscan (X 1 5“距离”“squaredeuclidean”);

クラスタリングを可視化します。

gscatter (X (: 1) X (:, 2), idx2);标题(使用平方欧几里得距离度量的DBSCAN)

图中包含一个坐标轴。标题为DBSCAN Using Squared Euclidean Distance Metric的轴包含两个类型为line的对象。这些对象代表1 2。

2乗ユークリッド距離計量を使用した場合,DBSCANはデータセット内の2つのクラスターを正しく識別します。

2乗ユークリッド距離計量を使用して,k——クラスタリングを実行します。k= 2クラスターを指定します。

kidx = kmeans (X, 2);默认距离度量是欧几里得距离的平方

クラスタリングを可視化します。

gscatter (X (: 1) X (:, 2), kidx);标题(“使用平方欧几里得距离度量的k -均值”)

图中包含一个坐标轴。标题为K-Means Using Squared Euclidean Distance Metric的轴包含2个类型为line的对象。这些对象代表1 2。

2乗ユークリッド距離計量を使用した場合,k——クラスタリングはデータセット内の2つのクラスターを正しく識別できません。

関数dbscanに対する入力として観測値間のペアワイズ距離の行列を使用してDBSCANクラスタリングを実行し,外れ値とコア点の個数を求めます。データセットは,自動車の周囲にある物体の座標を含む3次元の点の集合として格納された激光雷达スキャンです。

物体のx y z座標を読み込みます。

负载(“lidar_subset.mat”) loc = lidar_子集;

自動車の周囲の環境を強調するため,道路表面の上部の領域で自動車の左右20メートルおよび前後20メートルにわたるように関心領域を設定します。

xBound = 20;%在米yBound = 20;%在米zLowerBound = 0;%在米

指定した領域内の点のみが含まれるようにデータをトリミングします。

指数= loc (: 1) < = xBound & loc (: 1) > = -xBound...& loc(:,2) <= yBound & loc(:,2) >= -yBound...& loc(:,3) > zLowerBound;loc = loc(指数:);

2次元散布図としてデータを可視化します。プロットに注釈を付けて,自動車を強調します。

散射(loc (: 1), loc (:, 2),“。”);注释(“椭圆”,[0.48 0.48 .1 .1],“颜色”“红色”)

图中包含一个坐标轴。坐标轴包含一个散点类型的对象。

点集合の中心(赤い丸の部分)には,自動車の屋根とボンネットが含まれています。他のすべての点は障害物です。

関数pdist2を使用して,観測値間のペアワイズ距離の行列Dを事前計算します。

D = pdist2 (loc, loc);

ペアワイズ距離でdbscanを使用して,データをクラスター化します。εの値として2を,minptsの値として50を指定します。

[idx, corpts] = dbscan(D,2,50,)“距离”“预算”);

結果を可視化し,图に注釈を付けて特定のクラスターを強調します。

gscatter (loc (: 1), loc (:, 2), idx);注释(“椭圆”,[0.54 0.41 .07 .07],“颜色”“红色”网格)

图中包含一个坐标轴。轴线包含12个线型对象。这些对象代表-1 1 2 3 4 5 6 7 8 9 10 11。

散布図に示されているように,dbscanは11個のクラスターを識別し,自動車を別個のクラスターに配置しています。

関数dbscanは(中心が(3、4)の付近にある)赤い丸の点のグループをプロットの右下にある点のグループと同じクラスター(グループ7)に割り当てています。これらのグループは別々のクラスターに属すると考えられます。大きいクラスターを分断し,点をさらに分割するため,小さい値のεを試すことができます。

また,データ内の外れ値(idxの値が1)もいくつか識別されています。dbscanが外れ値として識別した点の個数を求めます。

总和(idx = = 1)
ans = 412

dbscan19070年は個の観測値から412個の外れ値を識別しました。

dbscanがコア点として識別した点の個数を求めます。coreptsの値の1は,コア点を示します。

总和(corepts = = 1)
ans = 18446

dbscan18446年は個の観測値をコア点として識別しました。

より幅広い例については,DBSCANのパラメーター値の決定を参照してください。

入力引数

すべて折りたたむ

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

データ型:|

観測値間のペアワイズ距離。pdistが出力した数値行ベクトル,pdist2が出力した数値正方行列,逻辑行ベクトル,または逻辑正方行列を指定します。Dは,pdistまたはpdist2の出力形式にそれぞれ従う,より一般的な非類似度ベクトルまたは行列にすることもできます。

前述した指定に関して,n個の観測値(行)とp個の次元(列)がある入力行列Xに対してDで使用できる形式を次の表で説明します。

指定 形式
数値行ベクトル(pdist (X)の出力)
  • X内の観測値のペアに対応する,長さn (n - 1) / 2の行ベクトル

  • (2, 1),(3,1),…,(n,1), (3,2), ..., (n,2), ..., (n,n – 1))という順序で並んでいる距離

数値正方行列 (pdist2 (X, X)の出力)
  • n行n列の行列。D (i, j)X内の観測値およびjの間の距離

  • 対角要素がゼロに等しい対称行列

逻辑行ベクトル
  • X内の観測値のペアに対応する,長さn (n - 1) / 2の行ベクトル

  • 距離がε以下であるかどうかを各要素が示す,逻辑行ベクトル

  • (2, 1),(3,1),…,(n,1), (3,2), ..., (n,2), ..., (n,n – 1))という順序で並んでいるDの要素

逻辑正方行列
  • n行n列の行列。D (i, j)X内の観測値およびjの間の距離がε以下であるかどうかを示す

メモ

Dが逻辑ベクトルまたは逻辑行列である場合,εの値は空でなければなりません。たとえば,dbscan (D[] 5,“距离”,“预计”)

データ型:||逻辑

点のイプシロン近傍。点の周囲の近傍探索半径を定義する数値スカラーを指定します。ある点のイプシロン近傍にminpts個以上の近傍点が含まれている場合,dbscanはその点をコア点として識別します。

Dが逻辑ベクトルまたは逻辑行列である場合,εの値は空([])でなければなりません。

例:dbscan (X, 2.5, 10)

例:dbscan (D[] 5,“距离”,“预计”)、逻辑行列または逻辑ベクトルDの場合

データ型:|

コア点に必要な最小近傍点数。正の整数を指定します。クラスター内で,コア点のイプシロン近傍にはminpts個以上の近傍点が含まれていなければなりませんが,境界点のイプシロン近傍に含まれる近傍点の個数はminptsより少なくなる可能性があります。

例:dbscan (X, 2.5, 5)

データ型:|

名前と値のペアの引数

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

例:dbscan (2.5 D, 5‘距离’,“预算”)は,事前計算済みの観測値間のペアワイズ距離の行列D,イプシロン近傍2.5,および最小近傍点数5を使用するDBSCANクラスタリングを指定します。

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

説明
“预算”

事前計算済みの距離。dbscanに対する1番目の入力がペアワイズ距離のベクトルまたは行列Dである場合,このオプションを指定しなければなりません。

“欧几里得”

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

“squaredeuclidean”

2乗ユークリッド距離(効率向上のみを目的に提供されているオプション。三角不等式は満たさない)。

“seuclidean”

標準化されたユークリッド距離。観測値間の各座標差は,標準偏差S =性病(X, omitnan)の対応する要素で除算することによりスケーリングされます。年代について別の値を指定するには,规模を使用します。

“mahalanobis”

Xの標本共分散を使用したマハラノビス距離,C = X (X, omitrows)Cについて別の値を指定するには,を使用します。ここで,行列Cは対称な正定値です。

“cityblock”

市街地距離

闵可夫斯基的

ミンコフスキー距離。既定の指数は2です。異なる指数を指定するには,Pを使用します。Pは正のスカラー値です。

“chebychev”

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

的余弦

1から,ベクトルとして扱われる点の間の夾角の余弦を引いた値

“相关”

1から,値の系列として扱われる点の間の標本相関を引いた値

“汉明”

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

“jaccard”

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

“枪兵”

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

distfun

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

函数ZJ D2 = distfun(子)距离计算%...
ここで,

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

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

  • D2平方米1列の距離のベクトルであり,D2 (k)は観測値ZJ (k,:)の間の距離です。

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

定義については,距離計量を参照してください。

“seuclidean”闵可夫斯基的または“mahalanobis”距離計量を使用する場合,追加の名前と値のペアの引数“规模”“P”または“浸”をそれぞれ指定して,距離計量を制御することができます。

例:dbscan (X 2.5 5,“距离”,“闵可夫斯基”,“P”,3)は,クラスタリングアルゴリズムを実行するときに,イプシロン近傍として2.5,クラスターを成長させるための最小近傍点数として5,および指数3.のミンコフスキー距離計量を使用するよう指定します。

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

この引数は,“距离”闵可夫斯基的である場合のみ有効です。

例:“P”3

データ型:|

マハラノビス距離計量の共分散行列。“浸”と対称な正定値行列である数値行列から構成されるコンマ区切りのペアとして指定します。

この引数は,“距离”“mahalanobis”である場合のみ有効です。

データ型:|

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

Xの各次元(列)には対応する“规模”の値があるので,“规模”の長さはp (Xの列数)です。dbscanは,Xの各次元について,“规模”内の対応する値を使用して,Xとクエリ点の差を標準化します。

この引数は,“距离”“seuclidean”である場合のみ有効です。

データ型:|

出力引数

すべて折りたたむ

クラスターインデックス。数値列ベクトルとして返されます。idxの行数はnであり,idxの各行はX内の対応する観測値のクラスター割り当てを示します。1に等しいインデックスは,外れ値(またはノイズ点)を示します。

メモ

DBSCANアルゴリズムを使用するクラスター割り当ては,観測値の順序に依存します。したがって,Xの行を並べ替えると,観測値のクラスター割り当てが異なる結果になる可能性があります。詳細は,アルゴリズムを参照してください。

データ型:

コア点のインジケーター。dbscanが識別したコア点のインデックスを示すn行1列の逻辑ベクトルとして返されます。coreptsのいずれかの行の値1は,X内の対応する観測値がコア点であることを示します。それ以外の場合,コア点ではない観測値に対応するcoreptsの行の値は0になります。

データ型:逻辑

詳細

すべて折りたたむ

コア点

クラスターのコア点は,イプシロン近傍(ε)内に最小数(minpts)以上の近傍点がある点です。各クラスターには,少なくとも1つのコア点が含まれていなければなりません。

境界点

クラスターの境界点は,イプシロン近傍(ε)内の近傍点の個数がコア点に必要な最小数(minpts)より少ない点です。一般に,境界点のイプシロン近傍には,コア点のイプシロン近傍より大幅に少ない個数の点が含まれます。

ノイズ点

ノイズ点は,どのクラスターにも属さない外れ値です。

ヒント

  • 多数のεの値に対して反復処理を行うときの速度を向上させるには,dbscanに対する入力としてDを渡すことを検討してください。このようにすると,すべての反復で距離を計算する必要がなくなります。

  • pdist2を使用してDを事前計算する場合,pdist2の名前と値のペアの引数“最小”または“最大”によるDの列の選択または並べ替えは行わないでください。dbscanDが正方行列であると想定するので,n個未満の距離を選択するとエラーが発生します。Dの各列で距離を並べ替えると,Dの解釈が不十分になり,関数dbscanで使用したときに無意味な結果が生成される可能性があります。

  • 効率的にメモリを使用するため,Dが大きい場合はDを数値行列ではなく逻辑行列としてdbscanに渡すことを検討してください。既定では,MATLAB®は数値行列の各値の格納に8バイト(64ビット)を使用しますが,逻辑行列の各値の格納には1バイト(8ビット)を使用します。

  • minptsの値を選択するには,入力データの次元数に1を加算した値以上の値を検討してください[1]。たとえばn行p列の行列Xの場合,p + 1以上の値を“minpts”に設定します。

  • εの値を選択する方法として可能なものの1つは,Xについてk距離グラフを生成することです。Xの各点についてk番目に近い点に対する距離を求め,この距離に対して並べ替えた点をプロットします。一般に,このグラフには,折れ曲がる部分があります。点が外れ値(ノイズ)領域に近づき始める領域なので,折れ曲がる部分に対応する距離は一般にεに適した選択肢です[1]。

アルゴリズム

  • DBSCANは,データ内のクラスターとノイズを検出するように設計されている,密度に基づくクラスタリングアルゴリズムです。このアルゴリズムでは,コア点,境界点およびノイズ点という3種類の点を識別します[1]。関数dbscanは,指定されたεおよびminptsの値に対して,以下のようにアルゴリズムを実装します。

    1. 入力データセットXから,ラベルが付いていない1番目の観測値x1を現在の点として選択し,1番目のクラスターラベルCを1に初期化します。

    2. 現在の点のイプシロン近傍ε内にある点の集合を求めます。これらの点は近傍点です。

      1. 近傍点数がminptsより小さい場合,現在の点にノイズ点(つまり外れ値)のラベルを付けます。ステップ4に進みます。

        メモ

        X内の他の点のεminptsによって設定される制約を後にノイズ点が満たす場合,dbscanはノイズ点をクラスターに再割り当てする可能性があります。このように点を再割り当てする処理は,クラスターの境界点に対して発生します。

      2. それ以外の場合,クラスターCに属するコア点のラベルを現在の点に付けます。

    3. 現在のクラスターCに属しているというラベルを付けられる新しい近傍点が見つからなくなるまで,各近傍点(新しい現在の点)に対してステップ2を繰り返します。

    4. X内でラベルが付いていない次の点を現在の点として選択し,クラスターカウントに1を加算します。

    5. X内のすべての点にラベルが付けられるまで,ステップ2 ~ 4を繰り返します。

  • 2つのクラスターの密度が異なっており,互いに近い場合,つまり,2つの境界点の距離(各クラスターからの距離)がε未満である場合,dbscanは2つのクラスターを1つに結合する可能性があります。

  • すべての有効なクラスターにminpts個以上の観測値が含まれるとは限りません。たとえば,dbscanは,互いに近い2つのクラスターに属する境界点を識別する可能性があります。このような場合,最初に検出されたクラスターに境界点が割り当てられます。この結果2番目のクラスターは有効なクラスターのままですが,観測値の個数がminptsより少なくなる可能性があります。

参照

[1] Ester, M., h . p .克里格尔,J.桑达,肖伟。“一种基于密度的算法,用于在有噪声的大型空间数据库中发现集群。”中国科学:信息科学,2018,36(6):733 - 741。波特兰,奥尔特:AAAI出版社,1996。

R2019aで導入