K均值聚类(Kmeans)
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)的更多相关文章
- 【转】算法杂货铺——k均值聚类(K-means)
k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...
- 第十篇:K均值聚类(KMeans)
前言 本文讲解如何使用R语言进行 KMeans 均值聚类分析,并以一个关于人口出生率死亡率的实例演示具体分析步骤. 聚类分析总体流程 1. 载入并了解数据集:2. 调用聚类函数进行聚类:3. 查看聚类 ...
- (ZT)算法杂货铺——k均值聚类(K-means)
https://www.cnblogs.com/leoo2sk/category/273456.html 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先 ...
- 机器学习之路:python k均值聚类 KMeans 手写数字
python3 学习使用api 使用了网上的数据集,我把他下载到了本地 可以到我的git中下载数据集: https://github.com/linyi0604/MachineLearning 代码: ...
- 吴裕雄 python 机器学习——K均值聚类KMeans模型
import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...
- K均值聚类
聚类(cluster)与分类的不同之处在于, 分类算法训练过程中样本所属的分类是已知的属监督学习. 而聚类算法不需要带有分类的训练数据,而是根据样本特征的相似性将其分为几类,又称为无监督分类. K均值 ...
- 机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例
k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定 ...
- Python实现kMeans(k均值聚类)
Python实现kMeans(k均值聚类) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=> ...
- 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测
据我们所知,有‘已知的已知’,有些事,我们知道我们知道:我们也知道,有 ‘已知的未知’,也就是说,有些事,我们现在知道我们不知道.但是,同样存在‘不知的不知’——有些事,我们不知道我们不知道. 上一章 ...
- 机器学习理论与实战(十)K均值聚类和二分K均值聚类
接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...
随机推荐
- js九九乘法表
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
- C#代码开发规范
Wrod下载 C#代码开发规范 文件状态: [√] 草稿 [ ] 正式 [ ] 修改 文件标识: 当前版本: 1.1 作 者: Empty 联系电话: 最后更新: ...
- Windows2003中IIS配置MVC提示HTTP错误 404-文件或目录未找到
Windows2003中IIS提示HTTP错误 404-文件或目录未找到 一.开启服务 启动服务“ASP.NET 状态服务”(ASP.NET State Service ),设置成“自动”. 设置完成 ...
- 检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005
检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005 http://blog.csdn.net ...
- 如何查看tensorflow版本与存储位置
import tensorflow as tf tf.__version__ __看着是一个下划线,实际上是两个下划线,中间有空格 tf.__path_
- Mysql-学习笔记(==》事件 十二)
事件 计划任务(定期定时执行) -- 查看当前mysql数据库是否开启时间功能,默认关闭SHOW VARIABLES LIKE 'event_scheduler'; -- event_schedule ...
- PHP CURL实现远程下载文件到本地
<?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...
- svn转移版本库
1.导出 svnadmin dump命令语法svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental] 示例:svnadmin dump E ...
- HTTP传送协议
HTTP传送协议--学习笔记 HTTP数据传输格式 基本格式为: 请求或应答行 请求或应答头部 空行 数据 POST传送格式 底层数据通信: 客户端请求: POST /response.php HTT ...
- js写个日历
其实我是一个对时间和日期不怎么感兴趣的人,小学的时候感觉时间或者日期那块就让我很晕,因为有时候是100进制有时候是60进制,搞的我对日历一直很不感兴趣,最近不知道为什么想写一个日历了,可想而知,这个玩 ...