对应之前发过的:K均值聚类关于初始聚类中心的探讨,补发MATLAB的程序代码。

matlab程序:

1.

%利用传统K均值随机选取点聚类
clear all;
close all;
clc;
%生成五组三维高斯分布数据
mu1=[0 0 0];  %均值
sig1=[0.5 0 0;0 0.6 0;0 0 0.8]; %协方差
d1=mvnrnd(mu1,sig1,100);
mu2=[3 3 3];
sig2=[0.3 0 0;0 0.5 0;0 0 0.3];
d2=mvnrnd(mu2, sig2,100);
mu3=[6 6 6];
sig3=[0.2 0 0;0 0.3 0;0 0 0.5];
d3=mvnrnd(mu3, sig3,100);
mu4=[9 3 3];
sig4=[0.2 0 0;0 0.3 0;0 0 0.5];
d4=mvnrnd(mu4, sig4,100);
mu5=[0 6 9];
sig5=[0.2 0 0;0 0.3 0;0 0 0.5];
d5=mvnrnd(mu5, sig5,100);
%画出五组数据的图像
plot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
grid on;
%五类数据合成一个数据
data=[d1;d2;d3;d4;d5];
%k-means聚类
[u re]=KMeans(data,5);  %最后产生带标号的数据,标号在所有数据的最后,意思就是数据再加一维度
[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),'co'); elseif re(i,4)==2plot3(re(i,1),re(i,2),re(i,3),'go'); elseif re(i,4)==3plot3(re(i,1),re(i,2),re(i,3),'bo');elseif re(i,4)==4plot3(re(i,1),re(i,2),re(i,3),'mo');else plot3(re(i,1),re(i,2),re(i,3),'yo'); end
end
%聚类中心点
plot3(u(:,1),u(:,2),u(:,3),'ro')
grid on;

2.

