调用 matplotlib 的 scatter 函数将聚类后各样本以及聚类中心的可视化 输出(不同簇内的样本用不同的颜色表示)。(也可以调用其他第三方库进行样 本的可视化)
时间: 2024-03-20 13:41:16 浏览: 142
Matlab实现基于谱聚类(Spectral Cluster)的聚类算法可视化(完整源码和数据)
好的,以下是用 Python Matplotlib 库将聚类结果可视化的代码:
```
import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv("iris_pca_self.csv")
X = data.values
# 初始化聚类中心
def init_centers(X, k):
centers = random.sample(list(X), k)
return np.array(centers)
# 计算样本到聚类中心的距离
def calc_distance(X, centers):
distances = []
for center in centers:
distance = np.sqrt(np.sum((X - center) ** 2, axis=1))
distances.append(distance)
return np.array(distances).T
# Kmeans 聚类
def kmeans(X, k):
centers = init_centers(X, k)
# 迭代停止标志
flag = True
while flag:
# 计算距离
distances = calc_distance(X, centers)
# 找到距离最近的聚类中心
labels = np.argmin(distances, axis=1)
# 更新聚类中心
new_centers = []
for i in range(k):
new_center = np.mean(X[labels == i], axis=0)
new_centers.append(new_center)
# 判断是否收敛
if np.sum(np.array(new_centers) - np.array(centers)) == 0:
flag = False
else:
centers = new_centers
return labels, centers
# 聚类结果
labels, centers = kmeans(X, 3)
# 可视化
plt.figure(figsize=(10, 8))
colors = ['r', 'g', 'b']
for i in range(3):
plt.scatter(X[labels == i, 0], X[labels == i, 1], c=colors[i], label='Cluster %d' % i)
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='black', label='Centroids')
plt.legend()
plt.title('Kmeans Clustering')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
```
在这个代码中,我们使用了 Matplotlib 的 scatter 函数将聚类后各样本以及聚类中心可视化。我们首先使用 `kmeans` 函数计算出聚类结果和聚类中心。接下来,我们使用 `plt.scatter()` 函数将不同簇内的样本用不同的颜色表示,并使用 `plt.scatter()` 函数将聚类中心用星形符号标记为黑色。最后,我们使用 `plt.legend()` 函数添加图例,并使用 `plt.title()`、`plt.xlabel()` 和 `plt.ylabel()` 函数添加标题和坐标轴标签。最终,我们使用 `plt.show()` 函数显示图形。
这个代码可以将聚类结果可视化。你可以根据自己的需要对其进行优化和改进。
阅读全文