クラスタリングアルゴリズム比較:K-meansとGauss混合モデル
2253 ワード
アルゴリズムの原理
K-means,K平均クラスタリングアルゴリズム
各clusterには中心点が存在すると仮定し、cluster内のすべてのデータ項目からこの中心点までのヨーロッパ式距離(勾配定理の拡張:各次元差の二乗和再開方)は他のcluster中心点までの距離よりも小さい.アルゴリズムのタスクは、これらのclusterの中心点を見つけることです.K-meansアルゴリズムは,まずK(一意のアルゴリズムパラメータ)個の点を中心点としてランダムに選択し,次いでヨーロッパ式距離を計算することによってすべてのデータ項目を分類する.照合後、平均アルゴリズム(mean)を使用して各クラスの中心点を再計算し、中心点が変化しないまで距離照合を計算し続け、収束が完了したとみなされます.
GMM,Gauss混合クラスタリングアルゴリズム
各クラスタのデータがガウス分布(常態分布または正規分布とも呼ばれる)に合致すると仮定し、現在のデータが示す分布は各クラスタの分布が重なる.EMアルゴリズムを使って解くのですが、具体的にはよくわかりません.2つのパラメータは、まずランダムに1つを指定し、それから別のパラメータを計算し、最後に結果と比較します.
アルゴリズムの特徴
K-means
アルゴリズムは簡単で、理解しやすい.計算量が少なく,収束が速い.分散計算を容易に行うことができます.デフォルトのすべてのプロパティが距離に与える影響は同じで、デフォルトのすべてのデータはクラスタに均一に分布します.データが3 D空間の円柱の場合、モデルは無効になります.
GMM
分かりにくいので、統計学の教材をひっくり返す必要があります.各特徴の重みが異なると仮定し,各クラスタにおけるデータ分布が不均一であると仮定する.理論的には任意の連続関数をフィッティングすることができる.計算量が多い.クラスタの1つのデータが正規分布、バイアス分布に従わない場合、クラスタアルゴリズムにばらつきが発生します.
sk-learnコード
k-means
GMM
K-means,K平均クラスタリングアルゴリズム
各clusterには中心点が存在すると仮定し、cluster内のすべてのデータ項目からこの中心点までのヨーロッパ式距離(勾配定理の拡張:各次元差の二乗和再開方)は他のcluster中心点までの距離よりも小さい.アルゴリズムのタスクは、これらのclusterの中心点を見つけることです.K-meansアルゴリズムは,まずK(一意のアルゴリズムパラメータ)個の点を中心点としてランダムに選択し,次いでヨーロッパ式距離を計算することによってすべてのデータ項目を分類する.照合後、平均アルゴリズム(mean)を使用して各クラスの中心点を再計算し、中心点が変化しないまで距離照合を計算し続け、収束が完了したとみなされます.
GMM,Gauss混合クラスタリングアルゴリズム
各クラスタのデータがガウス分布(常態分布または正規分布とも呼ばれる)に合致すると仮定し、現在のデータが示す分布は各クラスタの分布が重なる.EMアルゴリズムを使って解くのですが、具体的にはよくわかりません.2つのパラメータは、まずランダムに1つを指定し、それから別のパラメータを計算し、最後に結果と比較します.
アルゴリズムの特徴
K-means
アルゴリズムは簡単で、理解しやすい.計算量が少なく,収束が速い.分散計算を容易に行うことができます.デフォルトのすべてのプロパティが距離に与える影響は同じで、デフォルトのすべてのデータはクラスタに均一に分布します.データが3 D空間の円柱の場合、モデルは無効になります.
GMM
分かりにくいので、統計学の教材をひっくり返す必要があります.各特徴の重みが異なると仮定し,各クラスタにおけるデータ分布が不均一であると仮定する.理論的には任意の連続関数をフィッティングすることができる.計算量が多い.クラスタの1つのデータが正規分布、バイアス分布に従わない場合、クラスタアルゴリズムにばらつきが発生します.
sk-learnコード
k-means
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# cluster ,
for i in [2, 3, 4, 5, 6, 7, 8]:
clusterer = KMeans(n_clusters=i, random_state=1024)
clusterer.fit(data)
#
labels = clusterer.predict(data)
# ,[-1, 1]
silhouette_avg = silhouette_score(data, labels)
print("For clusters = ", i,
"The average silhouette_score is :", silhouette_avg)
if silhouette_avg > best_score:
best_clusterer = clusterer
best_score = silhouette_avg
best_cluster = i
#
print best_clusterer.centers_
GMM
from sklearn.mixture import GaussianMixture
from sklearn.metrics import silhouette_score
# cluster ,
for i in [2, 3, 4, 5, 6, 7, 8]:
clusterer = GaussianMixture(n_components=i, random_state=1024)
clusterer.fit(data)
#
labels = clusterer.predict(data)
# ,[-1, 1]
silhouette_avg = silhouette_score(data, labels)
print("For clusters = ", i,
"The average silhouette_score is :", silhouette_avg)
if silhouette_avg > best_score:
best_clusterer = clusterer
best_score = silhouette_avg
best_cluster = i
#
print best_clusterer.means_