基于python的k_means算法实现

小菜鸡的博客

前言

本篇文章主要是基于python,编程实现K_means算法的可视化。
编码的数据来源是一些地理坐标,以 txt 格式存储。

一、K_means是什么?

K-Mean算法,即 K 均值算法,是一种常见的聚类算法。算法会将数据集分为 K 个簇,每个簇使用簇内所有样本均值来表示,将该均值称为”质心”。

1. 原理

容易受初始质心的影响;算法简单,容易实现;算法聚类时,容易产生空簇;算法可能收敛到局部最小值。

通过聚类可以实现:发现不同用户群体,从而可以实现精准营销;对文档进行划分;社交网络中,通过圈子,判断哪些人可能互相认识;处理异常数据。

距离计算方式是 欧式距离。

1.从样本中选择 K 个点作为初始质心(完全随机)
2.计算每个样本到各个质心的距离,将样本划分到距离最近的质心所对应的簇中
3.计算每个簇内所有样本的均值,并使用该均值更新簇的质心
4.重复步骤 2 与 3 ,直到达到以下条件之一:
质心的位置变化小于指定的阈值
达到最大迭代次数

二、编程实现

通过原理我们可以发现,实现K_means算法的三个关键点在于:
(1)初始的K值选取;
(2)质心变化的限定阈值;
(3)最大迭代次数,确保算法最终能够停止。
当然越好的距离计算公示得到的聚类簇就越完美,一般是使用欧式距离公式
此外由于python提供了数据挖掘类的一些库,编程就很简单了

1. 首先引入库

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

2.读入数据

with open("testSet.txt") as file:
    data = np.loadtxt(file)

这里采用np库将文本类型的数据结构转换成元组

3.算法实现

其实将坐标直接可视化就已经可以确定K的值了,但是一些极端的数据聚类时可能我们人眼分的并不好这里可以采用SSE用于评估算法的聚类效果,同时通过SSE选取落差最大的K值作为聚类的质心。代码奉上:


k = 4
model = KMeans(n_clusters=k, init="random",
               max_iter=200, tol=1e-04)

model = model.fit(data)

