Python聚类算法

使用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 函数绘制树状图,展示数据点之间的层次关系。