读取iris_pca_self.csv中的数据,自编代码实现 鸢尾花Kmeans 聚类,不得直接调用 sklearn 或其他库中的 Kmeans 或类似的类和函数
时间: 2024-03-20 08:41:11 浏览: 67
好的,以下是用 Python 实现鸢尾花 Kmeans 聚类的代码。注意,这个代码只是一个简单的示例,如果要使用更复杂的数据集,还需要进行更多的优化和改进。
```
import numpy as np
import pandas as pd
import random
# 读取数据
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(new_centers - centers) == 0:
flag = False
else:
centers = new_centers
return labels
# 聚类结果
labels = kmeans(X, 3)
print(labels)
```
在这个代码中,我们首先读取了 iris_pca_self.csv 文件中的数据,并将其存储在一个 NumPy 数组中。然后,我们使用随机选择的方法初始化聚类中心,并计算所有样本到聚类中心的距离。接着,我们找到距离每个样本最近的聚类中心,并将其分配到相应的聚类中心中。接下来,我们使用新的聚类中心更新聚类中心,并检查是否收敛。如果没有收敛,则继续迭代,否则退出循环,返回聚类结果。最后,我们打印聚类结果。
请注意,这个代码并不是最优的,但它可以作为学习 Kmeans 聚类的入门代码。你可以根据自己的需要对其进行优化和改进。
阅读全文