Machine-learning-with-python-clustering-algorithms-mean-shift

提供:Dev Guides
移動先:案内検索

ML-クラスタリング平均シフトアルゴリズム

平均シフトアルゴリズムの概要

前述のように、教師なし学習で使用される別の強力なクラスタリングアルゴリズムです。 K-meansクラスタリングとは異なり、仮定を行いません。したがって、これはノンパラメトリックアルゴリズムです。

平均シフトアルゴリズムは、基本的に、データポイントの密度が最も高い方向にポイントをシフトすることにより、データポイントを繰り返しクラスターに割り当てます。 クラスター重心。

K-MeansアルゴリズムとMean-Shiftの違いは、クラスターの数はアルゴリズムw.r.tデータによって決定されるため、後のクラスターの数を事前に指定する必要がないことです。

平均シフトアルゴリズムの動作

私たちは次のステップの助けを借りて平均シフトクラスタリングアルゴリズムの働きを理解することができます-

  • *ステップ1 *-最初に、独自のクラスターに割り当てられたデータポイントから開始します。
  • *ステップ2 *-次に、このアルゴリズムは重心を計算します。
  • *ステップ3 *-このステップでは、新しい重心の位置が更新されます。
  • *ステップ4 *-これで、プロセスが繰り返され、より高密度の領域に移動します。
  • *ステップ5 *-最後に、重心がそれ以上移動できない位置に到達すると停止します。

Pythonでの実装

Mean-Shiftアルゴリズムの仕組みを理解するのは簡単な例です。 この例では、最初に4つの異なるBLOBを含む2Dデータセットを生成し、その後平均シフトアルゴリズムを適用して結果を確認します。

%matplotlib inline
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
plt.scatter(X[:,0],X[:,1])
plt.show()

平均シフトアルゴリズム

ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']

for i in range(len(X)):
   plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
   marker = ".",color = 'k', s = 20, linewidths = 5, zorder = 10)
plt.show()

出力

[[Estimated clusters: 3

データセットの生成

長所と短所

利点

以下は、平均シフトクラスタリングアルゴリズムのいくつかの利点です-

  • K-meansやGaussian混合のようにモデルを仮定する必要はありません。
  • また、非凸形状の複雑なクラスターをモデル化できます。
  • クラスターの数を自動的に決定するbandwidthという名前のパラメーターが1つだけ必要です。
  • K-meansのような局所的な最小値の問題はありません。
  • 外れ値から発生する問題はありません。

デメリット

以下は、平均シフトクラスタリングアルゴリズムのいくつかの欠点です-

  • 平均シフトアルゴリズムは、クラスターの数が突然変化する高次元の場合にはうまく機能しません。
  • クラスターの数を直接制御することはできませんが、一部のアプリケーションでは、特定の数のクラスターが必要です。
  • 意味のあるモードと意味のないモードを区別できません。