Python 密度クラスタリング アルゴリズム - DBSCAN の実践

Python 密度クラスタリング アルゴリズム - DBSCAN の実践

この記事の主な内容:

  1. 序文
  2. DBSCAN クラスタリング アルゴリズム
  3. パラメータ選択
  4. DBSCANアルゴリズムの反復の視覚化
  5. 共通評価方法:シルエット係数
  6. Python で DBSCAN クラスタリング アルゴリズムを実装する

1. はじめに

昨年、R 言語でクラスタリング アルゴリズムを学習していたとき、階層的クラスタリング、体系的クラスタリング、K 平均法クラスタリング、K 中心クラスタリングを学び、最終的に DBSCAN クラスタリング アルゴリズムに魅了されました。

なぜでしょうか? まず、どんな形のクラスターでも見つけられるからです。次に、理論が比較的シンプルで理解しやすいと思います。今年は Python で DBSCAN を勉強する予定です。

公式の説明は次のとおりです。

  • DBSCAN (ノイズを含むアプリケーションの密度ベースの空間クラスタリング) は、密度ベースの空間クラスタリング アルゴリズムです。
  • このアルゴリズムは、十分な密度を持つ領域をクラスターに分割し、ノイズの多い空間データベース内で任意の形状のクラスターを見つけます。クラスターは、密度で接続されたポイントの最大セットとして定義されます。

2. DBSCANクラスタリングアルゴリズム

テキストの説明は分かりにくいので、まず次の図を見てください。

上記の点は、サンプル空間に分散された多数のサンプルです。ここでの目標は、サンプル空間内で距離が近いものを 1 つのカテゴリにまとめることです。

ポイント A 付近のポイント密度が比較的高いことがわかりました。赤い円は特定のルールに従ってここを転がり、最終的に A 付近の 5 つのポイントを集めます。これらのポイントは赤でマークされ、同じクラスターとして定義されます。

収集されていないその他のものも同じルールに従ってクラスター化されます。

比喩的に言えば、これはシステムが多数のサンプル ポイントから 1 つのサンプル ポイントをランダムに選択し、この選択したサンプル ポイントの周りに円を描き、円の半径と円内に含まれるサンプル ポイントの最小数を指定するものと考えることができます。指定された半径内に十分なサンプル ポイントがある場合、円の中心はこの内部のサンプル ポイントに転送され、ねずみ講のように他の近くのサンプル ポイントを回り続け、ダウンラインを展開し続けます。

回転する円は、円周するサンプル ポイントの数が事前に指定された値より少ないことがわかった時点で停止します。そして、開始点をコアポイント(A など)、停止する点を境界ポイント(B や C など)、転がる余地がない点を外れ値ポイント(N など)と呼びます。

密度に基づくこれの利点は何ですか?

kmeans クラスタリング アルゴリズムは、球状のクラスター、つまり固体のグループのみを処理できることがわかっています (これは、アルゴリズム自体が平均距離の計算に制限があるためです)。しかし、現実には、下の 2 つの図のように、リングや不規則な形状など、さまざまな形状が存在することがよくあります。このとき、従来のクラスタリング アルゴリズムは明らかに悲惨です。

そこで、サンプル密度の高いサンプルを 1 つのカテゴリにグループ化する必要があると考え、それが DBSCAN クラスタリング アルゴリズムです。

3. パラメータの選択

上記の赤い円が回転するプロセスには、DBSCAN アルゴリズムの 2 つのパラメータが含まれています。これらの 2 つのパラメータは指定が困難です。ここでは、一般的に受け入れられている指定方法を簡単に紹介します。

半径: 半径を指定するのが最も難しいです。半径が大きいと、囲まれる領域が多くなり、クラスターの数は少なくなります。逆に、クラスターの数が増えると、最終結果に影響します。このとき、K距離は半径rを設定すること、つまり突然変異点を見つけるのに役立ちます。例えば、上記の方法は受け入れられる方法ですが、面倒な場合もあります。ほとんどの人は、観察のために試してみるだけです。K距離を使用すると、観察するために多くの実験が必要になり、一度にこれらすべての値を選択するのは困難です。

MinPts: このパラメータは、囲まれたポイントの数であり、密度に相当します。通常、この値は小さいほど、複数回の試行が行われます。

4. DBSCANアルゴリズムの反復の可視化

海外には、DBSCAN 反復プロセスのグラフを動的に描画できる特に興味深い Web サイトがあります。

ウェブサイト: naftaliharris[1]

パラメータを設定したら、「GO!」をクリックするとクラスタリングが開始されます。

5. 一般的な評価方法:シルエット係数

クラスタリング アルゴリズムで最も一般的に使用される評価方法は、シルエット係数です。

サンプル i から同じクラスター内の他のサンプルまでの平均距離 ai を計算します。ai が小さいほど、サンプル i がクラスターにクラスター化される可能性が高くなります (ai はサンプル i とクラスター間の非類似度と呼ばれます)。

サンプル i から別のクラスター Cj 内のすべてのサンプルまでの平均距離 bij を計算します。これは、サンプル i とクラスター Cj 間の非類似度と呼ばれます。サンプル i のクラスター間非類似度として定義されます: bi=min(bi1,bi2,...,bik2);

