1. 聚类的定义

以下内容摘抄自周志华《机器学习》

根据训练数据是否拥有标记信息,机器学习任务可以大致分为两大类:“监督学习”(supervised learning)和“无监督学习”(unsupervised learning)。分类和回归是监督学习的代表,而聚类则是无监督学习的代表。
聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),通过这样的划分,每个簇可能对应一些潜在的概念(类别),而这些类别概念相对于聚类算法而言,事先是未知的,聚类过程只能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。

2. k_means聚类原理

k_means聚类流程图如下

3. k_means聚类函数代码

function T = k_means(data, m, num, e)
% 本函数用于k_means聚类
% 输入data为聚类数据,每行一个数据点
% 输入m为簇的数量
% 输入num为最大迭代次数
% 输入e为阈值,指标为质心距离矩阵的迹,即更新前后质心距离之和
% 输出T为数据对应的类别号组成的序列
% 输出文件'.\centroid.txt',记录迭代次数及每次迭代的各类质心变化情况% 数据维数
datadim = length(data(1, :));
% 总数据量
n = length(data(:, 1));
% 定义类别标记列表
T = zeros(n, 1);% 得到初始m个质心
r = randperm(n, m);
C0 = rand(m, datadim);
for k = 1 : mC0(k, :) = data(r(k), :);
end
C1 = zeros(m, datadim);
Num = 0;% 打开文件
file = fopen('.\centroid.txt', 'wt');
%将写入指针移动至文章的开头
frewind(file);
% 如果两组质心之间的距离矩阵的迹仍大于阈值e,并且迭代次数没超过num,则进行循环
if file > 0while (trace(pdist2(C0, C1)) > e) && (Num <= num)for i = 1 : nmind = pdist2(data(i, :), C0(1, :));for j = 1 : mif pdist2(data(i, :), C0(j, :)) <= mindT(i) = j;mind = pdist2(data(i, :), C0(j, :));endendend% 更新质心C1 = C0;fprintf(file, '%d\n', Num);for j = 1 : mfor k = 1 : datadimfprintf(file, '%f,\t', C0(j, k));C0(j, k) = mean(data(T==j, k));endfprintf(file, '\n');endNum = Num + 1;endfclose(file);
end

主函数:

% model_class = 3;
% dim = 3;
% % 期望值
% m = [0, 0, 0;
%     2, 2, 2;
%     -2, -2, -2];
% % 协方差阵
% s(:, :, 1) = [0.2, 0, 0;
%               0, 0.2, 0;
%               0, 0, 0.2];
% s(:, :, 2) = [0.5, 0, 0;
%               0, 0.5, 0;
%               0, 0, 0.5];
% s(:, :, 3) = [0.5, 0, 0;
%               0, 0.5, 0;
%               0, 0, 0.5];
%
% num = [5000, 5000, 5000];
% data = generate_data_GMM(dim, model_class, m, s, num);
iris = load('iris.txt');
data = iris(:, (1:4));
T = k_means(data, 3, 30, 0.05);

注:主函数给了两个例子,一个是基于高斯分布数据,一个是基于鸢尾花测试数据。这里高斯分布数据用到了笔者自编写的generate_data_GMM函数,这个函数详细说明及代码请查看:
matlab生成多组多维高斯分布数据

4. 其他说明

  1. k_means聚类算法简单,学聚类第一个接触的聚类算法几乎都是k_means聚类。k_menas聚类有两大重要的缺点:
    其一:需要知道聚类的类别数量
    其二:可能收敛到局部最优解
    但是类别的数量有方法可以估计出来,估计方法这里不在赘述,读者可查阅其他资料。在不需要实时应用时,也可以多次尝试选择最佳聚类数量。局部最优的情况也可以通过多次聚类来弥补。所以k_means聚类的特点可以归纳为:简单,但是一般够用。
  2. 本函数中使用了欧拉距离作为距离的度量,也可以选择其他距离,更改函数代码中的pdist2函数的距离参数即可。

