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について語る: 世界は劇的に変化しています。心配するのではなく、責任を取るべきです。

ブログ    

推薦する

百度地図のデータ収集リンクの80%はAIベースになっており、旅行業界はインテリジェントにアップグレードされている

人工知能時代の地図データ制作はどのような変化を遂げるのでしょうか?7月3日、「Baidu Creat...

...

単一のViTモデルがマルチモーダルおよびマルチタスクのタスクを実行し、Googleは共同トレーニング戦略を使用して複数のSOTAを達成します。

[[441692]]トランスフォーマーは本当に多用途です。トランスフォーマーは、もともと自然言語処...

百度のCTO王海鋒が言語と知識の完全なレイアウトを説明する

自然言語理解(NLP)は「人工知能の最高傑作」として知られており、これは言語や知識などの認知面におけ...

...

研究機関が新しいレポートでAIの売り手側と買い手側の成功への道筋を定義

調査会社ストラテジー・アナリティクスは新たな報告書の中で、人工知能製品のベンダーとそのユーザーの両方...

人工知能はますます私たちに近づいている

科学者たちは、歌詞付きの歌を聞くと読書の妨げになりやすいのと同じように、音声信号とテキスト信号が脳に...

米国の改正規則:自動運転車は人間の制御を必要としない

米道路交通安全局(NHTSA)は木曜日、自動運転車メーカーに対し、衝突基準を満たすために完全自動運転...

EasyDL モデルのトレーニングから EdgeBoard 推論までのステップバイステップ ガイド

まとめ: EdgeBoard は Baidu が開発した FPGA ベースの組み込み AI ソリュー...

「最もわかりにくい」Paxos アルゴリズムと、データベースの高可用性におけるその使用法をわかりやすい言葉で理解する

最近、Paxos アルゴリズムについてみんなが議論しています。私はオンラインで多くの記事を読みました...

...

2022年にJAXを使うべきでしょうか? GitHubには16,000個のスターがあるが、この若いツールは完璧ではない

2018 年後半の発売以来、JAX の人気は着実に高まっています。 2020年、DeepMindは研...