Back to Blogs
machine learning
clustering
机器学习

机器学习聚类模型

Soloman
2021-03-13

机器学习聚类模型

1 相似度度量方式

  • 欧式距离
  • 曼哈顿距离
  • 闵式距离

2 K均值聚类(K-Means)

几何中心:在KMeans算法中,簇的个数n_clusters是一个超参数,需要我们人为输入来确定。KMeans的核心任务就是根据我们设定好的个数,找出n_clusters个最优的质心,并将离这些质心最近的数据分别分配到这些质心代表的簇中去。

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

x, y = make_blobs(n_samples=300, centers=4, random_state=1)
kmeans = KMeans(n_clusters=4)  # 设定要分成的类/聚类数目为4
kmeans.fit(x)
centers = kmeans.cluster_centers_
labels = kmeans.labels_
print(centers)
# 绘制数据点和聚类中心
plt.scatter(x[:, 0], x[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=100, marker='*')
plt.show()

3 噪声密度聚类(DBSCAN)

DBSCAN是一种基于密度的聚类算法。DBSCAN算法的主要优势在于它不需要用户指定聚类数量,可以发现任意形状的聚类。

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt

x, y = make_circles(100, factor=0.5, noise=0.2)
dbscan = DBSCAN(eps=0.3, min_samples=5)
y_pred = dbscan.fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred, cmap='viridis')
plt.title("DBSCAN Clustering")
plt.show()
  • 核心点
  • 边界点
  • 噪声点

4 凝聚层次聚类

凝聚聚类(agglomerative clustering)指的是许多基于相同原则构建的聚类算法,这一原则是:算法首先声明每个点是自己的簇,然后合并两个最相似的簇,直到满足某种停止准则为止。scikit-learn 中实现的停止准则是簇的个数,因此相似的簇被合并,直到仅剩下指定个数的簇。

import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs

x, y = make_blobs(n_samples=300, centers=5, random_state=1)
ward = AgglomerativeClustering(n_clusters=5, linkage='ward')
pred = ward.fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=pred, cmap='viridis')
plt.show()

scikit-learn 提供了下面三种链接准则:

  • ward
  • complete
  • average

5 聚类评价指标

轮廓系数