是不是觉得很简单,分别设置质心,质心的选取方式(这个其他的选取方式大家可以看这里:python K_means库介绍
然后设置迭代次数以及阈值

4.可视化实现

就是简单的利用matplotlib库而已


plt.figure(2)
colors = ['b', 'g', 'y', 'c', 'pink']
markers = ['v', 's', 'o', '1', '2', '3']
plt.title("K_means")
plt.xlabel('East Longitude', fontsize=10)
plt.ylabel('North Latitude', fontsize=10)
for id, label in enumerate(model.labels_):
    plt.scatter(data[id][0], data[id][1],
                color=colors[label], marker=markers[label],
                s=20)

plt.scatter(
    model.cluster_centers_[:, 0], model.cluster_centers_[:, 1],
    color='red', label="centroids", s=50, marker='v'
)
plt.grid(True)

三、完整代码及展示

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

with open("数据文件名称.txt") as file:
    data = np.loadtxt(file)

plt.figure(1)
plt.title("First")
plt.xlabel('East Longitude', fontsize=10)
plt.ylabel('North Latitude', fontsize=10)

plt.scatter(data[:, 0], data[:, 1], color="red",
            marker='o', s=20)
plt.grid(True)

k = 4
model = KMeans(n_clusters=k, init="random",
               max_iter=200, tol=1e-04)

model = model.fit(data)

plt.figure(2)
colors = ['b', 'g', 'y', 'c', 'pink']
markers = ['v', 's', 'o', '1', '2', '3']
plt.title("K_means")
plt.xlabel('East Longitude', fontsize=10)
plt.ylabel('North Latitude', fontsize=10)
for id, label in enumerate(model.labels_):
    plt.scatter(data[id][0], data[id][1],
                color=colors[label], marker=markers[label],
                s=20)

plt.scatter(
    model.cluster_centers_[:, 0], model.cluster_centers_[:, 1],
    color='red', label="centroids", s=50, marker='v'
)
plt.grid(True)

SSE = []
for k in range(1, 7):
    cn = KMeans(n_clusters=k)
    cn.fit(data)
    SSE.append(cn.inertia_)
plt.figure(3)
X = range(1, 7)
plt.xlabel("K")
plt.ylabel("SSE")
plt.plot(X, SSE, 'o-')
plt.show()

然后展示我运行的一个结果
直接以坐标画点,这里我们就已经可以看出K应该取4.

基于python的k_means算法实现

套用K-means聚类:

基于python的k_means算法实现

SSE展示界面:

基于python的k_means算法实现
最后啰嗦一句,代码中的参数大家可以根据自己的实际情况进行修改,同时这个代码也不够精炼,供大家参考就好。

总结

以上就是今天要讲的内容,本文仅仅就是一个简单的基于python实现的

K-means算法的可视化,没有什么难的地方,就是简单的套用一些python的库。如果大家觉得对自己有一些帮助,还请点个赞哦,本人也是初学者,互帮互助。谢谢!!!!😊😊😊

Original: https://blog.csdn.net/xioacaiji/article/details/122811115
Author: 小菜鸡@
Title: 基于python的k_means算法实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/549704/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 基于粒子群优化算法的UAV三维路径规划研究付Matlab代码

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。 Original: https:…

    人工智能 2023年6月30日
    0118
  • 自编码器的理解与应用

    *什么是自编码器(AutoEncoder)? 自编码器可以认为是一种数据压缩算法,或特征提取算法。是一种无监督学习,基于反向传播算法和最优化方法,利用数据 x 本身作为监督来指导神…

    人工智能 2023年6月19日
    0106
  • 9大时序异常检测方法汇总

    异常检测(Anomaly detection)是目前时序数据分析最成熟的应用之一,定义是从正常的时间序列中识别不正常的事件或行为的过程。 有效的异常检测被广泛用于现实世界的很多领域…

    人工智能 2023年7月28日
    092
  • Ubuntu20.04安装tensorflow2.8.0+CUDA11.4

    Ubuntu20.04安装tensorflow2.8.0+CUDA11.4 * – 1. 创建虚拟环境 – 2. 安装tensorflow – …

    人工智能 2023年5月24日
    0164
  • HAWE放大板_EV1M3-24/48_现货

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    人工智能 2023年6月28日
    068
  • hive实训项目之电商数据分析

    题干: 某大型电商公司从后台服务器收集到30W条的日志用户行为数据,经过数据初步清洗得到数据如下表sale_user.zip,假如你是该公司一员开发工程师,需要你利用大数据集群为公…

    人工智能 2023年6月11日
    0174
  • 深度学习提高模型准确率方法

    这里写目录标题 深度学习 * 数据 – 使用更多数据 更改图像大小 减少颜色通道 算法 – 模型改进 增加训练轮次 迁移学习 添加更多层 调整超参数 总结 …

    人工智能 2023年6月15日
    0121
  • ENVI经验|基于多源遥感影像的红树林范围提取4-面向对象分类

    传统的基于像素的遥感影像处理方法都是基于遥感影像光谱信息极其丰富,地物间光谱差异较为明显的基础上进行的。对于只含有较少波段的高分辨率遥感影像,传统的分类方法,就会造成分类精度降低,…

    人工智能 2023年7月2日
    094
  • 扩散模型又杀疯了!这一次被攻占的领域是…

    文 | Yimin_饭煲 从2020年的初出茅庐,到2021年的日趋火热,再到2022年的大放异彩, 扩散模型(Diffusion Models) 正在人工智能学术界和工业界获取越…

    人工智能 2023年6月15日
    0101
  • 工具|如何在shell中漂亮地打印JSON

    Linux curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl…

    人工智能 2023年6月27日
    086
  • STM32F1C8T6音频数据读写和DAC播放

    目录 一、题目 二、FLASH地址空间数据读取 2.1FLASH原理 2.2工具 2.3创建CUBEMX工程 2.4代码编辑 2.4烧录程序 2.5调试 三、基于flash的提示音…

    人工智能 2023年5月23日
    0130
  • 【目标检测】—–YOLOV5网络结构详解

    ; yolov5 可以看出,相比于之前v5.x,最新版的v6.x网络结构更加精简(以提高速度和推理性能),主要有以下更新: 1. CBL模块 网络中的标准卷积层,有2D卷积+BN层…

    人工智能 2023年7月10日
    0103
  • springcloud3 EurekaClient集群的搭建2

    一 概述 1.1 概述 本文主要是搭建集成eurekaserver的几个客户端,即服务提供者,消费者。架构图如下所示 1.2 使用eureka整合的优点 使用Eureka管理注册的…

    人工智能 2023年7月29日
    070
  • 图神经网络框架-PyTorch Geometric(PyG)的使用及踩坑

    PyG(PyTorch Geometric)是一个基于PyTorch的图神经网络框架,建议先了解PyTorch的使用再学习PyG,要不然看不懂。本文内容角度,喜欢本文点赞支持、欢迎…

    人工智能 2023年7月13日
    069
  • mlp多层感知机预测(python)

    可以对比我之前发布的文章1.BP神经网络预测(python)2.lstm时间序列预测+GRU(python)3. 数据集点击此处即可进行下载这篇文章用的数据和我之前发布的BP神经网…

    人工智能 2023年7月5日
    094
  • mosaic数据增强

    mosaic数据增强则利用了四张图片,对四张图片进行拼接,每一张图片都有其对应的框框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框框,然后我们将这样一张新的图片…

    人工智能 2023年5月26日
    059
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球