k-means聚类算法(matlab实现)

article/2025/10/21 16:07:45

k-means聚类算法

文章目录

  • k-means聚类算法
  • 前言
  • 一、k-means聚类算法简介
  • 二、k-means聚类算法步骤
  • 三、代码实现
  • 总结


前言

k-means聚类算法是硬聚类算法的一种,即在n纬欧几里得空间把n个样本数据分为k类。首先根据用户要确定聚类的数目k,随机性的选取k个样本,把每一个对象成为一个种子,每一个种子代表一个类的中心,对其余的每个对象,采用近邻原则,将它们赋给最近的类。重新计算在每个类中对象的均值新形成的聚类中心,重复进行这个过程直到函数式收敛为止。

k-means聚类算法的改进:
k-means++算法链接: https://blog.csdn.net/qq_40276082/article/details/130237784?spm=1001.2014.3001.5501


一、k-means聚类算法简介

K-means算法是一种无监督学习算法,用于将n个数据点划分为k个簇(cluster)。该算法的主要思想是将数据点划分为k个簇,使得同一簇内的数据点彼此相似,而簇间的数据点相差较大。
K-means算法是一种迭代算法,其核心是利用距离度量来度量不同数据点之间的相似度,并利用质心来表示簇的中心。在每次迭代中,算法通过更新簇质心和重新分配数据点来优化簇的划分。具体来说,算法的步骤如下:

初始化:随机选择k个数据点作为初始质心,将所有数据点分配到距离最近的质心所在的簇中。

簇分配:对于每个数据点,计算其到k个质心的距离,将其分配到距离最近的质心所在的簇中。

更新质心:对于每个簇,计算其所有数据点的平均值,将其作为新的质心。

重复步骤2和步骤3,直到簇的分配不再改变或达到最大迭代次数。

二、k-means聚类算法步骤

在这里插入图片描述

三、代码实现

代码如下(示例):

clc
clear
a=[22.5661	113.9808	66
22.6862	113.9405	65.5
22.5648	114.2446	75
22.5589	113.9507	65.5
22.559	114.2413	75
22.5628	113.9566	65.5
22.5	113.8957	66
22.5249	113.9309	65.5
22.5191	113.9358	65.5
22.4982	113.8985	66
23.0057	112.9708	75
23.0391	113.0726	66
22.9408	113.0627	72.5
23.0408	113.1116	65
23.0387	113.1074	65.5
23.0042	113.0704	66.5
23.0489	113.0719	66
23.0104	113.1463	66
23.0058	113.1356	65.5
22.8821	113.2179	68.5
23.0401	113.1075	65.5
22.9946	113.1409	72
22.9789	113.0167	72
22.9456	113.09	72
23.0441	113.1258	65.5
];
N=length(a(:,1));
X=[];
Y=[];for j=1:Nf=a(j,1);
w=a(j,2);
X=vertcat(X,f);
Y=vertcat(Y,w);end
N=length(X(:,1));
plot(X, Y, 'k*'); % 绘出原始的数据点
xlabel('X');
ylabel('Y');
title('聚类之前的数据点');
n = 2; %将所有的数据点分为两类
m = 1; %迭代次数
eps = 1e-7; % 迭代结束的阈值
u1 = [X(1),Y(1)]; %初始化第一个聚类中心
u2 = [X(2),Y(2)]; %初始化第二个聚类中心
U1 = zeros(2,100);
U2 = zeros(2,100); %U1,U2 用于存放各次迭代两个聚类中心的横纵坐标
U1(:,2) = u1;
U2(:,2) = u2;
D = zeros(2,N); %初始化数据点与聚类中心的距离
while(abs(U1(1,m) - U1(1,m+1)) > eps || abs(U1(2,m) - U1(2,m+1) > eps || abs(U2(1,m) - U2(1,m+1)) > eps || abs(U2(2,m) - U2(2,m+1)) > eps))m = m +1;% 计算所有点到两个聚类中心的距离
for i = 1 : ND(1,i) = sqrt((X(i) - U1(1,m))^2 + (Y(i) - U1(2,m))^2);
end
for i = 1 : ND(2,i) = sqrt((X(i) - U2(1,m))^2 + (Y(i) - U2(2,m))^2);
end
A = zeros(2,N); % A用于存放第一类的数据点
B = zeros(2,N); % B用于存放第二类的数据点
for k = 1: N[MIN,index] = min(D(:,k)); if index == 1  % 点属于第一个聚类中心A(1,k) = X(k);A(2,k) = Y(k);else           % 点属于第二个聚类中心B(1,k) = X(k);B(2,k) = Y(k);end
end
indexA = find(A(1,:) ~= 0); % 找出第一类中的点
indexB = find(B(1,:) ~= 0); % 找出第二类中的点
U1(1,m+1) = mean(A(1,indexA));
U1(2,m+1) = mean(A(2,indexA));
U2(1,m+1) = mean(B(1,indexB));
U2(2,m+1) = mean(B(2,indexB)); % 更新两个聚类中心
end
figure;
plot(A(1,indexA) , A(2,indexA), '*b'); % 作出第一类点的图形
hold on
plot(B(1,indexB) , B(2,indexB), '*g'); %作出第二类点的图形
hold on
centerx = [U1(1,m) U2(1,m)]
centery = [U1(2,m) U2(2,m)]
plot(centerx , centery, 'or'); % 画出两个聚类中心点
xlabel('X');
ylabel('Y');
title('聚类之后的数据点');
disp(['迭代的次数为:',num2str(m)]);

