【篇一:聚类算法总结】
聚类算法总结
一、概述 聚类,就是把整个数据集分成不同的簇,并且要使簇与簇之间的区 别尽可能的大,而簇内的数据的差异尽可能的小。簇是数据样本的 集合,聚类分析使得每簇内部的样本之间的相关性比其他簇中样本 之间的相关性更紧密,即簇内的任意两个样本之间具有较高的相似 度,而属于不同簇的两个样本间具有较高的相异度。相异度可以根 据描述样本的属性值来计算,样本间的 “距离 ”是最常采用的度量标 准。
聚类分析( cluster analysis )又称群分析,是根据 “物以类聚 ”的道 理,对样品或指标进行分类的一种多元统计分析方法 ,同时也是数据 挖掘的一个重要算法。通过聚类分析,可以在没有任何模式可供参 考或依循,即在没有先验知识的情况下,将大量数据样本按各自的 特性来进行合理的分类。
在开始聚类之前,用户并不知道要把数据集分成几个簇,也不知道 划分的具体标准,在聚类分析时数据集的特征是未知的,聚类算法 的任务正是要发现这些特征,并把具有相同特征的数据样本聚在一 起。聚类与分类有相似之处,都是将数据进行分组,但两者又有本 质的区别。分类中组(类别)是 事先已经定义好的,但聚类中的组 (在聚类分析中称为 “簇 ”)不是预先定义的,而是根据实际数据的 特征按照数据之间的相似性来定义的。
二、聚类算法的性能评价指标 数据挖掘对聚类的典型要求如下: (1)可伸缩性:当聚类对象由几百上升到几百万,我们希望最后的 聚类结果的准确度能一致。 ( 2)处理不同类型属性的能力:有些 聚类算法,其处理对象的属性的数据类型只能为数值类型,但是实 际应用场景中,我们往往会遇到其他类型的数据,比如二元数据, 分类数据等等。当然,在处理过程我们是可以将这些其他类型的数 据预处理成数值型数据的,但是在聚类效率上或者聚类准确度上往 往会有折损。
(3)发现任意形状的类簇:因为许多聚类算法是用距离( eg: 欧几 里得距离或者曼哈顿距离)来量化对象之间的相似度的,基于这种
方式,我们往往只能发现相似尺寸和密度的球状类簇或者成为凸形 类簇。但是,类簇的形状可能是任意的。
(4)对聚类算法初始化参数的知识需求的最小化:很多算法在分析 过程中需要用户提供一定的初始参数,比如期望的类簇个数,类簇 初始质点的设定。聚类结果对这些参数是十分敏感的。这不仅加重 了用户的负担,也非常影响聚
类结果的准确性。
三、聚类算法分类 聚类分析的研究已经有很多年的历史,研究成果主要集中在基于距 离和基于相似度的方法上,也产生了大量的聚类算法,大体上,主 要的聚类算法可以划分为如下几类 :基于划分聚类算法;基于 层次聚类算法;基于密度聚类算法;基于网格的聚类算法;基于神 经网络的聚类算法;基于统计学的聚类算法以及模糊聚类算法。 1. 基于划分聚类算法( partition clustering) 2. 基于层次聚类算法 3. 基于密度聚类算法 4. 基于网格的聚类算法 5. 基于神经网络的聚类算法 6. 基于统计学的聚类算法 7. 模糊聚类 ——fcm 聚类算法
这个和之前的 6 种聚类算法相比较比较特殊。 1965 年美国加州大学 柏克莱分校的扎德教授第一次提出了 ‘集合 '的概念。经过十多年的发 展,模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即 彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。用模 糊数学的方法进行聚类分析,就是模糊聚类分析。 fcm 算法是一种 以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法 是传统硬聚类算法的一种改进。 算法流程如下: (1) 标准化数据矩阵;
(2) 建立模糊相似矩阵,初始化隶属矩阵; (3) 算法开始迭代,直到 目标函数收敛到极小值;
(4) 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后 的聚类结果。
四、综合性能评价 几种常用的聚类算法从可伸缩性、适合的数据类型、高维性(处理 高维数据的能力)、异常数据的抗干扰度、聚类形状和算法效率 6 个方面进行了综合性能评价,评价结果如下所示:
五、目前聚类算法研究的主要内容 对聚类进行研究是数据挖掘中的一个热门方向,由于以上所介绍的 聚类方法都存在着某些缺点,因此近些年对于聚类分析的研究很多 都专注于改进现有的聚类方法或者是提出一种新的聚类方法。以下 将对传统聚类方法中存在的问题以及人们在这些问题上所做的努力 做一个简单的总结:
1 从以上对传统的聚类分析方法所做的总结来看,不管是 k-means 方法,还是 cure 方法,在进行聚类之前都需要用户事先确定要得到 的聚类的数目。然而在现实数据中,聚类的数目是未知的,通常要 经过不断的实验来获得合适
的聚类数目,得到较好的聚类结果。
2 传统的聚类方法一般都是适合于某种情况的聚类,没有一种方法 能够满足各种情况下的聚类,比如 birch 方法对于球状簇有很好的聚 类性能,但是对于不规则的聚类,则不能很好的工作; k-medoids 方法不太受孤立点的影响,但是其计算代价又很大。因此如何解决 这个问题成为当前的一个研究热点,有学者提出将不同的聚类思想 进行融合以形成新的聚类算法,从而综合利用不同聚类算法的优点, 在一次聚类过程中综合利用多种聚类方法,能够有效的缓解这个问 题。
3 随着信息时代的到来,对大量的数据进行分析处理是一个很庞大 的工作,这就关系到一个计算效率的问题。有文献提出了一种基于 最小生成树的聚类算法,该算法通过逐渐丢弃最长的边来实现聚类 结果,当某条边的长度超过了某个阈值,那么更长边就不需要计算 而直接丢弃,这样就极大地提高了计算效率,降低了计算成本。
5 目前的许多算法都只是理论上的,经常处于某种假设之下,比如 聚类能很好的被分离,没有突出的 孤立点等,但是现实数据通常是很复杂的,噪声很大,因此如何有 效的消除噪声的影响,提高处理现实数据的能力还有待进一步的提 高。
【篇二:聚类算法分析报告】
学院班级: 学生学号:
学生姓名: 杨阳 同 作 者:
实验日期: 2010 年 12 月 聚类算法分析研究
1 实验环境以及所用到的主要软件
windows vista netbeans6.5.1 weka3.6 matlab r2009a 2 实验内 容描述 聚类是对数据对象进行划分的一种过程,与分类不同的是,它所划 分的类是未知的,故此,这是一个 “无指导的学习”过程,它倾向于 数据的自然划分。其中聚类算法常见的有基于层次方法、基于划分 方法、基于密度以及网格等方法。本文中对近年来聚类算法的研究 现状与新进展进行归纳总结。一方面对近年来提出的较有代表性的 聚类算法,从算法思想。关键技术和优缺点等方面进行分析概括; 另一方面选择一些典型的聚类算法和一些知名的数据集,主要从正 确率和运行效率两个方面进行模拟实验,并分别就同一种聚类算法、 不同的数据集以及同一个数据集、不同的聚类算法的聚类情况进行 对比分析。最后通过综合上述两方面信息给出聚类分析的研究热点、 难点、不足
和有待解决的一些问题等。 实验中主要选择了 k 均值聚 类算法、 fcm 模糊聚类算法并以网站下载的 iris 和 wine 数据集为基 础通过 matlab 实现对上述算法的实验测试。然后以 wine 数据集在 学习了解 weka 软件接口方面的基础后作聚类分析,使用最常见的 k 均值(即 k-means )聚类算法和 fcm 模糊聚类算法。下面简单描述 一下 k 均值聚类的步骤。
k 均值算法首先随机的指定 k 个类中心。然后: (1)将每个实例分配到距它最近的类中心,得到 k 个类;
(2)计分别计算各类中所有实例的均值,把它们作为各类新的类中 心。重复( 1)和( 2),直到 k 个类中心的位置都固定,类的分配 也固定。在实验过程中通过利用 weka 软件中提供的 simplekmeans (也就是 k 均值聚类算法对 wine 数据集进行聚类分 析,更深刻的理解 k 均值算法,并通过对实验结果进行观察分析, 找出实验中所存在的问题。然后再在学习了解 weka 软件接口方面的 基础上对 weka 软件进行一定的扩展以加入新的聚类算法来实现基于 weka 平台的聚类分析。 3 实验过程
3.1 k 均值聚类算法 3.1.1 k 均值聚类算法理论
k 均值算法是一种硬划分方法,简单流行但其也存在一些问题诸如 其划分结果并不一定完全可信。 k 均值算法的划分理论基础是 min??k?axk?vi i?1ic2 ( 1)
其中 c 是划分的聚类数, ai 是已经属于第 i 类的数据集 vi 是相应的 点到第 i 类的平均距离,即 vi??nik?1xkni,xk?ai ( 2) 其中 ni 表示在数据集 ai 中的对象数。 3.1.2 算法的基本过程
step1: 任意选择 k 个对象作为初始的类的中心; step2:repeat ;
step3: 根据类中的平均值 ,将每个数据点 (重新 ) 赋给最相近的类; step4: 更新
类的平均值;
step5:until 不再发生变化 , 即没有对象进行被重新分配时过程结束。 3.1.3 算法代码分析
k 均值聚类算法的代码分析过程如下 首先调用 clust_normalize ()函数将数据集标准化具体过程如下 data=clust_normalize(data,range); 下面是对 k 均值算法的初始化 if max(size(param.c))==1, c = param.c;
index=randperm(n);
v=x(index(1:c),:);v = v + 1e-10; v0=x(index(1:c)+1,:);v0 = v0 - 1e-10; else
v = param.c;
c = size(param.c,1);
index=randperm(n); v0=x(index(1:c)+1,:);v0 = v0 + 1e-10; end
iter = 0; 接着是迭代求解直到满足要求的解或者达到最大的迭代值 while prod(max(abs(v - v0))), iter = iter +1; v0 = v; for i = 1:c
这里是用来计算欧氏距离
dist(:,i) = sum([(x - repmat(v(i,:), n,1)).八2],2); end
下面将分类结果赋值
[m,label] = min(dist); distout=sqrt(dist); 下面计算分类中心 for i = 1:c index=find(label == i); if ~isempty(index) v(i,:) = mean(x(index,:)); else ind=round(rand*n-1); v(i,:)=x(ind,:); end f0(index,i)=1; end j(iter) =
sum(sum(f0.*dist)); if param.vis clf hold on plot(v(:,1),v(:,2),ro) colors={r. gx b+ ys md cv k. r* g* b* y* m* c* k* }; for i=1:c index = find(label == i);
if ~isempty(index) dat=x(index,:); plot(dat(:,1),dat(:,2),colors{i}) end end hold off pause(0.1) end end 保存求解结果 result.cluster.v = v; result.data.d = distout; 计算划分矩阵 f0=zeros(n,c); for i=1:c index=find(label == i); f0(index,i)=1; end result.data.f=f0; result.iter = iter; result.cost = j;
3.1.4 实验配置 实验过程配置比较简单只需按照如下介绍即可。 将路径修改为 matlab 工具箱的相应路径在次是 “ e: fuzzclust ”如下
path(path,e:\\matlab\oolbox\\fuzzclust) 选择数据集在实验中选择了 iris 数据集,因此 iris=1 哪个数据集只需将相应的值置为 1 其他两个在下面选择 置为 0。 wine=0;
iris=1; wisc=0; if wine load winedat.txt data=winedat(:,1:end-1); c=winedat(:,end);
end if iris load iris data=iris(:,1:4); c=zeros(length(data),1); for i=1:3 c(find(iris(:,4+i)==1))=i;
end end if wisc wisc 数据预处理 wisc=wk1read(wisconsin.wk1); ni=9; nt=length(wisc);
data.x=[wisc(:,11) wisc(:,2:10)]; data.x=sortrows(data.x,1);
[i,j]=find(data.x(:,7)~=0); data.x=data.x(i,:); [i,j]=find(data.x(:,1)==2); data.x(i,1)=1; [i,j]=find(data.x(:,1)==4); data.x(i,1)=2; c=data.x(:,1); data=data.x(:,2:end); end
数据标准化 data.x=data; data=clust_normalize(data,range); 下面的参数在 fcm 模糊聚类时用到 param.m=2; 如下参数是设置分类数即 k=3 param.c=3; param.val=1;
【篇三:各种聚类算法介绍及对比】
一、层次聚类
1 、层次聚类的原理及分类
1 )层次法( hierarchical methods )先计算样本之间的距离。每次 将距离最近的点合并到同一个类。然后,再计算类与类之间的距离, 将距离最近的类合并为一个大类。不停的合并,直到合成了一个类。 其中类与类的距离的计算方法有:最短距离法,最长距离法,中间 距离法,类平均法等。比如最短距离法,将类与类的距离定义为类 与类之间样本的最短距离。 层次聚类算法根据层次分解的顺序分为: 自下底向上和自上向下,即凝聚的层次聚类算法和的层次聚类 算法( agglomerative 和 divisive ),也可以理解为自下而上法 ( bottom-up )和自上而下法( top-down )。自下而上法就是一开 始每个个体( object )都是一个类,然后根据 linkage 寻找同类,最 后形成一个 “类”。自上而下法就是反过来,一开始所有个体都属于 一个 “类”,然后根据 linkage 排除异己,最后每个个体都成为一个 “类”。这两种路方法没有孰优孰劣之分,只是在实际应用的时候要 根据数据特点以及你想要的 “类 ”的个数,来考虑是自上而下更快还 是自下而上更快。至于根据
linkage 判断 “类 ”的方法就是最短距离法、 最长距离法、中间距离法、类平均法等等(其中类平均法往往被认 为是最常用也最好用的方法,一方面因为其良好的单调性,另一方 面因为其空间扩张 / 浓缩的程度适中)。为弥补分解与合并的不足, 层次合并经常要与其它聚类方法相结合,如循环定位。 2) hierarchical methods 中比较新的算法有 birch (balanced iterative reducing and clustering using hierarchies 利用层次方
法的平衡迭代规约和聚类)主要是在数据量很大的时候使用,而且 数据类型是 numerical 。首先利用树的结构对对象集进行划分,然后
再利用其它聚类方法对这些聚类进行优化; rock ( a hierarchical
clustering algorithm for categorical attributes )主要用在 categorical 的数据类
型上; chameleon ( a hierarchical clustering algorithm using dynamic modeling )里用到的 linkage 是 knn ( k-nearest-neighbor )算法,并以此构建一个 graph , chameleon 的聚类效果被认为非常强大,比 birch 好用, 但运算复杂度很高,o(n八2)。
2 、层次聚类的流程 凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些 原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终 结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是 在簇间相似度的定义上有所不同。 这里给出采用最小距离的凝聚层 次聚类算法流程:
(1) 将每个对象看作一类,计算两两之间的最小距离; (2) 将距离最小的两个类合并成一个新类; (3) 重新计算新类与所有类之间的距离;
(4) 重复 (2 ) 、 (3) ,直到所有类最后合并成一类。 聚类的效果如下图,黑色是噪音点: 另外我们可以看出凝聚的层次聚类并没有类似基本 k 均值的全局目 标函数,没有局部极小问题或是很难选择初始点的问题。合并的操 作往往是最终的,一旦合并两个簇之后就不会撤销。当然其计算存 储的代价是昂贵的。
3 、层次聚类的优缺点
优点: 1,距离和规则的相似度容易定义,少; 2,不需要预先 制定聚类数; 3,可以发现类的层次关系; 4,可以聚类成其它形状 缺点: 1,计算复杂度太高; 2,奇异值也能产生很大影响; 3,算法 很可能聚类成链状 r 语言中使用 hclust(d, method = complete, members=null) :进 行层次聚类。 d 为距离矩阵; method 表示类的合并方法, single 最 短距离法, complete 最长距离法, median 中间距离法, mcquitty 相似法, average 类平均法, centroid 重心法, ward 离差平方和法; members 为 null 或 d 长度的矢量。
二、划分聚类法 k-means 基于划分的方法( partition-based methods ):其原理简单来说就 是,想象你有一堆散点需要聚类,想要的聚类效果就是 “类内的点都 足够近,类间的点都足够远 ”。首先你要确定这堆散点最后聚成几类, 然后挑选几个点作为初始中心点,再然后依据预先定好的启发式算 法( heuristic algorithms )给数据点做迭代重置( iterative relocation ),直到最后到达 “类内的点都足够近,类间的点都足够 远”的目标效果。
partition-based methods 聚类多适用于中等体量的数据集,但我 们也不知道 “中等”到底有多 “中”,所以不妨理解成,数据集越大, 越有可能陷入局部最小。
1、 kmeans 算法的原理 k-means 算法以 k 为参数,把 n 个对象分成 k 个
簇,使簇内具有较 高的相似度,而簇间的相似度较低。 k-means 算法的处理过程如下: 首先,随机地选择 k 个对象,每个对象初始地代表了一个簇的平均 值或中心,即选择 k 个初始质心 ; 对剩余的每个对象,根据其与各簇 中心的距离,将它赋给最近的簇 ;然后重新计算每个簇的平均值。这 个过程不断重复,直到准则函数收敛,直到质心不发生明显的变化。 通常,采用平方误差准则,误差的平方和 sse 作为 全局的目标函数,即最小化每个点到最近质心的欧几里得距离的平 方和。此时,簇的质心就是该簇内所有数据点的平均值。
选择 k 个点作为初始质心
repeat 将每个点指派到最近的质心,形成 k 个簇 重新计算每个簇的质心 until 簇不发生变化或达到最大迭代次数
时间复杂度: o(tkmn) ,其中, t 为迭代次数, k 为簇的数目, m 为 记录数, n 为维数 空间复杂度: o((m+k)n) ,其中, k 为簇的数目, m 为记录数, n 为维数
k-means 算法的详细过程 从上图中,我们可以看到, a, b, c, d, e 是五个在图中点。而灰色的 点是我们的种子点,也就是我们用来找点群的点。有两个种子点, 所以 k=2 。
然后, k-means 的算法如下:
① 随机在图中取k (这里k=2 )个种子点。
② 然后对图中的所有点求到这 k 个种子点的距离,假如点 pi 离种子 点 si 最近,那么 pi 属于 si 点群。(我们可以看到 a,b 属于上面的种
子点,c,d,e属于下面中部的种子点) ③接下来,我们要移动种子点 到属于他的 “点群”的中心。(见图上的第三步)
④然后重复第 2)和第 3)步,直到,种子点没有移动(我们可以看 到图中的第四步上面的种子点聚合了 a,b,c ,下面的种子点聚合了 d, e)。
聚类的效果如下图,折线是历次循环时 3 个簇的质心的更新轨迹, 黑点是初始质心:
我们查看基本 k 均值算法实现步骤及上面的聚类效果可以发现,该 聚类算法将所有数据点都进行了指派,不识别噪音点。另外选择适 当的初试质心是基本 k 均值过程的关键。 2、 k 均值的优缺点及分类
优点: 1,简单,易于理解和实现; 2,时间复杂度低 缺点: 1) kmeans 要手工输入类数目,对初始值的设置很敏感;所以有 了 k-means++ 、intelligent k-means 、 genetic k-means ; 2) k-means 对噪声和离群值非常敏感,所以有了 k-medoids 和 k- medians ;
3 ) k-means 只用于 numerical 类型数据,不适用于 categorical 类型数据,所以 k-modes ;
4 ) k-means 不能解决非凸( non-convex )数据,所以有了 kernel k-means 。
5) k-means 主要发现圆形或者球形簇,不能识别非球形的簇。 3、 k-means 与 dbscan 的区别
k-means 聚类算法的初始点选择不稳定,是随机选取的,这就引起 聚类结果的不稳定。 k-means 属于动态聚类,往往聚出来的类有点 圆形或者椭圆形。 kmeans 对于圆形区域聚类效果较好, dbscan 基 于密度,对于集中区域效果较好。对于不规则形状, kmeans 完全无 法用, dbscan 可以起到很好的效果。
4、 k-means 注意问题
1 ) k 如何确定
kmenas 算法首先选择 k 个初始质心,其中 k 是用户指定的参数, 即所期望的簇的个数。这样做的前提是我们已经知道数据集中包含 多少个簇,但很多情况下,我们并不知道数据的分布情况,实际上 聚类就是我们发现数据分布的一种手段。如何有效的确定 k 值,这 里大致提供几种方法:
①与层次聚类结合 [2] 经常会产生较好的聚类结果的一个有趣策略是,首先采用层次凝聚 算法决定结果粗的数目,并找到一个初始聚类,然后用迭代重定位 来改进该聚类。
②稳定性方法 [3] 稳定性方法对一个数据集进行 2 次重采样产生 2 个数据子集,再用 相同的聚类算法对 2个数据子集进行聚类,产生 2个具有 k 个聚类 的聚类结果,计算 2 个聚类结果的相似度的分布情况。 2个聚类结果 具有高的相似度说明 k 个聚类反映了稳定的聚类结构,其相似度可 以用来估计聚类个数。采用次方法试探多个 k ,找到合适的 k 值。 ③系统演化方法 [3] 系统演化方法将一个数据集视为伪热力学系统,当数据集被划分为 k 个聚类时称系统处于状态 k 。系统由初始状态 k=1 出发,经过 过程和合并过程,系统将演化到它的稳定平衡状态 ki ,所对应的聚
类结构决定了最优类数 ki 。系统演化方法能提供关于所有聚类之间 的相对边界距离或可分程度,适用于明显分离的聚类结构和轻微重 叠的聚类结构。 ④使用 canopy 算法进行初始划分 [4] 基于 canopy method 的聚类算法将聚类过程分为两个阶段 stage1 、聚类最耗费计算的地方是计算对象相似性的时候, canopy method 在第一阶段选择简单、计算代价较低的方法计算对象相似性, 将相似的对象放在一个子集中,这个子集被叫做 canopy ,通过一 系列计算得到若干 canopy , canopy 之间可以是重叠的,但不会存 在某个对象不属于任何 canopy 的情况,可以把这一阶段看做数据 预处理;
stage2 、在各个 canopy 内使用传统的聚类方法 ( 如 k-means) ,不 属于同一 canopy 的对象之间不进行相似性计算。 从这个方法起码可以看出两点好处:首先, canopy 不要太大且 canopy 之间重叠的不要太多的话会大大减少后续需要计算相似性的 对象的个数;其次,类似于 k-means 这样的聚类方法是需要人为指 出 k 的值的,通过 stage1 得到的 canopy 个数完全可以作为这个 k 值,一定程度上减少了选择 k 的盲目性。 其他方法如贝叶斯信息准则方法( bic )可参看文献 [5] 。
2 )初始质心的选取 选择适当的初始质心是基本 kmeans 算法的关键步骤。常见的方法 是随机的选取初始质心,但是这样簇的质量常常很差。处理选取初 始质心问题的一种常用技术是:多次运行,每次使用一组不同的随 机初始质心,然后选取具有最小 sse (误差的平方和)的簇集。这种 策略简单,但是效果可能不好,这取决于数据集和寻找的簇的个数。 第二种有效的方法是,取一个样本,并使用层次聚类技术对它聚类。 从层次聚类中提取 k 个簇,并用这些簇的质心作为初始质心。该方 法通常很有效,但仅对下列情况有效:
( 1 )样本相对较小,例如数百到数千(层次聚类开销较大);( 2) k 相对于样本大小较小第三种选择初始质心的方法,随机地选择第一 个点,或取所有点的质心作为第一个点。然后,对于每个后继初始 质心,选择离已经选取过的初始质心最远的点。使用这种方法,确 保了选择的初始质心不仅是随机的,而且是散开的。但是,这种方 法可能选中离群点。此外,求离当前初始质心集最远的点开销也非 常大。为了克服这个问题,通常该方法用于点样本。由于离群点很 少(多了就不是离群点了),它们多半不会在随机样本中出现。计 算量也大幅减少。
第四种方法就是上面提到的 canopy 算法。
3 )距离的度量 常用的距离度量方法包括:欧几里得距离和余弦相似度。两者都是 评定个体间差异的大小的。欧几里得距离度量会受指标不同单位刻 度的影响,所以一般需要先进行标准化,同时距离越大,个体间差 异越大;空间向量余弦夹角的相似度度量不会受指标刻度的影响, 余弦值落于区间 [-1,1] ,值越大,差异越小。但是针对具体应用,什 么情况下使用欧氏距离,什么情况下使用余弦相似度? 从几何意义上来说, n 维向量空间的一条线段作为底边和原点组成 的三角形,其顶角大小是不确定的。也就是说对于两条空间向量, 即使两点距离一定,他们的夹角余弦值也可以随意变化。感性的认 识,当两用户评分趋势一致时,但是评分值差距很大,余弦相似度 倾向给出更优解。举个极端的例子,两用户只对两件商品评分,向 量分别为
(3,3) 和(5,5) ,这两位用户的认知其实是一样的,但是欧式 距离给出的解显然没有余弦值合理。
4 )质心的计算 对于距离度量不管是采用欧式距离还是采用余弦相似度,簇的质心 都是其均值,即向量各维取平均即可。 5 )算法停止条件
一般是目标函数达到最优或者达到最大的迭代次数即可终止。对于 不同的距离度量,目标函数往往不同。当采用欧式距离时,目标函 数一般为最小化对象到其簇质心的距离的平方和。
当采用余弦相似度时,目标函数一般为最大化对象到其簇质心的余 弦相似度和。
6 )空聚类的处理
如果所有的点在指派步骤都未分配到某个簇,就会得到空簇。如果 这种情况发生,则需要某种策略来选择一个替补质心,否则的话, 平方误差将会偏大。一种方法是选择一个距离当前任何质心最远的 点。这将消除当前对总平方误差影响最大的点。另一种方法是从具
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务