Pythonの [〜#〜] optics [〜#〜] アルゴリズムの適切な実装を探しています。これを使用して、密度ベースの点のクラスター((x、y)のペア)を形成します。
(x、y)ペアを取り、クラスターのリストを出力するものを探しています。リストの各クラスターには、そのクラスターに属する(x、y)ペアのリストが含まれています。
EDIT:以下は、OPTICSの完全な実装であることが知られていない
クイック検索を行ったところ、次の( Optics )が見つかりました。私はその品質を保証することはできませんが、アルゴリズムはかなりシンプルに見えるので、すぐに検証/適応できるはずです。
以下は、光学アルゴリズムの出力でクラスターを構築する方法の簡単な例です。
def cluster(order, distance, points, threshold):
''' Given the output of the options algorithm,
compute the clusters:
@param order The order of the points
@param distance The relative distances of the points
@param points The actual points
@param threshold The threshold value to cluster on
@returns A list of cluster groups
'''
clusters = [[]]
points = sorted(Zip(order, distance, points))
splits = ((v > threshold, p) for i,v,p in points)
for iscluster, point in splits:
if iscluster: clusters[-1].append(point)
Elif len(clusters[-1]) > 0: clusters.append([])
return clusters
rd, cd, order = optics(points, 4)
print cluster(order, rd, points, 38.0)
私はcompleteと正確なpython OPTICSの実装)を認識していません。ここに投稿されたリンクは、大まかな近似のようですOPTICSのアイデアの1つです。また、アクセラレーションにインデックスを使用しないため、O(n^2)
またはO(n^3)
でも実行される可能性があります。
OPTICSには、明白なアイデア以外にも、いくつかの注意が必要な点があります。特に、しきい値処理は、ここに掲載されている絶対しきい値の代わりにrelativeしきい値( "xi")を使用して実行することが提案されています(その時点で結果はDBSCANとほぼ同じです!)。
元のOPTICSペーパーには、アルゴリズムの出力を実際のクラスターに変換するための推奨アプローチが含まれています。
http://www.dbs.informatik.uni-muenchen.de/Publikationen/Papers/OPTICS.pdf
WekaでのOPTICS実装は、本質的にメンテナンスされていないので、不完全です。実際にクラスターを生成するのではなく、クラスターの順序を計算するだけです。このため、データベースの複製が作成されます。これは、実際にはWekaコードではありません。
[〜#〜] elki [〜#〜] in Javaで最初にOPTICSを公開したグループによって利用可能なかなり広範な実装があるようです。この「公式」バージョンに対して他の実装をテストしたい場合があります。
現在、ライブラリ pyclustering が存在します。これには、PythonおよびOPTICSのC++実装が含まれています)。
技術的にはOPTICSではありませんが、python https://github.com/lmcinnes/hdbscan で利用可能)のHDBSCAN *実装があります。これは、無限のOPTICSと同等です最大イプシロン、および別のクラスター抽出方法実装は生成されたクラスター階層へのアクセスを提供するため、必要に応じて、より伝統的なOPTICSメソッドを介してそこからクラスターを抽出できます。
イプシロンパラメータを制限しないにもかかわらず、この実装は、kdツリーとボールツリーベースの最小スパニングツリーアルゴリズムを使用してO(n log(n))パフォーマンスを実現します そして非常に大きなデータセットを処理できます 。
現在、sklearn(Python用のクラスタリングおよびマシン学習モジュール)の開発バージョン(scikit-learn v0.21.dev0)に実装されています。
ここにリンクがあります: https://scikit-learn.org/dev/modules/generated/sklearn.cluster.OPTICS.html
空間充填曲線または空間インデックスを確認したいとします。 sfcは、2dの複雑さを1dの複雑さに減らします。 Nickのヒルベルト曲線四分木空間インデックスブログをご覧ください。私のsfcの実装をphpclasses.org(hilbert-curve)からダウンロードしたいとします。
http://www.chemometria.us.edu.pl/index.php?goto=downloads の「密度ベースのクラスタリングアプローチ」を参照してください