Sigma = [1, 0; 0, 1];
mu1 = [1, -1];
x1 = mvnrnd(mu1, Sigma, 200);
mu2 = [5.5, -4.5];
x2 = mvnrnd(mu2, Sigma, 200);
mu3 = [1, 4];
x3 = mvnrnd(mu3, Sigma, 200);
mu4 = [6, 4.5];
x4 = mvnrnd(mu4, Sigma, 200);
mu5 = [9, 0.0];
x5 = mvnrnd(mu5, Sigma, 200);
% obtain the 1000 data points to be clustered
X = [x1; x2; x3; x4; x5];
% Show the data point
plot(x1(:,1), x1(:,2), 'r.'); hold on;
plot(x2(:,1), x2(:,2), 'b.');
plot(x3(:,1), x3(:,2), 'k.');
plot(x4(:,1), x4(:,2), 'g.');
plot(x5(:,1), x5(:,2), 'm.');
save myX  %将X存储到文件中,在其他文件中load就可以了

结果如下:

 % 初始聚类中心
mu0=[X(,:); X(,:);X(,:);X(,:);X(,:)];
mu1=zeros(,c);
lable=zeros(r,);
% first cluster
dist=zeros(,);
for k=:r
for n=:
dist(n)=norm(X(k,:)-mu0(n,:));
end
lable(k)=find(dist==min(dist));
end % X1=[lable X];
sum=zeros(,);
count=zeros(,); % 第一次聚类
for n=:
for k=:r
if lable(k)==n
sum(n,:)=sum(n,:)+X(k,:);
count(n)=count(n)+;
end
end
mu1(n,:)=sum(n,:)/count(n);
end % square error
e=zeros(,);
esum=;
for n=:
for k=:r
if lable(k)==n
e(n,:)=e(n,:)+norm(X(k,:)-mu1(n,:));
end
end
esum=esum+e(n,:);
end % ***************** start Iteration ************** countNotX=;% 到达一定值后,停止迭代
s=;
count1=zeros(,);
while true
s=s+;
%random choose X to update
ran=round(+*rand());%总共1000个样本
Xrand=X(ran,:);
rou=zeros(,);
rouMin=inf;
newClassLable=;
if count(lable(ran))~=
for n=:
if lable(ran)==n
rou(n)=norm(Xrand-mu1(n,:))*count(n)/(count(n)-);
else
rou(n)=norm(Xrand-mu1(n,:))*count(n)/(count(n)+);
end
if rou(n)<=rouMin;
rouMin=rou(n);
newClassLable=n;
end
end
if rouMin<rou(lable(ran))
countNotX=;
% new mu 这里用课件中的公式,不知道哪里错了,总是不行,就用最蠢的办法了
for n=:
for k=:r
if lable(k)==n
sum(n,:)=sum(n,:)+X(k,:);
count1(n)=count1(n)+;
end
end
mu1(n,:)=sum(n,:)/count1(n);
end
% new count
count(lable(ran))=count(lable(ran))-;
count(newClassLable)=count(newClassLable)+;
% new esum
e(lable(ran),:)=e(lable(ran),:)-rou(lable(ran));
e(newClassLable,:)=e(newClassLable,:)+rouMin;
esum=esum+rouMin-rou(lable(ran));
lable(ran)=newClassLable ;
else
% disp('No')
countNotX= countNotX+;
if countNotX==
%when J is not changed for times,reckon OK
break
end
end
end
end

K均值聚类(Kmeans)的更多相关文章

  1. 【转】算法杂货铺——k均值聚类(K-means)

    k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...

  2. 第十篇:K均值聚类(KMeans)

    前言 本文讲解如何使用R语言进行 KMeans 均值聚类分析,并以一个关于人口出生率死亡率的实例演示具体分析步骤. 聚类分析总体流程 1. 载入并了解数据集:2. 调用聚类函数进行聚类:3. 查看聚类 ...

  3. (ZT)算法杂货铺——k均值聚类(K-means)

    https://www.cnblogs.com/leoo2sk/category/273456.html 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先 ...

  4. 机器学习之路:python k均值聚类 KMeans 手写数字

    python3 学习使用api 使用了网上的数据集,我把他下载到了本地 可以到我的git中下载数据集: https://github.com/linyi0604/MachineLearning 代码: ...

  5. 吴裕雄 python 机器学习——K均值聚类KMeans模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...

  6. K均值聚类

    聚类(cluster)与分类的不同之处在于, 分类算法训练过程中样本所属的分类是已知的属监督学习. 而聚类算法不需要带有分类的训练数据,而是根据样本特征的相似性将其分为几类,又称为无监督分类. K均值 ...

  7. 机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例

    k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定 ...

  8. Python实现kMeans(k均值聚类)

    Python实现kMeans(k均值聚类) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=> ...

  9. 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测

    据我们所知,有‘已知的已知’,有些事,我们知道我们知道:我们也知道,有 ‘已知的未知’,也就是说,有些事,我们现在知道我们不知道.但是,同样存在‘不知的不知’——有些事,我们不知道我们不知道. 上一章 ...

  10. 机器学习理论与实战(十)K均值聚类和二分K均值聚类

    接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...

随机推荐

  1. Linux的bg和fg命令简单介绍

    我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和 bg 命令,让我们轻松调度正在运行的 ...

  2. 短信轰炸PC版

    前言 之前用过android版短信轰炸的apk,于是想反编apk查看源码找短信接口,做一个PC版本的,不料反编失败.后不了了之... 昨日逛论坛时无意中看到一个网站有此功能,打开一试究竟,效果可以,于 ...

  3. Bootstrap——导航栏编写

    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">     ...

  4. flume系列之—flume ng使用demo

    摘自:http://rjhym.blog.163.com/blog/static/28130232201263042013972/

  5. Cheatsheet: 2013 07.01 ~ 07.08

    .NET The overhead of async/await in NET 4.5 await Task, Task.Wait and Friends 350 Interview Question ...

  6. CUBRID学习笔记 12防火墙设置 linux

    这玩意是linux上用的. 如果你的数据库不是装在linux下可以飘过了 iptables -I INPUT -p tcp --dport 8001 -j ACCEPT iptables -I INP ...

  7. Javascript屏蔽回车提交表单

    html利用input防止回车提交 默认情况下,单个输入框,无论按钮的type="submit"还是type="button"类型,回车即提交. 1.当type ...

  8. 学习笔记day5:inline inline-block block区别

    1. block元素可以包含block元素和inline元素:但inline元素只能包含inline元素.要注意的是这个是个大概的说法,每个特定的元素能包含的元素也是特定的,所以具体到个别元素上,这条 ...

  9. .net ftp上传文件方法

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  10. gcc, numpy, rabbitmq等安装升级总结

    1. 公司在下面目录安装了gcc-4.8.2,以支持c++11,可以通过在bashrc中添加来实现: PATH=/opt/compiler/gcc-4.8.2/bin:$PATH 2. 公司环境切换到 ...