- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一:K均值聚类一:算法介绍聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类。算法具体过程: 输入:k,x[n];(1) 选择k个初始中心点,例如u[0]=x[0],…u[k-1]=x[k-1];(2) 对于x[0]….x[n],即所有的数据元素,分别与u[0]…u[k-1]比较,假定与u[i]差值最少,就标记为j; 公式一:对于所有标记为j点,重新计算c[j]={ 所有标记为j的data[i]之和}/标记为j的个数; 公式二:重复(2)(3),直到所有c[i]值的变化小于给定阈值。二:算法matlab实现以下以二维平面的点聚类进行例子说明。main.m%第一类数据mu1=[-1,-1]%第一类数据的均值s1=[0.3 0;0 0.5]%协方差data1=mvnrnd(mu1,s1,100)%产生高斯分布的数据 %第二类数据mu2=[-1,1]%第二类数据的均值s2=[0.4 0;0 0.6]%协方差data2=mvnrnd(mu2,s2,100)%产生高斯分布的数据 %第三类数据mu3=[1,1]%第三类数据的均值s3=[0.4 0;0 0.3]%协方差data3=mvnrnd(mu3,s3,100)%产生高斯分布的数据 %第四类数据mu4=[1,-1]%第四类数据的均值s4=[0.6 0;0 0.3]%协方差data4=mvnrnd(mu4,s4,100)%产生高斯分布的数据 %显示数据plot(data1(:,1),data1(:,2),b+)hold onplot(data2(:,1),data2(:,2),r+)plot(data3(:,1),data3(:,2),g+)plot(data4(:,1),data4(:,2),y+)grid on%坐标轴线%数据合并data=[data1;data2;data3;data4]%k_mean聚类[u re]=KMeans(data,4)[m n]=size(re) %显示聚类后的结果figurehold onfor i=1:m if re(i,3)==1 plot(re(i,1),re(i,2),bo) elseif re(i,3)==2 plot(re(i,1),re(i,2),ro) elseif re(i,3)==3 plot(re(i,1),re(i,2),go) else plot(re(i,1),re(i,2),yo) endendgrid onKMeans.mfunction [u re]=KMeans(data,N)%u反映的是聚类中心 N表示聚类个数 [m n]=size(data);%m是数据个数,n是数据维数 ma=zeros(n);%ma存储每一维最大的数 mi=zeros(n);%mi存储每一维最小的数 u=zeros(N,n);%初始化聚类中心位置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 while 1 %重复做直到达到阈值,退出 pre_u=u;%上一次求得的中心位置 for i=1:N tmp{i}=[];% 公式一中的x(i)-uj,为公式一实现做准备 for j=1:m tmp{i}=[tmp{i};data(j,:)-u(i,:)];%所有的点j到u(i)点的向量。 end end quan=zeros(m,N); for i=1:m%公式一的实现 c=[]; for j=1:N c=[c norm(tmp{j}(i,:))];%norm求的是向量的二范式 end [junk index]=min(c);%返回的是最小值junk和对应的列号index quan(i,index)=junk;%将最小距离赋值给了quan矩阵 end for i=1:N%公式二的实现 也就是求出对于每一类的所有点的加权平均和 for j=1:n %对于每一个维度用同样的方法 u(i,j)=sum(quan(:,i).*data(:,j))/sum(quan(:,i)); end end if norm(pre_u-u)0.1 %不断迭代直到位置不再变化 break; end end re=[]; for i=1:m tmp=[]; for j=1:N tmp=[tmp norm(data(i,:)-u(j,:))];%各个数据点i与聚类中心j距离 end [junk index]=min(tmp); re=[re;data(i,:) index];%将每个数据点后面添加一个索
文档评论(0)