聚类是数据挖掘很重要的组成部分.而大多数聚类算法都需要事先确定分类数目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
19         %逐个求出各个样本和聚类中心Z(1),Z(2)之间的距离选出每个点到聚类中心中的较小值
20         D=zeros(len,2);
21         M=zeros(1,len);
22         for i=1:len
23             D(i,1)=abs(ClomStatic(i)-Z(1));
24             D(i,2)=abs(ClomStatic(i)-Z(2));
25             M(i)=min(D(i,:));
26         end
27
28         %在M中找出最大值和20(20为聚类间隔,自定义设定),若大于,则产生新的聚类中心,否则无新的聚类中心,判断是否存在第三类
29         [m indexm]=max(M);
30             if(m>0.32*abs(Z(1)-Z(2)))
31                 k=k+1;      %如果k<3则聚类结束
32                 Z(k)=ClomStatic(indexm);
33             end
34
35         %若Z(3)存在
36         if(k==3)
37             %将样本按最近距离分到最近的聚类中心 k=3
38             TempDistance=zeros(len,k);
39             p1=1;
40             p2=1;
41             p3=1;
42             for i=1:len
43                 for j=1:k
44                     TempDistance(i,j)=abs(ClomStatic(i)-Z(j));
45                 end
46                 [Dis GroupIndex]=min(TempDistance(i,:));
47                 if(GroupIndex==1)%Group保存最终的分类结果
48                      Group1(p1)=ClomStatic(i);
49                      p1=p1+1;
50                  elseif(GroupIndex==2)
51                      Group2(p2)=ClomStatic(i);
52                       p2=p2+1;
53                  elseif(GroupIndex==3)
54                      Group3(p3)=ClomStatic(i);
55                      p3=p3+1;
56                 end
57             end
58             %求类中心
59             ClassCenter=zeros(1,3);
60             ClassCenter(1)=floor(sum(Group1)/length(Group1));
61             ClassCenter(2)=floor(sum(Group2)/length(Group2));
62             ClassCenter(3)=floor(sum(Group3)/length(Group3));
63        else
64          %将样本按最近距离分到最近的聚类中心 k=2
65         TempDistance=zeros(len,k);
66         p1=1;
67         p2=1;
68         for i=1:len
69             for j=1:k
70                 TempDistance(i,j)=abs(ClomStatic(i)-Z(j));
71             end
72             [Dis GroupIndex]=min(TempDistance(i,:));
73             if(GroupIndex==1)                       %Group保存最终的分类结果
74                  Group1(p1)=ClomStatic(i);
75                 p1=p1+1;
76              elseif(GroupIndex==2)
77                  Group2(p2)=ClomStatic(i);
78                 p2=p2+1;
79             end
80         end
81         %求类中心
82         ClassCenter=zeros(1,2);
83
84         ClassCenter(1)=floor(sum(Group1)/length(Group1));
85         ClassCenter(2)=floor(sum(Group2)/length(Group2));
86      end
87 else
88        %k=1;
89          j=1;
90         for i=1:len
91             Group1(j)=ClomStatic(i);
92             j=j+1;
93         end
94        %求类中心
95         ClassCenter=zeros(1,1);
96
97         ClassCenter(1)=floor(sum(Group1)/length(Group1));
98      end
99 end

仿真结果:

进行三类划分:

测试数据:

结果:

进行二类划分:

测试数据

结果:

进行一类划分:

测试数据:

结果:

转载于:https://www.cnblogs.com/vpoet/p/4659737.html

