35

私はこの質問に対する答えをかなり前から探していたので、誰かが私を助けてくれることを願っています。Rのfpcライブラリのdbscanを使用しています。たとえば、USArrestsデータセットを見て、次のようにdbscanを使用しています。

library(fpc)
ds <- dbscan(USArrests,eps=20)

この場合、epsの選択は試行錯誤によるものでした。ただし、最適なeps/minptsの選択を自動化するために使用できる関数またはコードがあるかどうか疑問に思っています。いくつかの本が、最も近い隣人までのk番目にソートされた距離のプロットを作成することを推奨していることを知っています。つまり、x軸は「k番目に近い隣接距離に従ってソートされたポイント」を表し、y軸は「k番目に近い隣接距離」を表します。

このタイプのプロットは、epsとminptsの適切な値を選択するのに役立ちます。誰かが私を助けてくれるのに十分な情報を提供したことを願っています。自分の言いたいことの写真を投稿したかったのですが、まだ初心者なので、まだ画像を投稿できません。

4

6 に答える 6

30

minPtsを選択する一般的な方法はありません。それはあなたが見つけたいものに依存します。minPtsが低いということは、ノイズからより多くのクラスターを構築することを意味するので、小さすぎるものを選択しないでください。

イプシロンには、さまざまな側面があります。要約すると、このデータセットとこのminPts、この距離関数、およびこの正規化で機能するものを選択することになります。knn距離ヒストグラムを作成して、そこで「膝」を選択することはできますが、表示されているものがないか、複数ある可能性があります。

OPTICSは、イプシロンパラメーターを必要としないDBSCANの後継です(インデックスサポートによるパフォーマンス上の理由を除いて、Wikipediaを参照してください)。はるかに優れていますが、Rに実装するのは面倒だと思います。これは、高度なデータ構造(理想的には、高速化のためのデータインデックスツリーと優先キュー用の更新可能なヒープ)が必要であり、Rはすべてマトリックス操作に関するものだからです。

素朴なことに、OPTICSは、Epsilonのすべての値を同時に実行し、その結果をクラスター階層に配置することを想像できます。

ただし、最初に確認する必要があるのは、使用するクラスタリングアルゴリズムとはほとんど関係なく、有用な距離関数と適切なデータ正規化があることを確認することです。距離が縮退している場合、クラスタリングアルゴリズムは機能しません。

于 2012-10-15T10:23:24.407 に答える
15

DBSCANのイプシロンパラメーターを管理する一般的で一般的な方法の1つは、データセットのk距離プロットを計算することです。基本的に、各データポイントのk最近傍法(k-NN)を計算して、さまざまなkについてのデータの密度分布を理解します。KNNはノンパラメトリック手法であるため、便利です。minPTS(データに強く依存します)を選択したら、kをその値に固定します。次に、勾配の小さいk距離プロット(固定kの場合)の面積に対応するk距離をイプシロンとして使用します。

于 2013-09-02T09:12:43.887 に答える
15

MinPts

Anony -Mousseが説明したように、「minPtsが低いと、ノイズからより多くのクラスターが構築されることを意味するため、小さすぎるものを選択しないでください。」

minPtsは、データをよく理解しているドメインの専門家によって最適に設定されます。残念ながら、特にデータが正規化された後は、ドメイン知識がわからない場合が多くあります。ヒューリスティックなアプローチの1つは、ln(n)を使用することです。ここで、nはクラスター化されるポイントの総数です。

イプシロン

それを決定するいくつかの方法があります:

1)k距離プロット

minPts = kのクラスタリングでは、コアパイントと境界点のk距離は特定の範囲内にあると予想されますが、ノイズ点ははるかに大きいk距離を持つ可能性があるため、k距離プロットで点を観察できます。 。ただし、明らかな膝がない場合や、膝が複数ある場合があり、判断が難しい場合があります。

2) OPTICSなどのDBSCAN拡張機能

OPTICSは階層的クラスターを生成します。目視検査により、階層的クラスターから重要なフラットクラスターを抽出できます。OPTICSの実装はPythonモジュールpyclusteringで利用できます。DBSCANとOPTICSの最初の著者の1人は、人間の介入を必要としないフラットクラスターを自動的に抽出する方法も提案しました。詳細については、このペーパーを参照してください。

3)感度分析

基本的に、より真に規則的なポイント(他のポイントに類似したポイント)をクラスター化できると同時に、より多くのノイズ(外れ値のポイント)を検出できる半径を選択します。通常のポイント(ポイントはクラスターに属する)VSのパーセンテージを描画できます。イプシロン分析では、x軸としてさまざまなイプシロン値を設定し、y軸として対応する通常のポイントのパーセンテージを設定します。うまくいけば、通常のポイント値のパーセンテージがイプシロン値に対してより敏感なセグメントを見つけることができます。最適なパラメーターとして上限イプシロン値を選択します。

于 2018-02-01T08:09:58.450 に答える
11

パラメータの選択の詳細については、以下のp。11:

Schubert、E.、Sander、J.、Ester、M.、Kriegel、HP、&Xu、X.(2017)DBSCANの再検討、再検討:DBSCANを(まだ)使用する理由と方法。データベースシステム(TODS)でのACMトランザクション、42(3)、19。

  • 2次元データの場合:minPts = 4のデフォルト値を使用します(Ester et al。、1996)
  • 2次元以上の場合:minPts = 2 * dim(Sander et al。、1998)

選択するMinPtsがわかれば、Epsilonを決定できます。

  • k = minPtsでk距離をプロットします(Ester et al。、1996)
  • グラフで「エルボー」を見つけます->k距離の値はイプシロンの値です。
于 2019-01-09T17:03:07.447 に答える
1

リソースがある場合は、一連の値をテストして、何が機能するかを確認することもできepsilonますminPts。私はとを使用してこれをexpand.grid行いmapplyます。

# Establish search parameters.
k <- c(25, 50, 100, 200, 500, 1000)
eps <- c(0.001, 0.01, 0.02, 0.05, 0.1, 0.2)

# Perform grid search.
grid <- expand.grid(k = k, eps = eps)

results <- mapply(grid$k, grid$eps, FUN = function(k, eps) {
  cluster <- dbscan(data, minPts = k, eps = eps)$cluster
  sum <- table(cluster)
  cat(c("k =", k, "; eps =", eps, ";", sum, "\n"))
})
于 2020-06-16T14:12:07.767 に答える
0

このWebページのセクション5を参照してください:http://www.sthda.com/english/wiki/dbscan-density-based-clustering-for-discovering-clusters-in-large-datasets-with-noise-unsupervised-machine-learning

イプシロンを見つける方法の詳細な手順を示します。MinPts...それほど多くはありません。

于 2016-11-29T23:35:13.433 に答える