基于最大最小距离的分类数目上限K确定的聚类方法
2014-07-20 22:17
417 查看
聚类是数据挖掘很重要的组成部分.而大多数聚类算法都需要事先确定分类数目K.而本文是在实际
情况下确定分类数目K的上限.进而对数据样本进行自动分类.
首先介绍下最大最小距离算法:
设样本集为X{x(1),x(2).......}
1.选取任意一个样本作为第一个聚类中心 如z(1)=x(1)
2.选取距离z(1)最远的样本点作为第二个聚类中心,设为z(2)
3.计算每个样本到z(1),z(2)的距离D(i,1),D(i,2);并选出其中最小的距离T(i)=min(D(i,1),D(i,2))
4.在所有样本最小值中选择最大值即max(T);
5.若max(T(i))>=θ|z(1)-z(2)|,(θ为事先给定,|z(1)-z(2)|为两聚类中心的距离),则z(3)=x(i),否则无新的聚类中心.
则找聚类中心结束,θ可用试探法,只要能将想要的类别识别即可.这里设z(3)=x(7)
6.若z(3)存在,则继续步骤3,计算每个样本到z(1),z(2),z(3)的距离D(i,1),D(i,2),D(i,3);并选出其中最小的距离T(i)=min(D(i,1),D(i,2),D(i,3))
7.重复步骤4,5直到不满足5的条件,聚类结束.
8.假设一共只要三个聚类中心.那么比较每个样本点到三个聚类中心的距离.距离最小者即符合该类,属于该类.
改近的最大最小距离算法:
设样本集为X{x(1),x(2)........},此样本集最多分为3类,即k=1或k=2或k=3
1.首先将样本集合的数据进行升序排序Y(y(1),y(2).......y(N))
2.如果样本集至少存在一个数据,则说明至少存在一类.取排序后的第一个数为第一个聚类中心z(1)=y(1);避免了随机选取带来的不稳定性
3.如果排序后的样本集合最后一个元素的值减去第一个元素值>5 即认为存在两类,这里取最后一个元素为第二个聚类中心.z(2)=y(N)
这也符合前两个聚类中心距离最远的条件.
4.再根据最大最小距离判定法则对剩下的聚类中心进行判定.
以下为matlab仿真代码:
仿真结果:
进行三类划分:
测试数据:
结果:
进行二类划分:
测试数据
结果:
进行一类划分:
测试数据:
结果:
情况下确定分类数目K的上限.进而对数据样本进行自动分类.
首先介绍下最大最小距离算法:
设样本集为X{x(1),x(2).......}
1.选取任意一个样本作为第一个聚类中心 如z(1)=x(1)
2.选取距离z(1)最远的样本点作为第二个聚类中心,设为z(2)
3.计算每个样本到z(1),z(2)的距离D(i,1),D(i,2);并选出其中最小的距离T(i)=min(D(i,1),D(i,2))
4.在所有样本最小值中选择最大值即max(T);
5.若max(T(i))>=θ|z(1)-z(2)|,(θ为事先给定,|z(1)-z(2)|为两聚类中心的距离),则z(3)=x(i),否则无新的聚类中心.
则找聚类中心结束,θ可用试探法,只要能将想要的类别识别即可.这里设z(3)=x(7)
6.若z(3)存在,则继续步骤3,计算每个样本到z(1),z(2),z(3)的距离D(i,1),D(i,2),D(i,3);并选出其中最小的距离T(i)=min(D(i,1),D(i,2),D(i,3))
7.重复步骤4,5直到不满足5的条件,聚类结束.
8.假设一共只要三个聚类中心.那么比较每个样本点到三个聚类中心的距离.距离最小者即符合该类,属于该类.
改近的最大最小距离算法:
设样本集为X{x(1),x(2)........},此样本集最多分为3类,即k=1或k=2或k=3
1.首先将样本集合的数据进行升序排序Y(y(1),y(2).......y(N))
2.如果样本集至少存在一个数据,则说明至少存在一类.取排序后的第一个数为第一个聚类中心z(1)=y(1);避免了随机选取带来的不稳定性
3.如果排序后的样本集合最后一个元素的值减去第一个元素值>5 即认为存在两类,这里取最后一个元素为第二个聚类中心.z(2)=y(N)
这也符合前两个聚类中心距离最远的条件.
4.再根据最大最小距离判定法则对剩下的聚类中心进行判定.
以下为matlab仿真代码:
clc; clear; % load Data1.mat %加载数据 ClomStatic=[7,1,3,5,1,56,57,53,24,16,20,21]; len=length(ClomStatic);%求向量ClomStatic的长度 %如果存在非零长度,则至少为一类. if(len>0) k=1; Z(k)=ClomStatic(1); %取第一个位置为第一个聚类中心 TempZ=ClomStatic(len); %如果最大最小数值差值大于20,则至少存在两类 if(TempZ-Z(1)>=5) k=k+1; Z(k)=ClomStatic(len); %取第最后个位置为第二个聚类中心 %逐个求出各个样本和聚类中心Z(1),Z(2)之间的距离选出每个点到聚类中心中的较小值 D=zeros(len,2); M=zeros(1,len); for i=1:len D(i,1)=abs(ClomStatic(i)-Z(1)); D(i,2)=abs(ClomStatic(i)-Z(2)); M(i)=min(D(i,:)); end %在M中找出最大值和20(20为聚类间隔,自定义设定),若大于,则产生新的聚类中心,否则无新的聚类中心,判断是否存在第三类 [m indexm]=max(M); if(m>0.32*abs(Z(1)-Z(2))) k=k+1; %如果k<3则聚类结束 Z(k)=ClomStatic(indexm); end %若Z(3)存在 if(k==3) %将样本按最近距离分到最近的聚类中心 k=3 TempDistance=zeros(len,k); p1=1; p2=1; p3=1; for i=1:len for j=1:k TempDistance(i,j)=abs(ClomStatic(i)-Z(j)); end [Dis GroupIndex]=min(TempDistance(i,:)); if(GroupIndex==1)%Group保存最终的分类结果 Group1(p1)=ClomStatic(i); p1=p1+1; elseif(GroupIndex==2) Group2(p2)=ClomStatic(i); p2=p2+1; elseif(GroupIndex==3) Group3(p3)=ClomStatic(i); p3=p3+1; end end %求类中心 ClassCenter=zeros(1,3); ClassCenter(1)=floor(sum(Group1)/length(Group1)); ClassCenter(2)=floor(sum(Group2)/length(Group2)); ClassCenter(3)=floor(sum(Group3)/length(Group3)); else %将样本按最近距离分到最近的聚类中心 k=2 TempDistance=zeros(len,k); p1=1; p2=1; for i=1:len for j=1:k TempDistance(i,j)=abs(ClomStatic(i)-Z(j)); end [Dis GroupIndex]=min(TempDistance(i,:)); if(GroupIndex==1) %Group保存最终的分类结果 Group1(p1)=ClomStatic(i); p1=p1+1; elseif(GroupIndex==2) Group2(p2)=ClomStatic(i); p2=p2+1; end end %求类中心 ClassCenter=zeros(1,2); ClassCenter(1)=floor(sum(Group1)/length(Group1)); ClassCenter(2)=floor(sum(Group2)/length(Group2)); end else %k=1; j=1; for i=1:len Group1(j)=ClomStatic(i); j=j+1; end %求类中心 ClassCenter=zeros(1,1); ClassCenter(1)=floor(sum(Group1)/length(Group1)); end end
仿真结果:
进行三类划分:
测试数据:
结果:
进行二类划分:
测试数据
结果:
进行一类划分:
测试数据:
结果:
相关文章推荐
- [置顶] 基于最大最小距离的分类数目上限K确定的聚类方法
- ArcGIS教程:基于路网距离的城市辐射范围确定方法
- 论文笔记3《基于信息增益和最小距离分类的决策树改进算法》
- 基于距离的聚类方法--K-means
- 【机器学习】确定最佳聚类数目的10种方法
- 用最简便的方法获取数组中的最大(最小)值。
- 最小距离法监督分类
- C++实现的带最大最小线程数的线程池(基于ACE)
- Javascript 数组取最大值与最小值 的原型扩展方法
- 用递归的方法求数组中元素的最大值和最小值
- 人工智能之博弈二、最大最小值方法
- 聚类分析中分类数的确定问题
- 最简练的计算三个整数中最大值和最小值的方法
- 一棵排序二叉树,令 f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。 复杂度如果是O(n2)则不得分。
- poj 1789 根据字符串中字符的差异来确定距离的最小生成树(水)
- MyEclispe修改最大内存和最小内存的方法
- Erlang取最大整数和最小整数方法
- RMQ模板 求区间最大、最小值。 (前提是数组一旦确定便不再频繁更改)
- 另类方法求两个整数的最大值 最小值
- 同时获得一个序列的最小和最大值的方法