K-means自己写的代码,简单易懂,但是貌似效率有点低,没怎么优化
2014-04-19 10:49
399 查看
%N是数据一共分多少类 %data是输入的不带分类标号的数据 %u是每一类的中心 %re是返回的带分类标号的数据 %我们只需要得到聚类中心即可,所以只返回一个矩阵变量 function [u]=k_means(data,N) [m n]=size(data); %m是数据个数,n是数据维数 ma=zeros(n); %每一维最大的数 mi=zeros(n); %每一维最小的数 u=zeros(N,n); %随机初始化,最终迭代到每一类的中心位置 N中心个数 index=zeros(m); %m个数据的类别 for i=1:n ma(i)=max(data(:,i)); %每一维最大的数 mi(i)=min(data(:,i)); %每一维最小的数 for j=1:N u(j,i)=ma(i)+(mi(i)-ma(i))*rand(); %随机初始化,不过还是在每一维[min max]中初始化好些 end end for iteration =1:5 %我们就迭代5次就够了 %更新index矩阵,也就是标记矩阵 for i=1:m %更新每个数据点标记 min1=Inf; for j=1:N dist=0;%计算欧式距离,此处为简便不加sqrt了 for k=1:n dist=dist+(data(i,k)-u(j,k))*(data(i,k)-u(j,k)); end if(dist<min1) min1=dist; min_num=j; end end index(i)= min_num;%最后一次更新的min_num end %更新聚类中心 for i=1:N %更新每个聚类中心 index_num=0; index_sum=zeros(1,n); for j=1:m if(i==index(j)) %这个点属于第i个类 index_num=index_num+1; index_sum=index_sum+data(index(j),:); end end if(index_num~=0) u(i,:)=index_sum/index_num; end end end end
相关文章推荐
- leetcode 722. Remove Comments 移除代码注释 + 简单状态机 + 有点烦但是需要细心
- 一个简单的Tab平滑切换特效jquery代码,没有做最大效率优化
- 代码运行效率的简单测试(编译器,反射,优化后的反射)
- iOS中实现简单易懂秒杀倒计时/倒计时代码
- 汇编一个简单的C程序,分析代码理解计算机是怎么工作的
- 代码优化简单总结(1)
- 使用git管理自己的代码--简单使用流程
- Button 简单写,优化代码
- 优化,测试自己的代码
- 怎么在 Stack Overflow 里提问题的时候沾上自己的代码
- 自己觉得比较有用的WindowsPhone7 Http异步请求的一段简单代码
- 怎么感觉自己活得有点衰呢?
- Github的简单使用代码托管(建立自己的仓库实现代码的上传与版本管理)
- java性能优化:35个小细节让你提升java代码的运行效率
- 足以应付一切的水仙花数,字母交叉问题,数组排序去重复,今天get到一点点,首先一道题莫名其妙地改对了然后明白了自己思路是对的但是不会写代码 还是什么用都没有
- 老师,我上课听得懂,但是敲不出来代码怎么办?
- 怎么把自己的代码传到github上
- 【UVA11205】The broken pedometer,思路+代码,可能是最不装逼最朴素最易懂效率也最差的代码。
- 关于一些代码效率优化的方法(下)
- 人脸检测之MTCNN训练自己的数据(部分代码公开!请关注置顶的MTCNN算法优化!)