matlab编程实现k_means聚类(k均值聚类)相关推荐

  1. 图像聚类-K均值聚类

    最近做的一个东西跟这个相关,本来希望是用深度学习对于没有标签的图像数据进行分类,但是通常情况下,深度学习是对有标签的数据进行学习,目的是用来自动提取特征,代替传统的手工提取特征.因此,比较容易想到,对 ...

  2. 使用遗传算法和模拟退火改进的K均值聚类

    1.摘要 聚类问题可以转化为对准则函数的最优化求值问题.常见的K均值聚类算法对初值敏感,容易陷入局部最优,特别是对于分界面模糊的样本聚类能力较差. 遗传算法可以在全局上随机搜索最优解,因此将聚类问题转 ...

  3. Python,OpenCV中的K均值聚类——K-Means Cluster

    Python,OpenCV中的K均值聚类 1. 效果图 2. 原理 2.1 什么是K均值聚类? 2.2 K均值聚类过程 2.3 cv2.kmeans(z, 2, None, criteria, 10, ...

  4. EM算法应用:k均值聚类(k-means)和高斯混合模型(GMM)

    文章目录 k-means聚类 EM角度的理解 算法流程 特点 k值选择 局限性 高斯混合模型 GMM的问题描述 1,明确隐变量 2.EM算法的E步:确定Q函数 3. EM算法的E步 4. 停止条件 上 ...

  5. 多元统计分析--聚类分析(系统性聚类、K均值聚类)

    摘要 系统聚类分为Q型聚类与R型聚类.前者对样品进行聚类,后者对变量进行聚类.在本文中,我们探讨对样品的分类. 文章目录 摘要 主要思想 相似性的度量 系统聚类 K均值聚类 主要思想 聚类,在样品没有 ...

  6. 非监督学习: K 均值聚类(原理、步骤、优缺点、调优)

    支持向量机.逻辑回归.决策树等经典的机器学习算法主要用于分类问题,即根据一些己给定类别的样本, 训练某种分类器,使得它能够对类别未知的样本进行分类.与分类问题不同,聚类是在事先并不知道任何样本类别标签 ...

  7. K均值聚类算法的MATLAB实现

    K均值聚类算法的MATLAB实现 1.K-均值聚类法的概述 之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为 ...

  8. K均值聚类关于初始聚类中心的探讨(matlab程序)

    对应之前发过的:K均值聚类关于初始聚类中心的探讨,补发MATLAB的程序代码. matlab程序: 1. %利用传统K均值随机选取点聚类 clear all; close all; clc; %生成五 ...

  9. 聚类分析 | MATLAB实现k-Means(k均值聚类)分析

    目录 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k-均值聚类简介 相关描述 程序设计 学习小结 参考资料 致谢 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k ...

  10. K均值聚类以及matlab实现

    K均值聚类是最基础的一种聚类方法.K均值聚类,就是把看起来最集中.最不分散的簇标签分配到输入训练样本里.具体而言,通过下式计算簇y的分散情况. 在这里,表示的是满足的y的和. 上式的为簇y的中心,为属 ...

最新文章

  1. HDU 1155 Bungee Jumping
  2. 多层 UIScrollView 嵌套滚动解决方案
  3. 队列表mysql,什么是在mysql中实现消息队列表的最佳方法
  4. 11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
  5. ActiveMQ的几种集群配置
  6. spring集成 log4j + slf4j
  7. DeFi借贷协议Liquity宣布主网将于4月5日上线
  8. 【实用工具】GLIBC降级
  9. 基本的Material Design布局结构
  10. 虚拟串口 VSPD 的使用
  11. Tomcat,jsp中文乱码问题解决
  12. 安卓获取浏览器上网记录_Android 获取自带浏览器上网记录
  13. GCC源码分析(摘)
  14. 计算机画图调整画笔粗细,【2人回答】画图里画笔怎么加粗-3D溜溜网
  15. 如何使用rclone从AWS S3迁移到IBM COS - part 2 - 同步腾讯云对象存储
  16. C primer plus(第六版)第五章源代码
  17. 跨境电商的9大运营模式
  18. 金誉半导体:MOS管耗尽型和增强型是什么意思?
  19. Quartz2D学习记录
  20. 苹果消息推送服务教程:第2部分(共2部分)

热门文章

  1. SQL case when
  2. 用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈
  3. Xilinx Zynq FPGA Boards板
  4. python 的保留字
  5. HarmonyOS UI开发 AdaptiveBoxLayout(自适应盒子布局) 的使用
  6. Android 接口回调
  7. 小程序 navigator 无法跳转 tabBar上的页面
  8. C#日期格式精确到毫秒 !!
  9. JS中的作用域(一)-详谈
  10. 安装指定版本Angular-CLI