Python实现KMeans算法:查找最近中心点
Python实现KMeans算法:查找最近中心点
本文介绍如何使用Python和NumPy实现KMeans算法的核心部分:查找最近中心点。
代码实现
import numpy as np
def distance(pt1, pt2):
# 计算两点之间的欧氏距离
return np.linalg.norm(pt1 - pt2)
def classify(pt, centers):
# 计算给定点pt到各个中心点的距离,返回最近中心点的索引和距离
temp = [distance(pt, centers[i]) for i in range(len(centers))]
index = np.argmin(temp)
dist = temp[index]
return (index, dist)
# 示例数据
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
centers = np.array([[1, 1], [8, 9]])
categories = [[], []] # 用于存储每个类别下的点
# 将每个点归入到离它最近的中心点类别下
########## Begin ##########
distances = []
for i in range(len(X)):
pt = X[i]
index, dist = classify(pt, centers)
distances.append(dist)
categories[index].append(pt)
avg_distance = np.mean(distances)
########## End ##########
# 打印结果
print('每个点到其所属中心点的距离:', distances)
print('平均距离:', avg_distance)
print('分类结果:', categories)
代码解释
distance(pt1, pt2)函数: 计算两点pt1和pt2之间的欧氏距离。classify(pt, centers)函数:- 计算给定点
pt到各个中心点的距离。 - 使用
np.argmin()找到距离最小的中心点的索引。 - 返回最近中心点的索引和距离。
- 计算给定点
- 主程序:
- 初始化示例数据:数据点
X和中心点centers。 - 创建空列表
categories用于存储每个类别下的点。 - 遍历所有数据点:
- 使用
classify()函数找到离当前点最近的中心点。 - 将当前点的距离添加到
distances列表中。 - 将当前点添加到对应类别的列表中 (
categories[index].append(pt))。
- 使用
- 使用
np.mean()计算所有点到其所属中心点的平均距离。 - 打印结果,包括每个点的距离、平均距离和分类结果。
- 初始化示例数据:数据点
总结
这段代码演示了KMeans算法中查找最近中心点的步骤,是实现完整KMeans算法的基础。通过计算每个点到各个中心点的距离,并将其归类到最近的中心点,可以实现数据的聚类分析。
原文地址: https://www.cveoy.top/t/topic/jpXW 著作权归作者所有。请勿转载和采集!