这里是对鸢尾花进行分类,如果要修改,只需要换路径df还有种类k就可以了。具体逻辑在很多博客讲解已经很清楚了。
import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt
df = pd.read_csv("C:/Users/wxc/Desktop/xuexi/pythonProject/机器学习/分类与聚类/kmeans/ris.csv")
X_train = df.iloc[:, 0:4].values# 将数据集转换为numpy数组
k = 3# 设置聚类中心的个数
random_point = X_train[random.sample(range(len(X_train)), k)]# 这里是用的numpy数组,从 X_train 中随机选择 k 个样本作为初始的聚类中心
# 计算欧式距离,并将每个样本分配到最近的聚类中心
def assign_cluster(X_train, random_point):
cluster_assignment = []
for x in X_train:
distances = [np.linalg.norm(x - point) for point in random_point] #这里在进行欧式距离的计算
closest_cluster = np.argmin(distances) # 获取最小距离对应的聚类中心的索引值
cluster_assignment.append(closest_cluster) #添加进去
return cluster_assignment
# 更新聚类中心
def New_centers(X_train, cluster_assignment, k):
new_centers = []
for i in range(k):
cluster_mean = X_train[cluster_assignment == i].mean(a