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)

代码解释

  1. distance(pt1, pt2) 函数: 计算两点 pt1pt2 之间的欧氏距离。
  2. classify(pt, centers) 函数:
    • 计算给定点 pt 到各个中心点的距离。
    • 使用 np.argmin() 找到距离最小的中心点的索引。
    • 返回最近中心点的索引和距离。
  3. 主程序:
    • 初始化示例数据:数据点 X 和中心点 centers
    • 创建空列表 categories 用于存储每个类别下的点。
    • 遍历所有数据点:
      • 使用 classify() 函数找到离当前点最近的中心点。
      • 将当前点的距离添加到 distances 列表中。
      • 将当前点添加到对应类别的列表中 (categories[index].append(pt))。
    • 使用 np.mean() 计算所有点到其所属中心点的平均距离。
    • 打印结果,包括每个点的距离、平均距离和分类结果。

总结

这段代码演示了KMeans算法中查找最近中心点的步骤,是实现完整KMeans算法的基础。通过计算每个点到各个中心点的距离,并将其归类到最近的中心点,可以实现数据的聚类分析。

Python实现KMeans算法:查找最近中心点

原文地址: https://www.cveoy.top/t/topic/jpXW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录