聚类是数据挖掘很重要的组成部分.而大多数聚类算法都需要事先确定分类数目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仿真代码:

  1. clc;
  2. clear;
  3. % load Data1.mat %加载数据
  4. ClomStatic=[7,1,3,5,1,56,57,53,24,16,20,21];
  5. len=length(ClomStatic);%求向量ClomStatic的长度
  6.  
  7. %如果存在非零长度,则至少为一类.
  8. if(len>0)
  9. k=1;
  10. Z(k)=ClomStatic(1); %取第一个位置为第一个聚类中心
  11. TempZ=ClomStatic(len);
  12.  
  13. %如果最大最小数值差值大于20,则至少存在两类
  14. if(TempZ-Z(1)>=5)
  15. k=k+1;
  16. Z(k)=ClomStatic(len); %取第最后个位置为第二个聚类中心
  17.  
  18. %逐个求出各个样本和聚类中心Z(1),Z(2)之间的距离选出每个点到聚类中心中的较小值
  19. D=zeros(len,2);
  20. M=zeros(1,len);
  21. for i=1:len
  22. D(i,1)=abs(ClomStatic(i)-Z(1));
  23. D(i,2)=abs(ClomStatic(i)-Z(2));
  24. M(i)=min(D(i,:));
  25. end
  26.  
  27. %在M中找出最大值和20(20为聚类间隔,自定义设定),若大于,则产生新的聚类中心,否则无新的聚类中心,判断是否存在第三类
  28. [m indexm]=max(M);
  29. if(m>0.32*abs(Z(1)-Z(2)))
  30. k=k+1; %如果k<则聚类结束
  31. Z(k)=ClomStatic(indexm);
  32. end
  33.  
  34. %若Z(3)存在
  35. if(k==3)
  36. %将样本按最近距离分到最近的聚类中心 k=3
  37. TempDistance=zeros(len,k);
  38. p1=1;
  39. p2=1;
  40. p3=1;
  41. for i=1:len
  42. for j=1:k
  43. TempDistance(i,j)=abs(ClomStatic(i)-Z(j));
  44. end
  45. [Dis GroupIndex]=min(TempDistance(i,:));
  46. if(GroupIndex==1)%Group保存最终的分类结果
  47. Group1(p1)=ClomStatic(i);
  48. p1=p1+1;
  49. elseif(GroupIndex==2)
  50. Group2(p2)=ClomStatic(i);
  51. p2=p2+1;
  52. elseif(GroupIndex==3)
  53. Group3(p3)=ClomStatic(i);
  54. p3=p3+1;
  55. end
  56. end
  57. %求类中心
  58. ClassCenter=zeros(1,3);
  59. ClassCenter(1)=floor(sum(Group1)/length(Group1));
  60. ClassCenter(2)=floor(sum(Group2)/length(Group2));
  61. ClassCenter(3)=floor(sum(Group3)/length(Group3));
  62. else
  63. %将样本按最近距离分到最近的聚类中心 k=2
  64. TempDistance=zeros(len,k);
  65. p1=1;
  66. p2=1;
  67. for i=1:len
  68. for j=1:k
  69. TempDistance(i,j)=abs(ClomStatic(i)-Z(j));
  70. end
  71. [Dis GroupIndex]=min(TempDistance(i,:));
  72. if(GroupIndex==1) %Group保存最终的分类结果
  73. Group1(p1)=ClomStatic(i);
  74. p1=p1+1;
  75. elseif(GroupIndex==2)
  76. Group2(p2)=ClomStatic(i);
  77. p2=p2+1;
  78. end
  79. end
  80. %求类中心
  81. ClassCenter=zeros(1,2);
  82.  
  83. ClassCenter(1)=floor(sum(Group1)/length(Group1));
  84. ClassCenter(2)=floor(sum(Group2)/length(Group2));
  85. end
  86. else
  87. %k=1;
  88. j=1;
  89. for i=1:len
  90. Group1(j)=ClomStatic(i);
  91. j=j+1;
  92. end
  93. %求类中心
  94. ClassCenter=zeros(1,1);
  95.  
  96. ClassCenter(1)=floor(sum(Group1)/length(Group1));
  97. end
  98. end

