MatLab Kmeans聚类实例
来源:互联网 发布:淘宝网折800儿童旅行箱 编辑:程序博客网 时间:2024/06/05 19:04
转载自:http://blog.csdn.net/makenothing/article/details/50363536
%随机获取150个点X = [randn(50,2)+ones(50,2);randn(50,2)-ones(50,2);randn(50,2)+[ones(50,1),-ones(50,1)]];opts = statset('Display','final');%调用Kmeans函数%X N*P的数据矩阵%Idx N*1的向量,存储的是每个点的聚类标号%Ctrs K*P的矩阵,存储的是K个聚类质心位置%SumD 1*K的和向量,存储的是类间所有点与该类质心点距离之和%D N*K的矩阵,存储的是每个点与所有质心的距离;[Idx,Ctrs,SumD,D] = kmeans(X,3,'Replicates',3,'Options',opts);%画出聚类为1的点。X(Idx==1,1),为第一类的样本的第一个坐标;X(Idx==1,2)为第二类的样本的第二个坐标plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',14)hold onplot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',14)hold onplot(X(Idx==3,1),X(Idx==3,2),'g.','MarkerSize',14)%绘出聚类中心点,kx表示是圆形plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)legend('Cluster 1','Cluster 2','Cluster 3','Centroids','Location','NW')CtrsSumD
clear all;close all;clc;%第一类数据mu1=[0 0 0]; %均值S1=[0.3 0 0;0 0.35 0;0 0 0.3]; %协方差data1=mvnrnd(mu1,S1,100); %产生高斯分布数据%%第二类数据mu2=[1.25 1.25 1.25];S2=[0.3 0 0;0 0.35 0;0 0 0.3];data2=mvnrnd(mu2,S2,100);%第三个类数据mu3=[-1.25 1.25 -1.25];S3=[0.3 0 0;0 0.35 0;0 0 0.3];data3=mvnrnd(mu3,S3,100);%显示数据plot3(data1(:,1),data1(:,2),data1(:,3),'+');hold on;plot3(data2(:,1),data2(:,2),data2(:,3),'r+');plot3(data3(:,1),data3(:,2),data3(:,3),'g+');grid on;%三类数据合成一个不带标号的数据类data=[data1;data2;data3]; %这里的data是不带标号的%k-means聚类[u re]=KMeans(data,3); %最后产生带标号的数据,标号在所有数据的最后,意思就是数据再加一维度[m n]=size(re);%最后显示聚类后的数据figure;hold on;for i=1:m if re(i,4)==1 plot3(re(i,1),re(i,2),re(i,3),'ro'); elseif re(i,4)==2 plot3(re(i,1),re(i,2),re(i,3),'go'); else plot3(re(i,1),re(i,2),re(i,3),'bo'); endendgrid on;
%N是数据一共分多少类%data是输入的不带分类标号的数据%u是每一类的中心%re是返回的带分类标号的数据function [u re]=KMeans(data,N) [m n]=size(data); %m是数据个数,n是数据维数 ma=zeros(n); %每一维最大的数 mi=zeros(n); %每一维最小的数 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,:)]; end end quan=zeros(m,N); for i=1:m %公式一的实现 c=[]; for j=1:N c=[c norm(tmp{j}(i,:))]; end [junk index]=min(c); %quan(i,index)=norm(tmp{index}(i,:)); quan(i,index)=1; 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,:))]; end [junk index]=min(tmp); re=[re;data(i,:) index]; endend
1 0
- MatLab Kmeans聚类实例
- matlab下的Kmeans聚类算法
- Matlab函数kmeans:K-均值聚类
- Matlab中kmeans聚类用法
- kmeans聚类及Matlab实现
- kmeans聚类算法matlab实现
- kmeans聚类算法及matlab实现
- Kmeans聚类算法及其matlab源码
- MATLAB并行实现Kmeans聚类算法
- R 语言kmeans聚类实例
- Matlab聚类分析_层次聚类+kmeans聚类等
- 聚类算法KMeans和KMedoid 的Matlab实现
- PCA降维以及Kmeans聚类实例----python,sklearn,PCA,Kmeans
- 5.1、聚类之Kmeans聚类实例
- KMEANS聚类算法
- KMeans聚类算法
- kmeans聚类算法
- Kmeans 文本聚类
- 小白学react之SASS实战
- 学习资料
- java.io.IOException: NameNode is not formatted
- ATT的SIM卡(GoPhone)连不上4G网络怎么办
- 小白学react之页面BaseLayout框架及微信的坑
- MatLab Kmeans聚类实例
- this指针
- phpcms v9 搜索页显示自定义字段
- 小白学react之由FOUC引发的一次webpack变革
- android动态加载框架使用
- 背包问题
- shell (1)
- 3. 表单
- 小白学react之EJS模版实战