K均值聚类算法的MATLAB实现
1.K-均值聚类法的概述
% 利用K-均值聚类的原理,实现对一组数据的分类。这里以一组二维的点为例。
N = ; % 点的个数
X = *rand(,N);
Y = *rand(,N); % 随机生成一组横纵坐标取值均在(,)之间的点,X Y 分别代表横纵坐标
plot(X, Y, 'r*'); % 绘出原始的数据点
xlabel('X');
ylabel('Y');
title('聚类之前的数据点');
n = ; %将所有的数据点分为两类
m = ; %迭代次数
eps = 1e-; % 迭代结束的阈值
u1 = [X(),Y()]; %初始化第一个聚类中心
u2 = [X(),Y()]; %初始化第二个聚类中心
U1 = zeros(,);
U2 = zeros(,); %U1,U2 用于存放各次迭代两个聚类中心的横纵坐标
U1(:,) = u1;
U2(:,) = u2;
D = zeros(,N); %初始化数据点与聚类中心的距离
while(abs(U1(,m) - U1(,m+)) > eps || abs(U1(,m) - U1(,m+) > eps || abs(U2(,m) - U2(,m+)) > eps || abs(U2(,m) - U2(,m+)) > eps))
m = m +;
% 计算所有点到两个聚类中心的距离
for i = : N
D(,i) = sqrt((X(i) - U1(,m))^ + (Y(i) - U1(,m))^);
end
for i = : N
D(,i) = sqrt((X(i) - U2(,m))^ + (Y(i) - U2(,m))^);
end
A = zeros(,N); % A用于存放第一类的数据点
B = zeros(,N); % B用于存放第二类的数据点
for k = : N
[MIN,index] = min(D(:,k));
if index == % 点属于第一个聚类中心
A(,k) = X(k);
A(,k) = Y(k);
else % 点属于第二个聚类中心
B(,k) = X(k);
B(,k) = Y(k);
end
end
indexA = find(A(,:) ~= ); % 找出第一类中的点
indexB = find(B(,:) ~= ); % 找出第二类中的点
U1(,m+) = mean(A(,indexA));
U1(,m+) = mean(A(,indexA));
U2(,m+) = mean(B(,indexB));
U2(,m+) = mean(B(,indexB)); % 更新两个聚类中心
end
figure;
plot(A(,indexA) , A(,indexA), '*b'); % 作出第一类点的图形
hold on
plot(B(,indexB) , B(,indexB), 'oy'); %作出第二类点的图形
hold on
centerx = [U1(,m) U2(,m)];
centery = [U1(,m) U2(,m)];
plot(centerx , centery, '+g'); % 画出两个聚类中心点
xlabel('X');
ylabel('Y');
title('聚类之后的数据点');
disp(['迭代的次数为:',num2str(m)]);
得到的分类结果如下:
50个随机生成的点分为两类迭代只需要4步,从上图来看,分类的效果还是不错的。但是每次运行可能分类的结果会不一样,这是因为这些点是随机生成的,而且也没有明确的分类标准的缘故。
K均值聚类算法的MATLAB实现的更多相关文章
- k均值聚类算法原理和(TensorFlow)实现
顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律. 我们知道,在机器学习中,有三种不同的学习模式:监督学习.无监督学习和强化学习: 监督学习,也 ...
- K均值聚类算法
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 聚类之K均值聚类和EM算法
这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...
- 机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例
k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定 ...
- 机器学习理论与实战(十)K均值聚类和二分K均值聚类
接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...
- 机器学习之K均值聚类
聚类的核心概念是相似度或距离,有很多相似度或距离的方法,比如欧式距离.马氏距离.相关系数.余弦定理.层次聚类和K均值聚类等 1. K均值聚类思想 K均值聚类的基本思想是,通过迭代的方法寻找K个 ...
- 100天搞定机器学习|day44 k均值聚类数学推导与python实现
[如何正确使用「K均值聚类」? 1.k均值聚类模型 给定样本,每个样本都是m为特征向量,模型目标是将n个样本分到k个不停的类或簇中,每个样本到其所属类的中心的距离最小,每个样本只能属于一个类.用C表示 ...
随机推荐
- asp.net 解决 "回发或回调参数无效" 一些常见解决方案
一.回发或回调参数无效,出现下图错误, 常见解决方案: 1.在页面的<%@ Page Language="C#" AutoEventWireup="true&qu ...
- JS学习笔记01
文章转载pigpigpig4587 的 1.Javascript是区分大小写的语言.也就是说.关键字.变量,函数和所有的标识符都必须采取一致的大小写形式.因为html不严格区分大小写,所以在html中 ...
- performSelector和performSelectorInBackground
前者是在主线程下完成的, 不会自动创建一个线程. 后者会创建一个新的线程.
- nginx、Apache、IIS服务器解决 413 Request Entity Too Large问题方法汇总
一.nginx服务器 nginx出现这个问题的原因是请求实体太长了.一般出现种情况是Post请求时Body内容Post的数据太大了,如上传大文件过大.POST数据比较多. 处理方法 在nginx.co ...
- 简化通过classname查找 方法
function getClass(oParent,sclass){ var aEle=oParent.getElementsByTagName('*'); var result=[]; for(va ...
- Java,Android 项目导入Eclipse常见错误
一.导入的jar包不存在: 右键工程属性查看: 导入的第三方jar包不存在: 解决方法: 删除该jar包,得到该jar包并存至本地,再导入该jar包 二.中文字符乱码: 解决方法: 右键项目属性: 修 ...
- java 调用 scala
1 scala 方法的输入输出不能有 jdk 不可识别的类型(如:Int,Float,Any 等是不行的,Unit 对应到 void 是可以的.) http://rwh.readthedocs.org ...
- java中调用xml的方法:DocumentBuilderFactory
具体的使用方法如下: (1)得到 DOM 解析器的工厂实例 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); (2 ...
- iOS版本更新的App提交审核流程
App的版本更新估计是在所难免的了!更新App和新的App发布有何不同了?今天我们一起来看看吧!在发布App的时候我们需要通过开发者帐号——(申请)——>发布证书(需要钥匙串对证书签名也叫加密( ...
- hadoop机架感知与网络拓扑分析:NetworkTopology和DNSToSwitchMapping
hadoop网络拓扑结构在整个系统中具有很重要的作用,它会影响DataNode的启动(注册).MapTask的分配等等.了解网络拓扑对了解整个hadoop的运行会有很大帮助. 首先通过下面两个图来了解 ...