基于最大最小距离的分类数目上限K确定的聚类方法
聚类是数据挖掘很重要的组成部分.而大多数聚类算法都需要事先确定分类数目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仿真代码:
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<则聚类结束
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确定的聚类方法的更多相关文章
- HBase单个RegionServer的region数目上限
前言 RegionServer维护Master分配给它的region,处理对这些region的IO请求,负责切分在运行过程中变得过大的region, 由于集群性能( 分配的内存和磁盘是有限的 )有限的 ...
- tensorflow实现基于LSTM的文本分类方法
tensorflow实现基于LSTM的文本分类方法 作者:u010223750 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实 ...
- 一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)
雷锋网按:本文作者陆池,原文载于作者个人博客,雷锋网已获授权. 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用 ...
- Spark Mllib里如何对决策树二元分类和决策树多元分类的分类数目numClasses控制(图文详解)
不多说,直接上干货! 决策树二元分类的分类数目numClasses控制 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类Stumble ...
- Kmeans算法的K值和聚类中心的确定
0 K-means算法简介 K-means是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一. K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的 ...
- 基于百度EasyDL定制化图像识别平台的海洋鱼类识别方法
[目的]鱼类识别对渔业资源的开发利用有着重要的意义.针对海底环境恶劣.拍摄环境亮度低.场景模糊的实际情况导致海底观测视频品质差,视频中的鱼类识别难的问题以及现有鱼类识别方法存在的鱼类标注数据集过少导致 ...
- 10.HanLP实现k均值--文本聚类
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 10. 文本聚类 正所谓物以类聚,人以群分.人们在获取数据时需要整理,将相似的数据 ...
- Kaggle "Microsoft Malware Classification Challenge"——就是沙箱恶意文件识别,有 Opcode n-gram特征 ASM文件图像纹理特征 还有基于图聚类方法
使用图聚类方法:Malware Classification using Graph Clustering 见 https://github.com/rahulp0491/Malware-Classi ...
- Params:params 关键字可以指定在参数数目可变处采用参数的方法参数。
Params:params 关键字可以指定在参数数目可变处采用参数的方法参数. 注意点: 1.一个方法中只能使用一个params来声明不定长参数数组: 2.params参数数组只能放在已定义参数后面 ...
随机推荐
- < IOS > 论苹果数据持久化。
最近做的音乐播放器,用了太多的数据存储.在各种APP中无可避免的要用到数据存储.在IOS中,给了很多办法进行数据持久化.但是万宗不离其变,都是要存储到本地中,IOS提供了沙盒机制,沙盒有多大呢???这 ...
- JS闭包的概念
原文地址:http://zhidao.baidu.com/link?url=f81iaijX6nzY99Wz43v-p_qZEn4cCaomT4LD6NH5jVtI0yK2V76VJWefih51vA ...
- oracle获取某一字段字符串长度
用length方法 select t.* from tp_area t where substr(t.area_id,0,2)='03' and length(t.area_id)>2
- ORACLE数据库、表空间、表的容量相关查询--1
未完待续……未完待续……未完待续……未完待续…… 1.查询某个表所占空间大小 col tablespace_name for a15 col segment_name for a15 col segm ...
- Android_Fragment_Fragment具体解释
Android_Fragment_Fragment具体解释 分类: Android基础2013-10-03 08:23 92人阅读 评论(0) 收藏 举报 AndroidFragmentFragmen ...
- Java获取客户端真实IP地址的两种方法
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- 理解java中【同步】和【死锁】
一.理解同步 要想解决资源共享的同步操作问题,可以使用两种方法: 使用同步代码块 之前学习过程中,代码块分为四种: l 普通代码块:是直接定义在方法之中的: l 构造块 ...
- AliCTF 2016
上上周参加了阿里的CTF,靠着最后绝杀队伍有幸拿到了国内第一名,也顺利进入了XCTF Final.把自己做的几个题简单写了下,发出来也算个总结吧. PWN-FB 经典的null byte overfl ...
- 简单随笔——如何在gridview的页脚显示信息。。。。
我是超级大菜鸟...哈哈 先上图看看是不是你需要的 第一步,右击gridview,在事件中,单击RowdataBond事件. 在这之前一定要记得在gridview属性中的ShowFooter设置为“t ...
- hibernate报错:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
解决方法:自定义一个Hibernate Dialect. package com.yourcompany.util ; import java.sql.Types; import org.hibern ...