仿真结果:

进行三类划分:

测试数据:

结果:

进行二类划分:

测试数据

结果:

进行一类划分:

测试数据:

结果:

基于最大最小距离的分类数目上限K确定的聚类方法的更多相关文章

  1. HBase单个RegionServer的region数目上限

    前言 RegionServer维护Master分配给它的region,处理对这些region的IO请求,负责切分在运行过程中变得过大的region, 由于集群性能( 分配的内存和磁盘是有限的 )有限的 ...

  2. tensorflow实现基于LSTM的文本分类方法

    tensorflow实现基于LSTM的文本分类方法 作者:u010223750 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实 ...

  3. 一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)

    雷锋网按:本文作者陆池,原文载于作者个人博客,雷锋网已获授权. 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用 ...

  4. Spark Mllib里如何对决策树二元分类和决策树多元分类的分类数目numClasses控制(图文详解)

    不多说,直接上干货! 决策树二元分类的分类数目numClasses控制 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类Stumble ...

  5. Kmeans算法的K值和聚类中心的确定

    0 K-means算法简介 K-means是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一. K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的 ...

  6. 基于百度EasyDL定制化图像识别平台的海洋鱼类识别方法

    [目的]鱼类识别对渔业资源的开发利用有着重要的意义.针对海底环境恶劣.拍摄环境亮度低.场景模糊的实际情况导致海底观测视频品质差,视频中的鱼类识别难的问题以及现有鱼类识别方法存在的鱼类标注数据集过少导致 ...

  7. 10.HanLP实现k均值--文本聚类

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 10. 文本聚类 正所谓物以类聚,人以群分.人们在获取数据时需要整理,将相似的数据 ...

  8. Kaggle "Microsoft Malware Classification Challenge"——就是沙箱恶意文件识别,有 Opcode n-gram特征 ASM文件图像纹理特征 还有基于图聚类方法

    使用图聚类方法:Malware Classification using Graph Clustering 见 https://github.com/rahulp0491/Malware-Classi ...

  9. Params:params 关键字可以指定在参数数目可变处采用参数的方法参数。

    Params:params 关键字可以指定在参数数目可变处采用参数的方法参数. 注意点: 1.一个方法中只能使用一个params来声明不定长参数数组: 2.params参数数组只能放在已定义参数后面 ...

随机推荐

  1. 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发

    原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...

  2. C语言的本质(36)——makefile基础

    除了Hello World这种极简单的程序之外,一般的程序都是由多个源文件编译链接而成的,这些源文件的处理步骤通常用Makefile来管理.makefile带来的好处就是--"自动化编译&q ...

  3. PHP MySQL Order By 关键词 之 Order By

    ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. 语法 SELECT column_name(s) FROM table_name ORDER BY column_na ...

  4. H5实现图片优化上传

    一,HTML部分 <input type="file" accept="images/*"> <input class="url&q ...

  5. oninput,onpropertychange,onchange的使用方法和差别

    1.前言 因为工作须要,需实现一个相似于微博输入框的功能,在用户动态输入文字的时候,改动提示“您还能够输入XX字”.例如以下图所看到的: 因此,略微研究了一下oninput,onpropertycha ...

  6. 第四章 Linux环境

    程序参数 main函数声明: int main(int  argc, char  *argv[]) 其中argc是接受到的参数个数,argv是存储参数的字符串数组. 或者声明为: main() 这样也 ...

  7. C# 开机启动代码

     开机启动/关闭 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...

  8. struts2之chain的使用

    /** * 实现功能表单提交给action1先处理,再交由action2进行处理,中间传递参数a,b **/ /** * 1. 配置文件 **/ <action name="actio ...

  9. 不同css样式适应不同屏幕大小实现自适应宽度

    @media screen and (判断属性){ CSS样式选择器 } 例如: <div class="silder_photo"></div> < ...

  10. 切记ajax中要带上AntiForgeryToken防止CSRF攻击

    在程序项目中经常看到ajax post数据到服务器没有加上防伪标记,导致CSRF被攻击,下面小编通过本篇文章给大家介绍ajax中要带上AntiForgeryToken防止CSRF攻击,感兴趣的朋友一起 ...