运行结果:
在这里插入图片描述


总结

K-means算法的优点在于简单、易于实现,适用于大型数据集。但是,它也有一些缺点。首先,K-means算法对于数据点分布的先验知识敏感,且容易收敛到局部最优解。其次,K-means算法要求每个簇的大小相等,这在某些情况下可能会导致不合理的结果。最后,K-means算法对于噪声和异常值敏感,因为它只考虑数据点之间的欧几里德距离,而没有考虑其他距离度量或数据结构。


http://chatgpt.dhexx.cn/article/AK8W7WkU.shtml

相关文章

Kmeans聚类算法——Matlab

聚类算法 原理步骤代码绘图选取四个迭代步骤进行可视化(散点图,条形图)聚类结果可视化(散点图) 原理 聚类算法的基本思想是:以空间中k个点为中心进行聚类,对距离他们最近的对象进行归类。通过迭…

matlab实现聚类算法

simulate2020625数据集 clear;clc load simulate2020625;kmax(subcluster(:,3));%设置聚类数目 data subcluster(:,1:2); cata subcluster; [m,n]size(data); c1subcluster(:,3); c1c1;%% 实际聚类图 figure(1); plot(cata(cata(:,3)1,1),cata(cata(:,3)1,2),r*) hold on pl…

K-means++聚类算法(matlab实现)

K-means聚类算法 文章目录 K-means聚类算法前言一、算法简介二、K-means算法步骤三、K-means算法matlab实现总结 前言 K-means算法:K-means算法是K-means算法的改进版,其在选择初始质心时采用了一种更加聪明的方法,能够有效地避免局部最优解…

MATLAB聚类分析(Cluster Analysis)

