Python实现K-means聚类算法及可视化

本篇博客介绍如何使用Python从零实现K-means聚类算法,并利用Matplotlib库将聚类结果可视化。

代码示例:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets

# kmeans聚类
class MyKmeans:
    # k是聚类数,n是迭代次数
    def __init__(self, k, n=20):
        self.k = k
        self.n = n

    def fit(self, x, centers=None):
        # 指定或随机选择k个点作为初始类中心
        if centers is None:
            idx = np.random.randint(low=0, high=len(x), size=self.k)
            centers = x[idx]

        inters = 0
        while inters < self.n:
            points_set = {key: [] for key in range(self.k)}
            # 遍历所有的点p,将p放入最近的聚类中心的集合
            for p in x:
                nearest_index = np.argmin(np.sum((centers - p) ** 2, axis=1) ** 0.5)
                points_set[nearest_index].append(p)

            # 遍历每一个点集,计算新的类中心 每类的平均值
            for i_k in range(self.k):
                centers[i_k] = sum(points_set[i_k]) / len(points_set[i_k])
            inters += 1

        return points_set, centers

# 读取Excel数据
df = pd.read_csv('your_excel_file.csv')
data = df[['feature1', 'feature2']].values  # 选择需要聚类的特征列

# 创建MyKmeans实例并进行训练
m = MyKmeans(3)  # 设置聚类数为3
points_set, centers = m.fit(data)

# 可视化聚类结果
for ix, p in enumerate(centers):
    plt.scatter(p[0], p[1], color='C{}'.format(ix), marker='d', edgecolor='black', s=256)
for i in range(len(points_set)):
    data_i = np.asarray(points_set[i])
    plt.scatter(data_i[:, 0], data_i[:, 1], color='C{}'.format(i))

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title('K-means聚类结果')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.show()

代码说明:

  1. 导入库: 导入必要的库,包括NumPy用于数值计算,Matplotlib用于可视化,Pandas用于读取Excel数据。
  2. MyKmeans类: 定义一个名为MyKmeans的类,实现K-means算法。
    • __init__方法初始化聚类数k和迭代次数n
    • fit方法接收数据x和可选的初始中心点centers,执行K-means算法并返回最终的聚类结果和中心点。
  3. 读取Excel数据: 使用Pandas库的read_csv函数读取Excel文件,并提取需要进行聚类的特征列数据。
  4. 创建MyKmeans实例并训练: 创建一个MyKmeans类的实例,并调用fit方法对数据进行训练,得到聚类结果和中心点。
  5. 可视化聚类结果: 使用Matplotlib库绘制散点图,将不同类别的数据点用不同颜色区分,并标记出每个类别的中心点。

使用说明:

  1. 将代码中的'your_excel_file.csv'替换为实际的Excel文件路径。
  2. 修改data = df[['feature1', 'feature2']].values,选择需要进行聚类的特征列。
  3. 运行代码即可看到聚类结果的可视化图像。

总结:

本篇博客介绍了如何使用Python实现K-means算法,并通过Matplotlib库对聚类结果进行可视化。同时还介绍了如何读取Excel数据进行聚类分析,希望对大家有所帮助。

Python实现K-means聚类算法及可视化

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

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