扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类 算法实现起来应该很容易,就不帮你编写代码了。
专业成都网站建设公司,做排名好的好网站,排在同行前面,为您带来客户和效益!创新互联为您提供成都网站建设,五站合一网站设计制作,服务好的网站设计公司,成都网站制作、成都网站建设负责任的成都网站制作公司!
第一次迭代下,除了a4点,其他点都归为一类c1:(a1 a2 a3 a5);c2:(a4) 聚类中心:c1:(2,2);c2(5,4)(聚类中心的计算方式是平均类中所有点)
第二次迭代下,c1(a1 a2 a5);c2(a3 a4) 聚类中心c1:(4/3,5/3);c2(9/2 7/2)
第三次迭代下,c1(a1 a2 a5);c2(a3 a4) 聚类中心c1:(4/3,5/3);c2(9/2 7/2)结果已经稳定跳出循环
层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:
1、凝聚的层次聚类: AGNES算法 (AGglomerative NESting)==采用自底向上的策略。最初将每个对象作为一个簇,然后这些簇根据某些准则被一步一步合并,两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确定;聚类的合并过程反复进行直到所有的对象满足簇数目。
2、分裂的层次聚类: DIANA算法 (DIvisive ANALysis)==采用自顶向下的策略。首先将所有对象置于一个簇中,然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式距离),直到达到某个终结条件(簇数目或者簇距离达到阈值);
1、简单,理解容易。
2、合并点/分裂点选择不太容易。
3、合并/分类的操作不能进行撤销。
4、大数据集不太适合。
5、执行效率较低O(t*n2),t为迭代次数,n为样本点数。
两个聚簇中最近的两个样本之间的距离(single/word-linkage聚类法)。
最终得到模型容易形成链式结构。
两个聚簇中最远的两个样本的距离(complete-linkage聚类法)。
如果存在异常值,那么构建可能不太稳定。
两个聚簇中样本间两两距离的平均值(average-linkage聚类法)。
两个聚簇中样本间两两距离的中值(median-linkage聚类法)。
CF-Tree (Cluster Feature Tree):每个节点是由三个聚类特征组成。这三个聚类特征构成一个三元组,用(N, LS, SS)来表示。
其中:
N 表示这个CF中包含的样本数量;
LS 表示这个CF中包含的样本点的向量和;
SS 表示这个CF中包含的样本点各个特征的平方和。
CF-Tree中父节点的某个CF值等于其指向的所有子节点CF值的总和。
CF-Tree 的几个关键超参数:
B: 每个内部节点最大的CF个数。
L: 每个叶节点最大的CF个数。
T: 新样本若被分到某一CF中,其到该CF中心的距离最大值。
CF-Tree构建步骤:
1、初始状态,CF树是空的,无任何样本。读入第一个样本x(a,b),生成一个CF三元组,此处N=1,LS=(a,b),SS=a2+b2,我们令其为CF1。
2、读入第二个样本,若到CF1的距离小于T,那么这个样本也归入CF1,更新三元组数据;如果大于T,则新划分出一个CF,这个样本作为CF2当中的首个样本,生成一个CF三元组。
注意:此时都是在节点内进行CF的建立,而非产生新的节点。
3、分裂:如果新数据进入该节点后,距离所有CF中心的距离都大于T,且Cf个数在生成新CF后大于B,则该节点需要进行划分。
4、找到该分支内各个CF之间的距离最大的两个CF,分别作为两个新叶子结点的CF,再计算剩余CF到这两个CF之间的距离,距离近的分到一个节点当中。
5、如果节点分裂过后叶子节点个数超过L,则该节点要进行分裂,分裂方式和上一步相同。
6、生成CF和分裂过程直至所有样本均进入CF树后停止。
BIRCH算法 (平衡迭代削减聚类法):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的 聚类特征树(CF-Tree) 来求聚类,聚类特征树其实是一个具有两个参数 分枝因子(B、L) 和 类直径(T) 的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。对应生成的结果就是一个 簇(聚类特征 - CF) ;BIRCH算法的过程就是建立CF-Tree的过程。
优缺点:
1、适合大规模数据集,线性效率;
层次聚类算法 的复杂度为 OT(n2) ;
优化后的 BIRCH算法 构建聚类特征树(CF-Tree)的时间复杂度为 O(n) ;
2、只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间的相关参数;
CURE算法 (使用代表点的聚类法):是一种 凝聚算法(AGNES) 。该算法先把每个数据点看成一类,然后合并距离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是: 取消了使用所有点或用中心点+距离来表示一个类 ,而是 从每个类中抽取固定数量、分布较好的点作为此类的代表点 ,并将这些 代表点(一般10个) 乘以一个适当的 收缩因子(一般设置0.2~0.7之间) ,使它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的场景,而且收缩因子的使用可以减少噪音对聚类的影响。
代表点 不是原来的点,而是那些需要重新计算的点。
K-MEANS算法:
k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
具体如下:
输入:k, data[n];
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 对于data[0]….data[n], 分别与c[0]…c[n-1]比较,假定与c[i]差值最少,就标记为i;
(3) 对于所有标记为i点,重新计算c[i]=/标记为i的个数;
(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。
算法实现起来应该很容易,就不帮你编写代码了。
近需要用到层次聚类,发现在Matlab上很容易实现,下面是代码加详细注释
[plain] view plain copy
clear all
clc
close all
mdist=input('输入坐标文件名字\n');
disp('读取数据坐标')
%获取坐标
这得分词+vsm+k-means啊。k-means算法网上应该不少,但是对文档的话,还得进行分词,构建矢量空间模型才能进行聚类啊。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流