KMeans实验(以鸢尾花为例)

embedded/2024/11/26 18:18:34/

KMeans实验是一个经典的聚类分析实验,它利用KMeans算法将数据集中的样本分成K个簇,使得同一簇内的样本尽可能相似,而不同簇的样本尽可能不同。以下是以常用数据集(如鸢尾花数据集)为例的KMeans实验详细过程和内容,包括公式。

一、实验目的

  1. 加深对非监督学习的理解和认识。
  2. 掌握KMeans聚类算法的设计方法和实现过程。

二、实验环境

  • 具有相关编程软件的PC机,如Python环境,并安装必要的库如numpy、matplotlib、sklearn等。

三、实验内容

1. 数据准备
  • 选择鸢尾花数据集作为实验数据。鸢尾花数据集包含150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度,以及对应的类别标签(setosa、versicolor、virginica)。
2. 数据预处理
  • 去除类别标签,因为KMeans是无监督学习算法,不需要类别标签。
  • 标准化数据,使得每个特征的均值为0,方差为1。这有助于加快KMeans算法的收敛速度,并提高聚类效果。
3. KMeans算法实现

KMeans算法的目标是最小化簇内平方误差和(Sum of Squared Errors, SSE),即所有数据点到其对应簇中心的距离平方和。目标函数公式为:

J=∑k=1K∑xi∈Ck∣∣xi−μk∣∣2J = \sum_{k=1}^{K} \sum_{x_i \in C_k} ||x_i - \mu_k||^2J=k=1∑K​xi​∈Ck​∑​∣∣xi​−μk​∣∣2

其中:

  • xxx_ixi​ 表示每个数据点;
  • μk\mu_kμk​ 表示第 kkk 个簇的簇中心;
  • CkC_kCk​ 表示第 kkk 个簇中的所有数据点。

KMeans算法的具体步骤如下:

  1. 初始化:随机从数据集中选择 KKK 个点作为初始簇中心。
  2. 分配簇:对每个数据点,计算其到每个簇中心的距离,并将其分配到最近的簇。
  3. 更新簇中心:对于每个簇,重新计算簇内所有数据点的均值作为新的簇中心。
  4. 重复迭代:重复步骤2和3,直到簇中心不再发生变化或达到预设的迭代次数。

在Python中,可以使用sklearn库中的KMeans类来实现KMeans算法。以下是具体的代码实现:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans# 加载鸢尾花数据集
iris = load_iris()
X = iris.data# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 设置簇的数量为3(因为鸢尾花数据集有3个类别)
kmeans = KMeans(n_clusters=3, random_state=42)# 训练模型
kmeans.fit(X_scaled)# 获取聚类结果
y_kmeans = kmeans.predict(X_scaled)# 可视化聚类结果(选择两个特征进行可视化)
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75)
plt.title('KMeans Clustering on Iris Dataset')
plt.xlabel('Feature 1 (standardized)')
plt.ylabel('Feature 2 (standardized)')
plt.show()

在这里插入图片描述

4. 实验结果分析
  • 观察聚类结果,可以发现KMeans算法能够将鸢尾花数据集分成3个簇,每个簇对应一个类别。
  • 通过计算SSE、轮廓系数等指标来评估聚类效果。SSE越小,表示簇内数据点越紧密;轮廓系数越大,表示聚类效果越好。
  • 可以尝试不同的初始值、不同的簇数量 KKK,观察对聚类结果的影响。一般来说,初始值的选择对KMeans算法的结果有一定影响,但使用KMeans++等改进方法可以减小这种影响。簇数量 KKK 的选择需要根据实际问题和数据集的特点来确定,可以通过肘部法、轮廓系数等方法来选择合理的 KKK 值。

四、结论

KMeans算法是一种简单高效的聚类算法,在数据挖掘、图像处理等领域有着广泛的应用。通过本次实验,我们加深了对非监督学习的理解和认识,掌握了KMeans聚类算法的设计方法和实现过程。同时,也学会了如何评估聚类效果、如何选择合理的簇数量等实际问题。


http://www.ppmy.cn/embedded/140682.html

相关文章

基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面

文章目录 0、前言 1、目标 2、图片的预处理 3、SD NAND的预处理 4、FPGA实现 4.1、详细设计 4.2、仿真 4.3、实验结果 前言 在上一篇文章《基于FPGA的SD卡的数据读写实现(SD NAND FLASH)》中,我们了解到了SD NAND Flash的相关知识&am…

Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)

使用Flink编写代码,步骤非常固定,大概分为以下几步,只要牢牢抓住步骤,基本轻松拿下: 1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 DataStream API开发 //n…

基于YOLOv8深度学习的智慧课堂教师上课行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着人工智能技术的迅猛发展,智能课堂行为分析逐渐成为提高教学质量和提升教学效率的关键工具之一。在现代教学环境中,能够实时了解教师的课堂表现和行为,对于促进互动式教学和个性化辅导具有重要意义。传统的课堂行为分析依赖于人工观测&…

python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改

Two-Step Vertification required: Please enter the mobile app OTPverification code: 01.因为巡检的服务器要双因子认证登录,也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录,算一次会话…

conda下载与pip下载的区别

一、conda下载与pip下载的区别 最重要是依赖关系: pip安装包时,尽管也对当前包的依赖做检查,但是并不保证当前环境的所有包的所有依赖关系都同时满足。 当某个环境所安装的包越来越多,产生冲突的可能性就越来越大。conda会检查当…

CentOS环境上离线安装python3及相关包

0. 准备操作系统及安装包 准备操作系统环境: 首先安装依赖包,安装相应的编译工具 [rootbigdatahost bin]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-d…

Vscode 删除键删除失效

在使用vscode时,对代码进行某些操作后使得键盘无法正确编辑代码,类似于启用了windows中的insert键且光标变粗。 此时造成这种情况的原因很有可能是由于插件冲突,禁用插件即可解决。我是把这个插件直接删除掉

《探秘嗅觉传感器:开启感知新纪元》

《探秘嗅觉传感器:开启感知新纪元》 一、嗅觉传感器的神秘面纱二、嗅觉传感器的工作原理三、嗅觉传感器的发展现状四、嗅觉传感器的应用领域五、未来嗅觉传感器的发展趋势 一、嗅觉传感器的神秘面纱 (一)什么是嗅觉传感器 嗅觉传感器是一种能…