自编代码实现 鸢尾花Kmeans 聚类 步骤 3.6:读入 PCA 降维后的二维鸢尾花数据集 步骤 3.7:按 Kmeans 算法描述的过程完成数据集的聚类处理(取 K=2)(注意: 不得直接调用 sklearn 或其他库中的 Kmeans 或类似的类和函数),并输出聚类 结果(各样本的所属簇编号,以及各簇的聚类中心向量)
时间: 2024-03-20 17:40:07 浏览: 23
好的,以下是 Python 代码实现:
```python
import numpy as np
# 步骤 3.6:读入 PCA 降维后的二维鸢尾花数据集
data = np.loadtxt('iris_pca.txt', delimiter=',')
# 步骤 3.7:按 Kmeans 算法描述的过程完成数据集的聚类处理(取 K=2)
K = 2
n_samples, n_features = data.shape
centers = np.zeros((K, n_features))
labels = np.zeros(n_samples)
# 随机初始化聚类中心
for i in range(K):
centers[i] = data[np.random.choice(range(n_samples))]
# 迭代计算聚类中心和样本所属簇编号
for _ in range(100):
for i in range(n_samples):
distances = np.linalg.norm(data[i] - centers, axis=1)
labels[i] = np.argmin(distances)
for j in range(K):
centers[j] = np.mean(data[labels == j], axis=0)
# 输出聚类结果
print('各样本的所属簇编号:', labels.astype(int))
print('各簇的聚类中心向量:', centers)
```
这里假设 PCA 降维后的二维鸢尾花数据集已经保存在文件 `iris_pca.txt` 中,每行包含两个特征值,用逗号分隔。代码首先读入数据集,然后随机初始化 K 个聚类中心。接着进行迭代计算,分配每个样本到距离最近的聚类中心所属的簇中,并更新每个簇的中心点。最后输出聚类结果,包括各样本的所属簇编号和各簇的聚类中心向量。注意,这里的聚类中心向量是二维的,因为我们使用 PCA 将原始四维数据压缩成了两维。