一、概念介绍

K-means算法是硬聚类算法,是典型的局域原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最有分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。

K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。

  k个初始类聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机的选取任意k个对象作为初始聚类的中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个簇中心的距离将每个对象重新赋给最近的簇。当考察完所有数据对象后,一次迭代运算完成,新的聚类中心被计算出来。如果在一次迭代前后,评价指标J的值没有发生变化,说明算法已经收敛。

二、K-means算法

它是一种迭代的算法:

(1) 、首选随机选择k个点作为k个Cluster的重心;

(2)、计算每个点到各个Cluster重心的距离,将它加入到最近的那个Cluster;

(3)、重新计算每个Cluster的重心;

(4)、重复过程2~3,直到各个Cluster重心在某个精度范围内不变化或者达到最大迭代次数。

别看算法简单,很多复杂算法的实际效果或许都不如它,而且它的局部性较好,容易并行化,对大规模数据集很有意义;算法时间复杂度是:O(nkt),其中:n是聚类点个数k是Cluster个数,t是迭代次数。

%matlab code
% % % % % % 它是一种迭代的算法:
% % % % % %
% % % % % % (1)首选随机选择k个点作为k个Cluster的重心;
% % % % % % (2)计算每个点到各个Cluster重心的距离,将它加入到最近的那个Cluster;
% % % % % % (3)重新计算每个Cluster的重心;
% % % % % % (4)重复过程2~3,直到各个Cluster重心在某个精度范围内不变化或者达到最大迭代次数。% % % % % %
% % % % % % 别看算法简单,很多复杂算法的实际效果或许都不如它,而且它的局部性较好,容易并行化,对大规
% % % % % % 模数据集很有意义;算法时间复杂度是:O(nkt),其中:n是聚类点个数k是Cluster个数,t是迭代次数。
% K-means Cluster
%load data.dat
x_data = 50*rand(1,100);
y_data = 50*rand(1,100);
% x_data = 5*rand(1,10);
% y_data = 5*rand(1,10);
% x_data = data(:,1);
% y_data = data(:,2);
data_size = length(x_data);
a = randsample(1:data_size,2);%产生行向量
%产生初始两个坐标
c1_x = x_data(a(1));
c1_y = y_data(a(1));
c2_x = x_data(a(2));
c2_y = y_data(a(2));
iter = 2;
max_iter = 100;
J_1 = 1;
J_2 = 1;
figure
while J_1>0.1 && J_2>0.1 && iter<max_iterc1_xx = 0;c1_yy = 0;c2_xx = 0;c2_yy = 0;  c1_num = 0;c2_num = 0; for k=1:data_size%计算每个点到中心点的距离Distance1 = (x_data(k)-c1_x)^2 + (y_data(k)-c1_y)^2 ;Distance2 = (x_data(k)-c2_x)^2 + (y_data(k)-c2_y)^2 ;if Distance1 > Distance2lable(k) = 1;c2_xx = c2_xx+x_data(k);c2_yy = c2_yy+y_data(k);c2_num = c2_num+1;elselable(k) = 0;c1_xx = c1_xx+x_data(k);c1_yy = c1_yy+y_data(k);c1_num = c1_num+1;endendc1_xx = c1_xx/c1_num;%c1_yy = c1_yy/c1_num;c2_xx = c2_xx/c2_num;c2_yy = c2_yy/c2_num;  J_1 = (c1_x-c1_xx)^2 + (c1_y-c1_yy)^2 ;J_2 = (c2_x-c2_xx)^2 + (c2_y-c2_yy)^2 ;c1_x = c1_xx;c1_y = c1_yy;c2_x = c2_xx;c2_y = c2_yy;iter = iter+3hold onplot(c1_x,c1_y,'bp','MarkerSize',iter)hold onplot(c2_x,c2_y,'mp','MarkerSize',iter)
end% figure
% plot(c1_x,c1_y,'kp','MarkerSize',iter+2)
% hold on
% plot(c2_x,c2_y,'rp','MarkerSize',iter+2)
for idx = 1:data_sizeif lable(idx) == 1hold onplot(x_data(idx),y_data(idx),'ro')else hold onplot(x_data(idx),y_data(idx),'ko')end
end

手工matlab下K-means聚类算法实现而不是调用库函数相关推荐

  1. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  2. k means聚类算法_K-Means 聚类算法 20210108

    说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...

  3. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  4. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

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

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

  6. Python金融数据挖掘 第11章 复习思考题1 (聚类)给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,用K均值聚类算法来训练模型,分4类。

    1.题目 给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,如图11-12所示. data_multivar.txt 图11-12 数据集 da ...

  7. 【模式识别】K均值聚类算法应用实验报告及MATLAB仿真

    一. 实验目的 1.掌握K均值聚类算法的原理和实现过程: 2.掌握K均值聚类算法的应用方法. 二. 实验内容 1.彩色图像分割 选择一幅图像,分别按三种颜色数进行彩色图像分割的结果(原图和分割图).步 ...

  8. K-Means(K均值聚类算法)

    K-Means(K均值聚类算法) 1.前言 要学习聚类算法就要知道聚类学习算法是什么,为什么要学习聚类学习聚类学习算法,有什么用途,下面就简单的做一下介绍,并且详细的说明k-means均值聚类学习算法 ...

  9. k均值聚类算法python_K均值和其他聚类算法:Python快速入门

    k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...

  10. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

最新文章

  1. mysql 字符集和校对规则
  2. 看,2015阿里巴巴视觉设计人员面临的问题招收学校
  3. CS8900A网络驱动程序移植
  4. 各种 分页存储过程整理
  5. LinuxIP设置,网络负载
  6. PHP buffer的机制
  7. jzoj5230-队伍统计【状压dp】
  8. Sudoku Extension UVALive - 4763
  9. 前端windows下常用的CMD 命令归纳
  10. python爬虫 django搜索修改更新数据_python应用:Django中更新多个对象数据与删除对象的方法...
  11. J-LINK 操作使用指南
  12. 【做题】uoj#370滑稽树上滑稽果——巧妙dp
  13. mysql行转列和列转行_Mysql中行转列和列转行
  14. C#图片处理之: 锐化
  15. ASP.NET Core 多线程 异步编程
  16. python 通达信k线_python日线通达信,通达信 主图默认显示每只股票上市以来所有日线...
  17. spring aop原理
  18. C#实战008:Excel操作-创建新的Excel工作表
  19. Mysql索引:图文并茂,深入探究索引的原理和使用
  20. python中对字符串进行左、中、右对齐操作

热门文章

  1. matlab里的deploy,MATLAB deploytool simulink未定义函数'load_system'
  2. 计算机网络物理层之物理层的基本概念
  3. 关于数组越界(内存泄漏)的那点事儿(C语言)
  4. 计算机网络(HCIP、HCIE)系列文章大合集
  5. fiddler监控手机请求
  6. 迭代总结(随时更新)
  7. ASP.NET Core MVC 源码学习:详解 Action 的激活
  8. Scala 循环(打断嵌套循环)
  9. laravel后台可修改配置自动加载
  10. IO流 Buffered 综合练习