K-means 聚类算法学习笔记

K-means 聚类算法 是一种无监督学习算法,用来将 n n n 个样本点分成 k k k 类,使得整个数据集的误差平方和 S S E SSE SSE 最小。在本例中,样本点是指平面直角坐标系上的点,聚类中心也是平面直角坐标系上的点,而每个点的损失函数则是它到聚类中心的距离。即:找出 2 个点,使得所有点到这 2 个点的距离的更小者之和最小。

K-means 聚类算法流程如下:

  1. 随机指定 k k k 个样本点为聚类中心;
  2. 计算所有点对每个样本点的距离,选择最近的样本点;
  3. 计算同一类的所有点的重心,并将重心作为新的聚类中心;
  4. 重复2.3.,直到所有点选定的最近样本点均不再改变。

其中

S S E = ∑ i = 1 k ∑ x ∈ C i ∑ j = 1 m ( x j − S i j ) 2 SSE=\sum_{i=1}^{k}\sum_{x\in C_i}\sum_{j=1}^m(x_j-S_{ij})^2 SSE=i=1kxCij=1m(xjSij)2

理论上说, S S E SSE SSE 会随着 k k k 的变大而单调递减。

参考文献。

function [ClusterID,Means] = KMeansClustering(S, K, plot_flag)
% 输入参数:
% S: 用于聚类的数据,每一行对应一个样本的特征向量,每一列对应一个特征
% K:需要聚成的簇的数量
% plot_flag: 是否需要可视化每一次迭代的更新结果% 输出参数:
% ClusterID:聚类结果,表示每个样本被聚类至第几个簇
% Means:由簇中心向量组成的矩阵,每一行对应一个簇的中心%% 初始参数设置
maxiter = 10000;            % 这里的maxiter为迭代算法设置了最大迭代次数,防止算法陷入死循环
iter = 0;                   % 用于表示当前算法已迭代的次数
n = size(S, 1)             % 样本数量%% 随机初始化聚类均值
ClusterID = zeros(n,1);
rk = randperm(n);
k=rk(1:K);
Means= S(k,:);%% 开始迭代优化
while iter<maxiterOldClusterID = ClusterID;%% 将样本分配到距离自己最近的簇中%%% ###### 需要你完成: ###### %%%% 1. 计算每个样本到聚类中心的距离DistDist = zeros(n,K);for i=1:nfor j=1:Kfor l=1:size(S,2)Dist(i,j)=Dist(i,j)+(S(i,l)-Means(j,l))^2;endendend% 2. 根据每个样本到各个簇的距离,把每个样本指定到与自己最近的簇中,并生成簇结果ClusterIDdis=size(n,1);[dis,ClusterID]=min(Dist,[],2);%     Dist
%      ClusterID
%     k
%     pause(1)
% end%%% ######################### %%%%% 根据新分配的样本,重新计算簇中心% 按簇更新for i = 1:K%%% ###### 需要你完成: ###### %%%% 1. 首先找到属于该簇的样本id = zeros(n,1);cnt=0;for j=1:nif ClusterID(j)==icnt=cnt+1;id(cnt)=j;endend% 2. 根据上一步得到的属于该簇的样本,计算这些样本的均值作为该簇的中心Means(i,:)Means(i,:) = zeros(size(S,2),1);for j=1:size(S,2)for l=1:cntMeans(i,j)=Means(i,j)+S(id(l),j);endMeans(i,j)=Means(i,j)/cnt;end%%% ######################### %%%end%% 对每一次迭代的结果进行可视化if plot_flag == 1if iter==0figureendi1 = find(ClusterID==1);i2 = find(ClusterID==2);plot_cluster(S,i1,i2,Means);title(cat(2,'第',int2str(iter+1),'轮聚类结果'));set(gca,'fontsize',15)pause(1)end%% 判断迭代退出的条件if ClusterID == OldClusterIDbreak;enditer = iter+1;
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.5V-65V Vin同步降压控制器,具有线路前馈SCT82630DHKR

描述&#xff1a; SCT82630是一款65V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输…

Java“牵手”义乌购商品详情数据,义乌购商品详情接口,义乌购API接口申请指南

义乌购隶属浙江义乌购电子商务有限公司旗下网站。该平台定位为依托实体市场&#xff0c;服务实体市场&#xff0c;以诚信为根本&#xff0c;将7万网上商铺与实体商铺一一对应绑定&#xff0c;为采购商和经营户提供可控、可信、可溯源的交易保障。 义乌购平台现有商铺商品、市场…

网络连接中的三次握手和四次挥手

三次握手和四次挥手都是TCP协议通信过程中建立和关闭连接的步骤。 三次握手的步骤如下&#xff1a; 客户端发送SYN包&#xff0c;进入SYN-SENT状态。服务器接收到SYN包&#xff0c;回复一个ACK包和一个SYN包&#xff0c;进入SYN-RECEIVED状态。客户端收到ACK包和SYN包&#x…

Fair原理篇Fair逻辑动态化架构设计与实现

