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

article/2025/10/21 18:45:38

由于自己最近在学习聚类分析,也算是一个入门,相当于将自己这段时间的学习成果进行一个总结,分享给更多打算学习聚类分析或者需要用到聚类分析的同学们~

在了解K-MEANS聚类分析之前,我们首先明确聚类的含义,聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。

因此聚类分析顾名思义,就是在做一个分类的工作。聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。最终实现组内的对象相互之间是存在相关的关系,而不同组中的对象是没有这种相关性的。组内对象之间的相关性越大,组与组之间不相关性越大,说明最终的聚类效果越好。

聚类分析是一种探索性的分析,在分类的过程中,人们不必事先给出一个分类的标准,聚类分析能够从样本数据出发,自动进行分类。聚类分析所使用方法的不同,常常会得到不同的结论。不同研究者对于同一组数据进行聚类分析,所得到的聚类数未必一致。从实际应用的角度看,聚类分析是数据挖掘的主要任务之一。而且聚类能够作为一个独立的工具获得数据的分布状况,观察每一簇数据的特征,集中对特定的聚簇集合作进一步地分析。聚类分析还可以作为其他算法的预处理步骤。

对于聚类效果的影响主要依赖于距离的计算方法聚类方法的选择

1.距离的计算方法

对于这三个距离计算公式中并没有区分各个变量之间的重要性区别,如果需要区分各个变量之间的重要性,就需要引入权重来衡量。同时对于指标之间的量纲不同时,需要先进行一步标准化这样才能保证聚类效果较好,标准化可以通过很多手段实现,SPSS中有特定的标准化方式,excel等都可以实现,也很方便。

2.聚类的方法

对于聚类分析所使用的方法有K-MEANS均值聚类法、层次聚类、根据密度聚类、根据网格聚类。

  • K-MEANS均值聚类

算法:1. 选择 K 个初始质心,初始质心随机选择即可,每一个质心为一个类
                  2. 把每个观测值分配到离它最近的质心,与质心形成新的类
                  3. 重新计算每个类的质心,所谓质心就是求一个类中的所有距离的平均值。
                  4. 反复重复以上两个步骤直到质心不再发生变化,完成聚类分析

  • 层次聚类

算法:1. 计算类与类之间的距离,用邻近度矩阵记录
                  2. 将最近的两个类合并为一个新的类
                  3. 根据新的类,更新邻近度矩阵
                  4. 重复以上步骤直到只剩下一个类为止

  • 根据密度聚类

算法:1.从数据集中随机选择核心点
                   2.以一个核心点为圆心,做半径为V的圆,选择圆内圈入点的个数满足密度阈值的核心点,因此称这些点为核心对象,且将                        圈内的点形成一个簇,其中核心点直接密度可达周围的其他实心原点
                   3.合并这些相互重合的簇

  • 根据网格聚类

算法:1.将数据空间划分为网格单元
                  2.依照设置的阈值,判定网格单元是否稠密
                  3.合并相邻稠密的网格单元为一类


目前在聚类分析中虽然有很多的算法,但使用较多和速度较快的是K-MEANS聚类方法,同时对于实现聚类分析也有很多的软件,比如SPSS、R语言、MATLAB等等,在这里仅仅介绍如何运用MATLAB实现K-MEANS聚类分析。

1.运用MATLAB自带kmeans函数

MTALAB中含有解决K-MEANS聚类分析的函数kmeans,可以帮我们解决一般的聚类分析问题,具体如下所示。

clc;
clear;
X=readmatrix('KM.xls');
[idx,C] = kmeans(X,2)
figure;
plot(X(:,1),X(:,2),'.');
title 'Randomly Generated Data';
figure;
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(C(:,1),C(:,2),'kx',...'MarkerSize',15,'LineWidth',3) 
legend('Cluster 1','Cluster 2','Centroids',...'Location','NW')
title 'Cluster Assignments and Centroids'
hold off

首先,将所有的点绘制在图上,散点图如下所示:

 通过kmeans聚类算法,本例子中我们设定K=2,得到如下的结果:

并得到对应的两个质心的坐标分别为 (0.5238,0.5152),(1.0910,1.0459)

2.根据K-MEANS算法自编MATLAB算法

clc;
clear;
x=readmatrix('KM.xls');
z1=zeros(2,2);
z=x(1:2,1:2);while 1count=zeros(2,1);allsum=zeros(2,2);for i=1:200 temp1=sqrt((z(1,1)-x(i,1)).^2+(z(1,2)-x(i,2)).^2);temp2=sqrt((z(2,1)-x(i,1)).^2+(z(2,2)-x(i,2)).^2);if(temp1<temp2)count(1)=count(1)+1;allsum(1,1)=allsum(1,1)+x(i,1);allsum(1,2)=allsum(1,2)+x(i,2);elsecount(2)=count(2)+1;allsum(2,1)=allsum(2,1)+x(i,1);allsum(2,2)=allsum(2,2)+x(i,2); endendz1(1,1)=allsum(1,1)/count(1);z1(1,2)=allsum(1,2)/count(1);z1(2,1)=allsum(2,1)/count(2);z1(2,2)=allsum(2,2)/count(2);if(z==z1)break;elsez=z1;end
enddisp(z);
figure;
plot(x(:,1),x(:,2),'.');
title 'Randomly Generated Data';
figure;
for i=1:200 temp1=sqrt((z(1,1)-x(i,1)).^2+(z(1,2)-x(i,2)).^2);temp2=sqrt((z(2,1)-x(i,1)).^2+(z(2,2)-x(i,2)).^2);if(temp1<temp2)p1=plot(x(i,1),x(i,2),'r.','MarkerSize',12);hold onelsep2=plot(x(i,1),x(i,2),'b.','MarkerSize',12);hold onendend
p3=plot(z(:,1),z(:,2),'kx',...'MarkerSize',15,'LineWidth',3) ;
legend([p1 p2 p3],{'Cluster 1','Cluster 2','Centroids'},...'Location','NW')
title 'Cluster Assignments and Centroids'
hold off

运行以上的代码,得到与第一种方法相同的结果和对应的质心坐标,因此证明算法可行。

对K-MEANS聚类分析方法就介绍到这里啦~相信你也可以很清楚了~


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

相关文章

Matlab实现Kmeans聚类算法

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

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

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

MATLAB层次聚类分析

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

matlab之聚类分析

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

Matlab聚类分析(Kmeans)

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

Python语音信号处理

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

语音信号处理1 ----- 基础知识

语音信号处理1 ----- 基础知识 1. 语音信号处理的目的&#xff1a;2. 语音发音和感知系统2.1 语音发音系统2.2 语音感知系统&#xff08;听觉系统&#xff09;2.2.1 听觉系统2.2.2 听觉特性 2.3 语音信号生成的数学模型 3. 语音基本概念及参数4. 语音信号数字化处理参考 1. 语音…

语音信号处理入门入籍和课程推荐

欢迎关注我的公众号&#xff0c;微信搜一搜【音频信号处理那些事儿】获取更多信息。 由于看网上关于语音信号处理的入门书籍和课程推荐的比较少&#xff0c;同时相关的领域人员也比较少&#xff0c;所以建了这个公众号&#xff0c;欢迎各位同仁指正交流&#xff0c;谢谢。 本…

前端语音信号处理

1、语音活动检测 语音活动检测&#xff08;Voice Activity Detection&#xff0c; VAD&#xff09;用于检测出语音信号的起始位置&#xff0c;分离出语音段和非语音&#xff08;静音或噪声&#xff09;段。VAD算法大致分为三类&#xff1a;基于阈值的VAD、基于分类器的VAD和基于…

语音信号处理及特征提取

1.信号处理基础 模拟信号->数字信号转化 步骤&#xff1a;采样和量化 奈奎斯特定律 &#xff1a;采样频率大于信号中最大频率的二倍 即在原始信号的一个周期中&#xff0c;至少要采样两个点&#xff0c;才能有效杜绝频率混叠问题。 信号进行离散傅里叶变换的条件&#x…