使用环境:MATLAB2016a、MATLAB2010a 聚类分析是一种无监督式学习,不像回归分析等需要Inputs 和 Targets ,聚类分析是只通过提供一组数据实现分类的算法。下面给出本人在学习聚类分析的MATLAB程序 x15*[randn(500,1)5,randn(500,1)5]; x25*[…

matlab统计与机器学习工具箱中的7种聚类算法

1. matlab中自带聚类算法概述 本文简要概述了matlab统计和机器学习工具箱中可用的聚类方法,并给出了其聚类函数。在使用过程中,直接调用该函数即可,十分方便,不得不感慨matlab的强大。 聚类分析,又称分割分析或分类分…

K-mean(多维度)聚类算法(matlab代码)

申明: 仅个人小记。 Email: officeforcsdn163.com 目录 效果演示二维度三维度 k-mean 算法思想简要说明代码分析二维度k-mean代码三维度k-mean代码多维度k-mean代码功能使用示范后期函数接口改造 (借助matlab中cell结构实现)新的函数接口使用范例 小结 效果演示 二维度 (1) K…

k-Means——经典聚类算法实验(Matlab实现)

聚类算法—k-Means实验 k-平均(k-Means),也被称为k-均值,是一种得到最广泛使用的聚类算法[1]. k-Means算法以k为参数,把n个对象分为k个簇,使得簇内具有较高的相似度。 实验目的 了解常用聚类算法及其优缺…

MATLAB K-means聚类的介绍与使用

K-means算法是硬聚类算法 ,是典型的基于原型的目标函数 聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以偶是距离 作为相似度测度,它是求对应某一初…

MatLab Kmeans聚类

机器学习以及人工智能的学习需要扎实的数学功底才能走的更远,爬的更高,所以打好数学基础是关键,但无论工作学习都没有充足的时间去拿着书本一个字一个字的去学习了,这里我建议大家找几个比较靠谱入门的机器学习或者人工智能学习平…

聚类分析(二)k-means及matlab程序

1.介绍 k-means是一种常见的基于划分的聚类算法。划分方法的基本思想是:给定一个有N个元组或者记录的数据集,将数据集依据样本之间的距离进行迭代分裂,划分为K个簇,其中每个簇至少包含一条实验数据。 2.k-means原理分析 2.1工作原…

数据挖掘实验(七)Matlab实现聚类算法【clusterdata / kmeans】

本文代码均已在 MATLAB R2019b 测试通过,如有错误,欢迎指正。 另外,这次实验都是调用Matlab现成的函数,没什么技术含量。 (一)聚类分析的原理 聚类是将数据分类到不同的类或者簇这样的一个过程&#xff…

K-means聚类 —— matlab

目录 1.简介 2.算法原理 3.实例分析 3.1 读取数据 3.2 原理推导K均值过程 3.3 自带kmeans函数求解过程 完整代码 1.简介 聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为…

聚类分析的Matlab 程序—系统聚类(附有案例分析)

聚类分析的Matlab 程序—系统聚类 (1)计算数据集每对元素之间的距离,对应函数为pdistw. 调用格式:Ypdist(X),Ypdist(X,’metric’), Ypdist(X,’distfun’),Ypdist(X,’minkowski’,p) 说明:X是m*n的矩阵,metric是计算距离的方法选项&…

如何运用MATLAB实现K-MEANS聚类分析

由于自己最近在学习聚类分析,也算是一个入门,相当于将自己这段时间的学习成果进行一个总结,分享给更多打算学习聚类分析或者需要用到聚类分析的同学们~ 在了解K-MEANS聚类分析之前,我们首先明确聚类的含义,聚类是将数…

Matlab实现Kmeans聚类算法

1.Kmeans聚类算法简介 kmeans聚类算法是一种迭代求解的聚类分析算法。其实现步骤如下: (1) 随机选取K个对象作为初始的聚类中心 (2) 计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。 (3) 聚类中心以及分配给它们的对象…

k-means算法实例(聚类分析)matlab实现

例子如下: 假设数据挖掘的任务是将如下的8个点(用(x,y)代表位置)聚类为3个簇。 距离是欧氏距离。假设初始我们选择,和分别为每个簇的中心,用k-均值算法给出: a)在第一轮…

MATLAB层次聚类分析

实验题目 给出六个民族的出生死亡率,和他们的平均寿命,如下表所示 出生死亡率(%)平均寿命15.8070.5927.4467.1438.1165.48410.2158.8859.5159.8869.8160.47 MATLAB代码 %聚类分析 %步骤 %1.样本标准化 %2.计算各个样本之间的距…

matlab之聚类分析

文章目录 1.原理:2.数据:3.效果图:4.分类结果:5.分类代码: 1.原理: 聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。目的是,组内的对象相互之间是相似的&…

Matlab聚类分析(Kmeans)

提示:本文为记录学习聚类分析的一个过程,仅供参考,有不足之处还望提出 目录 前言一、原始数据二、数据处理与结果输出1.标准化与提取2.可视化3.簇数判别4.最终输出 总结 前言 本次样本中的片段数据涉及到多个故障原因,目的在于通…

Python语音信号处理

个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-44.html 语言信息是多种信息的混合载体 ,其中包括内容信息、说话人信息和情感信息。 本文介绍了一些语音的基本知识,和使用Python进行处理。 时域…