Matlab实现Kmeans聚类算法

article/2025/10/21 18:53:33

1.Kmeans聚类算法简介

kmeans聚类算法是一种迭代求解的聚类分析算法。其实现步骤如下:

(1) 随机选取K个对象作为初始的聚类中心

(2) 计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。

(3) 聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。

(4) 重复步骤(2)、(3),直到满足某个终止条件。终止条件可以是聚类中心再发生变化或者误差平方和局部最小等。

2.Kmeans聚类算法的代码实现

(1) 首先,加载需要进行分类的数据集。

data(:,1)=[90,35,52,83,64,24,49,92,99,45,19,38,1,71,56,97,63,...32,3,34,33,55,75,84,53,15,88,66,41,51,39,78,67,65,25,40,77,...13,69,29,14,54,87,47,44,58,8,68,81,31];
data(:,2)=[33,71,62,34,49,48,46,69,56,59,28,14,55,41,39,...78,23,99,68,30,87,85,43,88,2,47,50,77,22,76,94,11,80,...51,6,7,72,36,90,96,44,61,70,60,75,74,63,40,81,4];
figure(1)
scatter(data(:,1),data(:,2),'LineWidth',2)
title("原始数据散点图")

原始数据绘制散点图如下所示:

(2) 设置分类数量并调用自己编写的kmeans聚类函数

cluster_num=4;
[index_cluster,cluster] = kmeans_func(data,cluster_num);
function [index_cluster,cluster] = kmeans_func(data,cluster_num)
%% 原理推导Kmeans聚类算法
[m,n]=size(data);
cluster=data(randperm(m,cluster_num),:);%从m个点中随机选择cluster_num个点作为初始聚类中心点
epoch_max=1000;%最大次数
therad_lim=0.001;%中心变化阈值
epoch_num=0;
while(epoch_num<epoch_max)epoch_num=epoch_num+1;% distance1存储每个点到各聚类中心的欧氏距离for i=1:cluster_numdistance=(data-repmat(cluster(i,:),m,1)).^2;distance1(:,i)=sqrt(sum(distance'));end[~,index_cluster]=min(distance1');%index_cluster取值范围1~cluster_num% cluster_new存储新的聚类中心for j=1:cluster_numcluster_new(j,:)=mean(data(find(index_cluster==j),:));end%如果新的聚类中心和上一轮的聚类中心距离和大于therad_lim,更新聚类中心,否则算法结束if (sqrt(sum((cluster_new-cluster).^2))>therad_lim)cluster=cluster_new;elsebreak;end
end
end

(3) 对分类结果和最终的聚类中心进行可视化展示

%% 画出聚类效果
figure(2)
% subplot(2,1,1)
a=unique(index_cluster); %找出分类出的个数
C=cell(1,length(a));
for i=1:length(a)C(1,i)={find(index_cluster==a(i))};
end
for j=1:cluster_numdata_get=data(C{1,j},:);scatter(data_get(:,1),data_get(:,2),100,'filled','MarkerFaceAlpha',.6,'MarkerEdgeAlpha',.9);hold on
end
%绘制聚类中心
plot(cluster(:,1),cluster(:,2),'ks','LineWidth',2);
hold on
sc_t=mean(silhouette(data,index_cluster'));
title_str=['原理推导K均值聚类','  聚类数为:',num2str(cluster_num),'  SC轮廓系数:',num2str(sc_t)];
title(title_str)

3.完整实现代码

clc;clear;close all;
data(:,1)=[90,35,52,83,64,24,49,92,99,45,19,38,1,71,56,97,63,...32,3,34,33,55,75,84,53,15,88,66,41,51,39,78,67,65,25,40,77,...13,69,29,14,54,87,47,44,58,8,68,81,31];
data(:,2)=[33,71,62,34,49,48,46,69,56,59,28,14,55,41,39,...78,23,99,68,30,87,85,43,88,2,47,50,77,22,76,94,11,80,...51,6,7,72,36,90,96,44,61,70,60,75,74,63,40,81,4];
figure(1)
scatter(data(:,1),data(:,2),'LineWidth',2)
title("原始数据散点图")
cluster_num=4;
[index_cluster,cluster] = kmeans_func(data,cluster_num);
%% 画出聚类效果
figure(2)
% subplot(2,1,1)
a=unique(index_cluster); %找出分类出的个数
C=cell(1,length(a));
for i=1:length(a)C(1,i)={find(index_cluster==a(i))};
end
for j=1:cluster_numdata_get=data(C{1,j},:);scatter(data_get(:,1),data_get(:,2),100,'filled','MarkerFaceAlpha',.6,'MarkerEdgeAlpha',.9);hold on
end
%绘制聚类中心
plot(cluster(:,1),cluster(:,2),'ks','LineWidth',2);
hold on
sc_t=mean(silhouette(data,index_cluster'));
title_str=['原理推导K均值聚类','  聚类数为:',num2str(cluster_num),'  SC轮廓系数:',num2str(sc_t)];
title(title_str)

4. 总结

以上就是matlab实现kmeans聚类算法的全部代码,可在上述代码的基础上进行数据集替换,应用于其它场景。如果有不懂的小伙伴儿,欢迎评论留言或者私信,代码订制也可私信博主。


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

相关文章

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;实现对语音数据的预处理和常…

matlab的语音信号处理

人类交换信息最方便的、最快捷的一种方式是语言&#xff0c;在高度发达的信息社会中&#xff0c;用数字化的方法进行语音的识别、合成、增强、传送和储存等是整个数字化通信网中最重要、最基本的组成部分之一。数字电话通信、高音质的窄带语音通信系统、智能机器人、声控打字机…