使用Python的 scikit-learn 库实现K-Means聚类算法的示例:
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 生成一些随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 创建K-Means聚类器,设置聚类数量为3
kmeans = KMeans(n_clusters=3, random_state=0)
# 对数据进行聚类
kmeans.fit(X)
# 获取聚类标签和聚类中心
labels = kmeans.labels_
centers = kmeans.cluster_centers_
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='x', s=200)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('K-Means Clustering Results')
plt.show()
在这个示例中,首先生成了100个二维的随机数据点,然后创建了一个K-Means聚类器并设置聚类数量为3,接着对数据进行聚类,最后将聚类结果可视化,不同类别的数据点用不同颜色表示,聚类中心用红色的 x 表示。
以下是一个使用DBSCAN算法的示例:
import numpy as np
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
# 生成一些随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 创建DBSCAN聚类器,设置半径为0.5,最小样本数为5
dbscan = DBSCAN(eps=0.5, min_samples=5)
# 对数据进行聚类
labels = dbscan.fit_predict(X)
# 绘制聚类结果
unique_labels = set(labels)
colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))
for k, col in zip(unique_labels, colors):
if k == -1:
# 噪声点用黑色表示
col = 'k'
class_member_mask = (labels == k)
xy = X[class_member_mask]
plt.scatter(xy[:, 0], xy[:, 1], c=col, marker='o', s=50)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('DBSCAN Clustering Results')
plt.show()
在这个示例中,创建了一个DBSCAN聚类器,设置了半径和最小样本数,然后对随机生成的数据进行聚类并可视化结果,噪声点被标记为黑色。
以下是一个使用层次聚类算法的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage, dendrogram
# 生成一些随机数据
np.random.seed(0)
X = np.random.randn(10, 2)
# 计算层次聚类
Z = linkage(X, 'ward')
# 绘制树状图
dendrogram(Z)
plt.xlabel('Data Points')
plt.ylabel('Distance')
plt.title('Hierarchical Clustering Dendrogram')
plt.show()
在这个示例中,使用 linkage 函数计算层次聚类,然后用 dendrogram 函数绘制树状图,展示数据点之间的层次关系。