本文的核心内容包括: 数据逻辑处理布局中的逻辑处理Flutter类型数据处理一、数据逻辑处理 我们接触的每一个Flutter界面,大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码: class _MyHomePageState extends State<MyHomePage> {// 变量 int…

OpenHarmony Meetup常州站招募令

OpenHarmony Meetup 常州站正火热招募中&#xff01; 诚邀充满激情的开发者参与线下盛会~ 探索OpenHarmony前沿科技&#xff0c;畅谈未来前景&#xff0c; 感受OpenHarmony生态构建之路的魅力&#xff01; 线下参与&#xff0c;名额有限&#xff0c;仅限20位幸运者&#xff01…

计算机网络常见问题

1.谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 1.1.为什么要分层&#xff1f; 在计算机中网络是个复杂的系统&#xff0c;不同的网络与网络之间由于协议&#xff0c;设备&#xff0c;软件等各种原因在协调和通讯时容易产生各种各样的问题。例如&#xff1a;各物流…

【MySQL】 MySQL的增删改查(进阶)--贰

文章目录 &#x1f6eb;新增&#x1f6ec;查询&#x1f334;聚合查询&#x1f6a9;聚合函数&#x1f388;GROUP BY子句&#x1f4cc;HAVING &#x1f38b;联合查询⚾内连接⚽外连接&#x1f9ed;自连接&#x1f3c0;子查询&#x1f3a1;合并查询 &#x1f3a8;MySQL的增删改查(…

web前端之float布局与flex布局

float布局 <style>.nav {overflow: hidden;background-color: #6adfd0; /* 导航栏背景颜色 */}.nav a {float: left;display: block;text-align: center;padding: 14px 16px;text-decoration: none;color: #000000; /* 导航栏文字颜色 */}.nav a:hover {background-col…

测试基础知识

测试的基础知识 软件&#xff1a;控制硬件工作的工具。 软件测试&#xff1a;使用技术手段验证软件是否满足使用需求。 软件测试目的&#xff1a;减少软件缺陷&#xff0c;保证软件质量。 测试主流技能&#xff1a;功能测试、自动化测试、接口测试、性能测试 功能测试&#xff…

三相组合式过电压保护器试验

三相组合式过电压保护器试验 试验目的 三相组合式过电压保护器主要分为有带串联间隙过压保护器和无间隙过压保护器两大类&#xff0c;其试验项目内容要求分别使用高压工频交流和高压直流电源。 三相组合式过电压保护器试验&#xff0c;主要是为了及早发现设备内部绝缘受潮及…

C语言实现循环双链表

在C语言中&#xff0c;实现一个循环双链表需要定义一个节点结构体&#xff0c;这个结构体包含三个字段&#xff1a;数据字段&#xff0c;指向前一个节点的指针&#xff0c;以及指向下一个节点的指针。定义节点结构体&#xff1a; 1)定义节点结构体&#xff1a; typedef struc…

解锁学习新方式——助您迈向成功之路

近年来&#xff0c;随着吉林开放大学广播电视大学的崛起&#xff0c;越来越多的学子选择这所优秀的学府来实现自己的梦想。而作为一名学者&#xff0c;我有幸见证了电大搜题微信公众号的诞生&#xff0c;为广大学子提供了一个全新的学习支持平台。 电大搜题微信公众号&#xff…

《深度学习工业缺陷检测》专栏介绍 CSDN独家改进实战

&#x1f4a1;&#x1f4a1;&#x1f4a1;深度学习工业缺陷检测 1&#xff09;提供工业小缺陷检测性能提升方案&#xff0c;满足部署条件&#xff1b; 2&#xff09;针对缺陷样品少等难点&#xff0c;引入无监督检测&#xff1b; 3&#xff09;深度学习 C、C#部署方案&#…

2023工博会强势回归!智微工业携八大系列重磅亮相

中国国际工业博览会&#xff08;简称"中国工博会"&#xff09;自1999年创办以来&#xff0c;历经二十余年发展创新&#xff0c;通过专业化、市场化、国际化、品牌化运作&#xff0c;已发展成为通过国际展览业协会&#xff08;UFI&#xff09;认证、中国工业领域规模最…

示例-安装office2016图文教程简体中文下载安装包

目录 简介 步骤 总结 简介 Office 2016作为一款办公软件套件&#xff0c;下载和安装 都具有许多令人印象深刻的特点。让我来为你介绍一下&#xff1a;Office 2016注重实现跨平台的一致性。无论你是在Windows、Mac、iOS还是Android上使用Office&#xff0c;你都可以享受到相似…

Python中如何判断列表中的元素,是否在一段文本中??

#我的Python教程 #官方微信公众号&#xff1a;wdPython1.要判断列表中的每个元素是否在一段文本中&#xff0c;可以使用Python中的字符串的 in 运算符来实现。以下是一个示例代码&#xff1a; text "Hello, how are you today?" word_list ["Hello", &…

数据集成:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

Discuz论坛网站标题栏Powered by Discuz!版权信息如何去除或是修改?

当我们搭建好DZ论坛网站后&#xff0c;为了美化网站&#xff0c;想把标题栏的Powered by Discuz&#xff01;去除或是修改&#xff0c;应该如何操作呢&#xff1f;今天飞飞和你分享&#xff0c;在操作前务必把网站源码和数据库都备份到本地或是网盘。 Discuz的版权信息存在两处…

多模块和分布式项目

一、什么是多模块项目 多模块项目是一种软件项目组织结构&#xff0c;其中一个大型项目被分成多个独立的子模块或子项目。每个子模块通常具有自己的功能、目录结构和开发周期&#xff0c;但它们可以协同工作以构建一个完整的应用程序。这种项目结构有助于提高代码的可维护性、…

【李沐深度学习笔记】矩阵计算(5)

课程地址和说明 线性代数实现p4 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 本节是第五篇&#xff0c;由于CSDN限制&#xff0c;只能被迫拆分 矩阵计算 多元函数的等高线 此处参考视频&#xff1a;熟肉)多元…