%对初始聚类中心改进后的K均值聚类
clear all;
close all;
clc;
%生成五组三维的高斯分布数据
mu1=[0 0 0];  %均值
sig1=[0.5 0 0;0 0.6 0;0 0 0.8]; %协方差
d1=mvnrnd(mu1,sig1,100);
mu2=[3 3 3];
sig2=[0.3 0 0;0 0.5 0;0 0 0.3];
d2=mvnrnd(mu2, sig2,100);
mu3=[6 6 6];
sig3=[0.2 0 0;0 0.3 0;0 0 0.5];
d3=mvnrnd(mu3, sig3,100);
mu4=[9 3 3];
sig4=[0.2 0 0;0 0.3 0;0 0 0.5];
d4=mvnrnd(mu4, sig4,100);
mu5=[0 6 9];
sig5=[0.2 0 0;0 0.3 0;0 0 0.5];
d5=mvnrnd(mu5, sig5,100);
%画出五组数据的图像
plot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
grid on;
%三类数据合成一个数据
data=[d1;d2;d3;d4;d5];
N=5;
[m n]=size(data);   %m是数据个数,n是数据维数
%N个初始点的选取
u=zeros(N,n);
W=zeros(m,m);%计算一个距离的方阵
for i=1:mfor j=i:mW(i,j)=norm(data(i,:)-data(j,:));W(j,i)=W(i,j);end
end
%计算矩阵中每行k个值的位置并赋值(先按大小排列)
JL=zeros(1,m);
k=6;
for i=1:mA=W(i,:);
t=sort(A(:));%对每行进行排序后构成一个有序的行向量
JL(1,i)=t(k);%得到一个每个数据k近邻的半径
end
%找到JL中最小值即为密度最大的点的半径
t1=sort(JL);
[ro,co]=find(A<=t1(1),1);%(找到最小数的位置)
z=zeros(1,n);
z=data(co,:);%第一个初始聚类中心点
he=zeros(1,n);
u(1,:)=z;%第一个中心点的坐标
%生成第二个初始聚类中心点
A1=zeros(1,m);
for i=1:mA1(1,i)=norm(data(i,:)-u(1,:));
end
L=find(A1==max(A1));
z=data(L,:);
u(2,:)=z;%计算第三个点及以后的点
i=1;
data1=data';
n1=[co,L];
X2=sum(data1.^2,1);
dis=repmat(X2,m,1)+repmat(X2',1,m)-2*data1'*data1;
while i<=N-2D=dis(n1,:);[ma,mb]=max(min(D));n1=[n1,mb];i=i+1;
end
for g=3:Nc=n1(1,g);u(g,:)=data(c,:);
endfigure  %画出初始聚类中心点的位置plot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
plot3(u(:,1),u(:,2),u(:,3),'ro');
grid on;      %聚类while 1quan=zeros(m,N);pre_u=u;            %上一次求得的中心位置for j=1:mtmp=[];      % 求距离for i=1:Ntmp(i)=norm(data(j,:)-u(i,:));end  [junk index]=min(tmp); quan(j,index)=1;endfor i=1:N            %求中心点for j=1:nu(i,j)=sum(quan(:,i).*data(:,j))/sum(quan(:,i));end           endif norm(pre_u-u)<0.1  %不断迭代直到位置不再变化break;endend%生成带标号的数据点re=[];for i=1:mtmp=[];for j=1:Ntmp=[tmp norm(data(i,:)-u(j,:))];end[junk index]=min(tmp);re=[re;data(i,:) index];end
%对聚类后的数据画图
figure  plot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
plot3(u(:,1),u(:,2),u(:,3),'ro');
grid on;  

3.

%改进后的初始聚类中心演示图
clear all;
close all;
clc;
%生成五组三维高斯分布数据
mu1=[0 0 0];  %均值
sig1=[0.5 0 0;0 0.6 0;0 0 0.8]; %协方差
d1=mvnrnd(mu1,sig1,100);
mu2=[3 3 3];
sig2=[0.3 0 0;0 0.5 0;0 0 0.3];
d2=mvnrnd(mu2, sig2,100);
mu3=[6 6 6];
sig3=[0.2 0 0;0 0.3 0;0 0 0.5];
d3=mvnrnd(mu3, sig3,100);
mu4=[9 3 3];
sig4=[0.2 0 0;0 0.3 0;0 0 0.5];
d4=mvnrnd(mu4, sig4,100);
mu5=[0 6 9];
sig5=[0.2 0 0;0 0.3 0;0 0 0.5];
d5=mvnrnd(mu5, sig5,100);
%画出五组数据的图像
plot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
grid on;
%五类数据合成一个数据
data=[d1;d2;d3;d4;d5];
N=5;
[m n]=size(data);   %m是数据个数,n是数据维数
%K个初始点的选取(此程序适用于类数超过3的)
u=zeros(N,n);
%计算一个距离的方阵
W=zeros(m,m);
for i=1:mfor j=i:mW(i,j)=norm(data(i,:)-data(j,:));W(j,i)=W(i,j);end
end
%计算矩阵中每行k个值的位置并赋值(先按大小排列)
JL=zeros(1,m);
k=6;
for i=1:mA=W(i,:);
t=sort(A(:));%对每行进行排序后构成一个有序的行向量
JL(1,i)=t(k);%得到一个每个数据k近邻的半径
end
%找到JL中最小值即为密度最大的点的半径
t1=sort(JL);
[ro,co]=find(A<=t1(1),1);%(找到最小数的位置)
z=zeros(1,n);
%计算第一个中心点
z=data(co,:);
he=zeros(1,n);
u(1,:)=z;%第一个中心点的坐标
%计算第二个点
A1=zeros(1,m);
for i=1:mA1(1,i)=norm(data(i,:)-u(1,:));
end
L=find(A1==max(A1));
z=data(L,:);
u(2,:)=z;
%计算第三个点及以后的点
i=1;
data1=data';
n=[co,L];
X2=sum(data1.^2,1);
dis=repmat(X2,m,1)+repmat(X2',1,m)-2*data1'*data1;
while i<=N-2D=dis(n,:);[ma,mb]=max(min(D));n=[n,mb];i=i+1;
end
for g=3:Nc=n(1,g);u(g,:)=data(c,:);
endfigureplot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
plot3(u(:,1),u(:,2),u(:,3),'ro');
grid on;

4.

%N是数据一共分多少类
%data是输入的不带分类标号的数据
%u是每一类的中心
%re是返回的带分类标号的数据
function [u re]=KMeans1(data,N)   [m n]=size(data);   %m是数据个数,n是数据维数ma=zeros(n);        %每一维最大的数mi=zeros(n);        %每一维最小的数u=zeros(N,n);       %随机初始化,最终迭代到每一类的中心位置for i=1:nma(i)=max(data(:,i));    %每一维最大的数mi(i)=min(data(:,i));    %每一维最小的数for j=1:Nu(j,i)=ma(i)+(mi(i)-ma(i))*rand();  %随机初始化,不过还是在每一维[min max]中初始化好些end      end%开始聚类while 1quan=zeros(m,N);pre_u=u;            %上一次求得的中心位置for j=1:mtmp=[];      % 求距离for i=1:Ntmp(i)=norm(data(j,:)-u(i,:));end  [junk index]=min(tmp); quan(j,index)=1;endfor i=1:N            %求中心点for j=1:nu(i,j)=sum(quan(:,i).*data(:,j))/sum(quan(:,i));end           endif norm(pre_u-u)<0.1  %不断迭代直到位置不再变化break;endend%生成带标号的数据点re=[];for i=1:mtmp=[];for j=1:Ntmp=[tmp norm(data(i,:)-u(j,:))];end[junk index]=min(tmp);re=[re;data(i,:) index];end

5.

%随机生成的初始聚类中心演示
clear all;
close all;
clc;
%生成五组三维高斯分布数据
mu1=[0 0 0];  %均值
sig1=[0.5 0 0;0 0.6 0;0 0 0.8]; %协方差
d1=mvnrnd(mu1,sig1,100);
mu2=[3 3 3];
sig2=[0.3 0 0;0 0.5 0;0 0 0.3];
d2=mvnrnd(mu2, sig2,100);
mu3=[6 6 6];
sig3=[0.2 0 0;0 0.3 0;0 0 0.5];
d3=mvnrnd(mu3, sig3,100);
mu4=[9 3 3];
sig4=[0.2 0 0;0 0.3 0;0 0 0.5];
d4=mvnrnd(mu4, sig4,100);
mu5=[0 6 9];
sig5=[0.2 0 0;0 0.3 0;0 0 0.5];
d5=mvnrnd(mu5, sig5,100);
%画出五组数据的图像
plot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
grid on;
%五类数据合成一个数据
data=[d1;d2;d3;d4;d5];
N=5;
%随机生成N个初始点
[m n]=size(data);   %m是数据个数,n是数据维数ma=zeros(n);        %每一维最大的数mi=zeros(n);        %每一维最小的数u=zeros(N,n);       %随机初始化,最终迭代到每一类的中心位置for i=1:nma(i)=max(data(:,i));    %每一维最大的数mi(i)=min(data(:,i));    %每一维最小的数for j=1:Nu(j,i)=ma(i)+(mi(i)-ma(i))*rand();  %随机初始化,不过还是在每一维[min max]中初始化好些end      endfigureplot3(d1(:,1),d1(:,2),d1(:,3),'co');
hold on;
plot3(d2(:,1),d2(:,2),d2(:,3),'go');
plot3(d3(:,1),d3(:,2),d3(:,3),'bo');
plot3(d4(:,1),d4(:,2),d4(:,3),'mo');
plot3(d5(:,1),d5(:,2),d5(:,3),'yo');
plot3(u(:,1),u(:,2),u(:,3),'ro')
grid on;

1:常见K均值聚类代码(其中聚类调用文件夹中的KMeans)
2:改进的初始聚类中心点的K均值聚类代码
3:用MATLAB画出改进的初始聚类中心点
4:K均值聚类
5:用MATLAB画出随机生成的初始聚类中心点

K均值聚类关于初始聚类中心的探讨(matlab程序)相关推荐

  1. K均值聚类关于初始聚类中心选取的一种改进(python程序)

    本程序是K均值聚类关于初始聚类中心选取的一种改进,原理来自于周志华的机器学习,这里只是尝试用python实现下.刚开始学习python,可能有问题大家觉得有用就借鉴下,如果哪里有问题还望指正.关于K均 ...

  2. 原创 | 一文读懂K均值(K-Means)聚类算法

    作者:王佳鑫审校:陈之炎本文约5800字,建议阅读10+分钟本文为你介绍经典的K-Means聚类算法. 概述 众所周知,机器学习算法可分为监督学习(Supervised learning)和无监督学习 ...

  3. 一文读懂K均值(K-Means)聚类算法

    作者:王佳鑫 审校:陈之炎 本文约5800字,建议阅读10+分钟本文为你介绍经典的K-Means聚类算法. 概述 众所周知,机器学习算法可分为监督学习(Supervised learning)和无监督 ...

  4. SPSS用KMEANS(K均值)、两阶段聚类、RFM模型在P2P网络金融研究借款人、出款人行为数据规律...

    全文下载链接:http://tecdat.cn/?p=27831 随着P2P网络金融平台的交易量的激增,其交易数据不能得到充分有效地利用.将聚类分析引入到P2P网络金融平台的管理之中,利用聚类分析技术 ...

  5. K均值聚类关于初始聚类中心的探讨

    摘要:进入二十一世纪以来,科学技术的不断发展,使得数据挖掘技术得到了学者越来越多的关注.数据挖掘是指从数据库中发现隐含在大量数据中的新颖的.潜在的有用信息和规则的过程,是一种处理数据库数据的知识发现. ...

  6. K均值(K-means)聚类算法

    文章目录 一. K-Means原理 二.算法流程 2.1 算法描述 2.2 算法分析: 2.3 k-means评价标准 2.4 k-means优缺点 三.项目实战 K-Means算法是经典的无监督的聚 ...

  7. 【论文阅读】基于自适应小生境和 k 均值操作的数据聚类差分进化算法

    文章目录 原文题目 摘要 I. 引言 背景知识 Niching(小生境) 适应度共享 参考文献 提出 Niching Method 的动机 Niching Method 需要 Adaptive 的动机 ...

  8. R实现K均值算法,层次聚类算法与DBSCAN算法

    1.聚类的基本概念 聚类分析(cluster analysis)仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组.其目标是,组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不 ...

  9. 基于K均值算法的鸢尾花聚类实验(Sklearn实现)

    实验代码 ##### 相关库导入部分 ##### from sklearn.datasets import load_iris import pandas as pd from sklearn.pre ...

最新文章

  1. RasberryPi快速启动(适合首次接触树莓派学习者)
  2. NRFI:网络结点不会指数增加的「神经随机深林模拟」
  3. 实用jQuery代码段
  4. javascript 之 this 用法
  5. React.js 开发常见问题
  6. c语言网页版在线编译器_C语言编译器IDEapp下载-C语言编译器IDE官方版下载v1.5.1 安卓版...
  7. MarkerOpter marker操作类
  8. CentOS 7中源码安装MySQL 5.7.16 ----已测试验证
  9. Android小知识-剖析OkHttp中的五个拦截器(上篇)
  10. windows制作docker镜像_优秀软件推荐-微软官方工具升级windows或制作启动U盘及镜像...
  11. nacos修改端口号
  12. 员工考勤管理系统html,网页考勤系统人员排班操作说明
  13. 天刀找不到服务器,《天涯明月刀手游》好友服务器查看方法 怎么查看好友在哪个区...
  14. java jxls 变量,11、进阶之Jxls2的自定义函数
  15. DDos防护系列之2--DDos防御策略
  16. JavaScript实现登录密码的显示和隐藏
  17. android 游戏分享
  18. [51Nod 1920] 空间统计学
  19. mongorepository简单使用
  20. Deep Learning for Weakly-Supervised Object Detection and Object Localization: A Survey

热门文章

  1. 寄存器地址和内存地址_3. 从0开始学ARMARM模式、寄存器、流水线
  2. window获取历史url_Facebook 开出历史最高赏金,55,000 美元奖励十年漏洞发现者
  3. noip2017初赛的一些知识点
  4. 服务器安装三节点RabbitMQ集群(4)
  5. android view过度动画,为View的切换添加过渡动画
  6. Vue数据更新数据不渲染问题 - 资源篇
  7. css hack惯用手法
  8. 用python计算列表元素之和_python实现计算列表元素之和
  9. python僵尸进程和孤儿进程_进程3.0——进程状态与僵尸进程、孤儿进程
  10. 百分百储值卡回收网站源码+手机模板