例:

  • siが1に近い場合、サンプルiのクラスタリングが妥当であることを意味します。
  • si が -1 に近い場合、サンプル i は別のクラスターに分類される必要があることを意味します。
  • siがほぼ0の場合、サンプルiは2つのクラスターの境界上にあることを意味します。

6. Python での DBSCAN クラスタリング アルゴリズムの実装

データをインポート:

  1. pandasをpdとしてインポートする
  2. sklearn.datasetsからload_irisをインポートする
  3. # データをインポートします。sklearn には iris データセットが付属しています
  4. アイリス = load_iris().data
  5. 印刷(アイリス)

出力:

DBSCAN アルゴリズムの使用:

  1. sklearn.clusterからDBSCANをインポートする
  2. iris_db = DBSCAN(eps=0.6,min_samples=4).fit_predict(iris)
  3. # 半径を0.6、最小サンプルサイズを2に設定し、モデルをモデル化します
  4. db = DBSCAN(eps=10, min_samples=2).fit(アイリス)
  5.   
  6. # 各カテゴリーの数を数える
  7. カウント = pd.value_counts(iris_db,sort= True )
  8. 印刷(カウント)

視覚化:

  1. matplotlib.pyplot をpltとしてインポートします。
  2. plt.rcParams[ 'font.sans-serif' ] = [u'Microsoft YaHei' ]
  3.  
  4. 図、ax = plt.subplots(1,2、図のサイズ=(12,12))
  5.  
  6. # クラスタリング後の結果を描画する
  7. ax1 = ax[0]
  8. ax1.scatter(x=iris[:,0],y=iris[:,1],s=250,c=iris_db)
  9. ax1.set_title( 'DBSCAN クラスタリング結果' , fontsize=20)
  10.  
  11. # 実際のデータ結果を描画する
  12. ax2 = ax[1]
  13. ax2.scatter(x=iris[:,0],y=iris[:,1],s=250,c=load_iris().target)
  14. ax2.set_title( '真の分類' 、フォントサイズ=20)
  15. plt.show()

上図からクラスタリング品質を観察することができますが、データ量が多い場合や指標の数が多い場合は観察が非常に面倒になります。

このとき、シルエット係数を使用して結果の品質を判断できます。クラスタリング結果のシルエット係数は S として定義され、クラスタリングが合理的かつ効果的であるかどうかを測る指標です。

クラスタリング結果のシルエット係数の値は[-1,1]の間です。値が大きいほど、同じ種類のサンプル同士が近くなり、異なる種類のサンプル同士が遠くなり、クラスタリング効果が高くなります。

シルエット係数とその他の評価関数は、sklearn.metrics モジュールで定義されています。sklearn の Silhouette_score() 関数は、すべてのポイントの平均シルエット係数を計算します。

  1. sklearnからメトリックをインポート
  2. # 次の関数はシルエット係数を計算できます (sklearn は本当に強力なパッケージです)
  3. スコア = metrics.silhouette_score(iris,iris_db)
  4. スコア

結果: 0.364

<<:  機械学習の戦略原則: 基本プロセス、アルゴリズムフレームワーク、プロジェクト管理

>>:  ロビン・リー、馬化騰、ジャック・マーがAIについて語る: 世界は劇的に変化しています。心配するのではなく、責任を取るべきです。

ブログ    
ブログ    

推薦する

...

インドネシアのゴミ分別:人工知能が役に立つ

上海市は7月に「史上最も厳しいゴミ分別措置」を実施し始めて以来、ゴミ分別は多くの人々の日常生活におけ...

TENSORFLOW を使用してリカレント ニューラル ネットワーク言語モデルをトレーニングする

[[201448]]私は、TensorFlow リカレント ニューラル ネットワークのチュートリアル...

第4のパラダイム: AIによる意思決定が主要なビジネスシナリオを強化し、企業の質的変化の実現を支援

2021年6月23日、「変革の新パラダイム」をテーマにした2021年第4回パラダイム会議および企業イ...

...

...

...

ディープラーニングの深層: モデリング知識とオープンソースツールのオプション

[51CTO.com クイック翻訳] この記事では、ディープラーニングアルゴリズムを使用してデータモ...

...

Appleは人工知能の分野で追い上げており、その視覚認識の成果は業界の賞を受賞した

[[201426]]歴史的に、Apple は最先端技術の研究にはあまり注意を払わず、むしろ製品の設計...

アリババが3D位置マップ圧縮アルゴリズムを革新、その論文結果がトップカンファレンスCVPR 2022に選出

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

...

GPT-4V の医師免許試験の点数は、ほとんどの医学生よりも高いです。AI がクリニックに参加するまでにはどれくらい時間がかかりますか?

医用画像診断における人工知能(AI)の応用は大きな進歩を遂げました。しかし、厳密なテストがなければ、...

Baidu の最新の IDL 成果: 自然言語から始めて、AI エージェントに人間のように学習することを教える

AI は驚異的な進歩を遂げていますが、多くの分野ではまだ限界があります。たとえば、コンピューター ゲ...