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

ブログ    

推薦する

ビジネスインテリジェンスを通じて脆弱性と危険な行動を特定する方法

[[389855]]ビジネスに関連するすべてのリスクを排除できると主張しても、多くの人はそれを信じま...

普通のプログラマーはどうやって AI を活用するのでしょうか?

[[199775]]現在、人工知能はますます人気が高まっている分野となっています。普通のプログラマ...

技術革新は「プロトタイプ」で止まるわけにはいかない…

[[270666]] [51CTO.com クイック翻訳] 昨今、クラウドコンピューティング、ブロ...

...

3D AI が新しい遊び方を生み出します。何時間もかかる代わりに、1 枚の写真からわずか 45 秒で 3D モデルを生成できます。

3D AI生成は近年急速に発展しており、最新の作品の多くは文章・画像から高品質な3Dモデルを生成で...

...

...

2030年までに、仕事の70%が人工知能に置き換えられるでしょう。子どもたちが競争力を維持できるよう、私たちはどう支援できるでしょうか?

10年前は多くの人が必死に五線譜を練習していましたが、今ではほとんど誰も使っていません。 5年前は...

金融業界における AI とビッグデータのトップ 10 トレンド

今日では、人々の仕事や生活のあらゆる側面がテクノロジーによって支援されています。人工知能はそのような...

ターゲット検出アルゴリズムにおける正長方形と不規則四辺形 IOU の Python 実装

交差対結合 (IoU) は、ターゲット検出で使用される概念です。ターゲット検出アルゴリズムをテストす...

スマート交通技術が再び都市開発を推進する方法

都市はバスに大金を賭けている。パンデミックが沈静化し、アメリカ人が仕事に復帰するにつれ、全国の都市や...

...

Googleはロボットを大規模な言語モデルの手と目として機能させ、タスクを16のアクションに分解して一度に完了させます。

大型モデルはロボット工学の分野でその地位を確立しました。 「飲み物をこぼしてしまいました。助けてくれ...

...