基于最大最小距离的分类数目上限K确定的聚类方法相关推荐

  1. **KMeans中自动K值的确认方法**

    KMeans中自动K值的确认方法 1 前言 聚类常用于数据探索或挖掘前期,在没有做先验经验的背景下做的探索性分析,也适用于样本量较大情况下的数据预处理等方面工作.例如针对企业整体用户特征,在未得到相关 ...

  2. KNN分类器、最近邻分类、KD树、KNN分类的最佳K值、基于半径的最近邻分类器、KNN多分类、KNN多标签分类、KNN多输出分类、KNN分类的优缺点

    KNN分类器.最近邻分类.KD树.KNN分类的最佳K值.基于半径的最近邻分类器.KNN多分类.KNN多标签分类.KNN多输出分类.KNN分类的优缺点 目录

  3. matlab的稀疏表示分类,基于稀疏表示的分类方法

    四天数模,做得不好,但收获不小.最后还通宵一宿,多日后得以重获新生,特做个小记,聊记心得. 本次选题为神经元的分类和聚类,前者给定种类,需要通过训练样本找寻分类特征,再用测试样本测试分类方法的正确性. ...

  4. 基于回归分析的广告投入销售额预测——K邻近,决策树,随机森林,线性回归,岭回归

    基于回归分析的广告投入销售额预测--K邻近,决策树,随机森林,线性回归,岭回归 文章目录 基于回归分析的广告投入销售额预测--K邻近,决策树,随机森林,线性回归,岭回归 1. 项目背景 2. 项目简介 ...

  5. 基于机器学习的文本分类!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李露,西北工业大学,Datawhale优秀学习者 据不完全统计,网 ...

  6. 二分类问题:基于BERT的文本分类实践!附完整代码

    Datawhale 作者:高宝丽,Datawhale优秀学习者 寄语:Bert天生适合做分类任务.文本分类有fasttext.textcnn等多种方法,但在Bert面前,就是小巫见大巫了. 推荐评论展 ...

  7. 【NLP】基于机器学习的文本分类!

    作者:李露,西北工业大学,Datawhale优秀学习者 据不完全统计,网民们平均每人每周收到的垃圾邮件高达10封左右.垃圾邮件浪费网络资源的同时,还消耗了我们大量的时间.大家对此深恶痛绝,于是识别垃圾 ...

  8. 基于决策树的多分类_R中基于决策树的糖尿病分类—一个零博客

    基于决策树的多分类 Article Outline 文章大纲 What is a decision tree?什么是决策树? Why use them?为什么要使用它们? Data Backgroun ...

  9. 基于神经网络的文本分类(基于Pytorch实现)

    <Convolutional Neural Networks for Sentence Classification> 作者:Yoon Kim 单位:New York University ...

最新文章

  1. 基础知识--Boxing unBoxing
  2. 苹果6s解除耳机模式_出大问题!苹果或将砍掉3D Touch?
  3. 开发函数计算的正确姿势——使用 brotli 压缩大文件
  4. @RequestParam与@PathVariable的区别
  5. 中文表示什么_越南水果摊贴出中文标语,看清文字内容后,中国游客:不再吃了...
  6. 部署 SAP UI5 应用到 SAP BTP 时遇到的 error retrieving MTA 错误消息
  7. excel单元格斜线_怎么在excel中画斜线?怎么在excel表格中画斜线?
  8. Mybatis源码之数据源模块分析
  9. 声网:疫情期间日均通话分钟数较日常增长近一倍 达15.6亿分钟
  10. jquery删除空图片错误图片,$('img[src=]').remove();
  11. 提升写作效率,让 Word 更好地为你所用
  12. 求一个序列中,第k个数
  13. 快手内容运营-数据分析面试
  14. android 集成x5内核时 本地没有,腾讯X5内核集成一些建议和爬坑记录
  15. 模糊PID控制器设计
  16. html手写笔记照片,Myscript Nebo – 好用到哭的手写笔记软件!你只管写画,它帮你识别转换成文字 | 火星博客...
  17. K线形态识别—K线反转形态之底部反转形态
  18. css中img间有空隙
  19. jvm:jvm GC日志解析:G1日志解析
  20. 新媒体运营,微博平台运用技巧分享

热门文章

  1. modification of global variable “Promise.prototype.finally“ is not allowed when using plugins at app
  2. 武汉理工大学转入计算机学院,武汉理工大学计算机学院.doc
  3. 微信小程序格创校园跑腿小程序v1.1.64+前端
  4. 微信广告任务平台源码运营版
  5. c# winform如何异步不卡界面
  6. win7 无法修改 host 文件解决方案
  7. Swift中文教程(八) 枚举类型
  8. iPhone 播放音频声音文件
  9. Linux: Shell编程基础
  10. jQuery多选插件