MATLAB语音信号处理系统GUI

基于MATLAB的语音信号处理 【摘 要】 Matlab语音信号处理是指利用matlab软件对音频信号进行读取&#xff0c;并对音频信号进行采样分析及离散傅里叶变换&#xff0c;以方便对其在频域上进行调制滤波等相关的操作。本次实验在提取音频信号后会对该信号使用在MATLAB软件中设计的…

《语音信号处理》 语音识别章节 读书笔记

两本书&#xff0c;《语音信号处理》赵力编和《语音信号处理》韩纪庆编。强烈推荐韩纪庆版本&#xff0c;知识点很全面&#xff0c;可以作为语音识别的入门中文书籍&#xff0c;章节很也短&#xff0c;很快就入门了。 P34 HMM是一个双内嵌式随机过程&#xff0c;由两个随机过程…

基于MATLAB的语音信号处理系统的设计

目 录 摘 要 I Abstract II 1 绪论 1 2 语音信号处理系统设计方案 2 2.1MATLAB的说明 2 2.2系统框架及实现流程图 2 2.2.1系统框架&#xff1a; 2 2.2.2系统流程图&#xff1a; 3 2.3语音信号处理相关原理知识 3 2.3.1语音信号的录入与打开 3 2.3.2采样位数和采样频率 3 2.3.3…

语音信号处理的一些基础知识

人耳的听觉掩蔽效应 一般人可以感觉到20Hz-20kHz&#xff0c;强度为5dB-130dB。 人耳的掩蔽效应&#xff1a;在一个强信号附近&#xff0c;弱信号将变得不可闻&#xff0c;被掩蔽掉了。被掩蔽的不可闻信号的最大声压级称为掩蔽门限或者掩蔽阈值。 语音信号生成的模型 理想的模…

语音信号处理概念

语音交互 你知道苹果手机有几个麦克风吗&#xff1f; 语音交互&#xff08;VUI&#xff09;是指人与人/设备通过自然语音进行信息传递的过程。 语音交互的优势&#xff1a; 输入效率高。语音输入的速度是传统键盘输入方式的3倍以上。例如&#xff1a;语音电视选台、远场语音交…

python做语音信号处理

作者&#xff1a;凌逆战 时间&#xff1a;2019年11月1日 博客园地址&#xff1a;python做语音信号处理 - 凌逆战 - 博客园 音频信号的读写、播放及录音 python已经支持WAV格式的书写&#xff0c;而实时的声音输入输出需要安装pyAudio(PyAudio: PortAudio v19 Python Bindings…

语音信号处理知识点

语音信号处理过程的总体结构&#xff1a; 语音输入-->预处理-->数字化-->特征提取 预处理&#xff1a;对信号适当放大和增益控制&#xff0c;并进行反混叠滤波来消除工频信号干扰 数字化&#xff1a;进行A/D转换 特征提取&#xff1a;用反映语音信号特点的若干参数…

第一章 语音信号处理概述

一、语音交互 语音交互(VUI: Voice User Interface)是指人与人或者人与设备通过自然语音进行信息传递的过程。 1. 语音交互的优势 &#xff08;1&#xff09;输入效率高&#xff1a;相对于键盘输入&#xff0c;语音输入的速度是传统输入方式的3倍以上(有权威统计分析得到的数…

语音信号处理-python

语音信号处理 1.语音信号的产生与特性 我们要对语音进行分析&#xff0c;首先要提取能够表示该语音的特征参数&#xff0c;有了特征参数才可能利用这些参数进行有效的处理&#xff0c;在对语音信号处理的过程中&#xff0c;语音信号的质量不仅取决于处理方法&#xff0c;同时…

python实验六 语音信号处理

目录 实验目的&#xff1a; 实验原理&#xff1a; 实验准备&#xff1a; 实验步骤与内容&#xff1a; 参考代码&#xff1a; 实验目的&#xff1a; 依托语音信号处理领域的声学特征提取任务&#xff0c;学习常用的语音信号处理工具&#xff0c;实现对语音数据的预处理和常…