基于模型的聚集方法



1, 统计的方法:

概念聚类是在机器学习中聚类的一种形式,与其他通常的聚类方法(定义相似的记录为一个类)不同的是,概念聚类则更进一步来找出每一个类的特征描述。这样,概念聚类就有两步组成,首先,进行聚类,然后找出特征。这样聚类的质量就不仅仅是单个记录的一个函数,它还综合了一些得出的类的描述。

大多数的概念聚类采用了一个统计的方法——在决定一个类的时候,用可能性的描述语句。COBWEB是一个通用且简单的概念聚类的方法,它用分类树的形式来表现层次聚类。

一个分类树与决策树是不同的,分类树的每一个节点表示了一个概念,和对于这个概念(这个概念总概了这个节点下的记录)的可能性的描述。这个可能性的描述包括形成这个类的可能,以及在某个条件下类中记录的可能性,它可以表示为P(Ai=Vij|Ck),这儿的Ai=Vij是个“属性—值”对,Ck就是类。这与决策树不同,它是用逻辑而非可能性描述。为了将一个记录进行分类,就需要一个匹配函数来将阿嚏分到做适合的类中去。

COBWEB用了一种启发式的 评估衡量标准(category utility)来引导树的建立。

CU的定义:

这儿的n是节点的个数,也就是类的个数。从另外一种意义上来说,CU的 P(Ai=Vij|)表示了在条件Ck和没有条件Ck之下的偏差。

下面我们来看看COBWEB的工作过程:它以增入的方式将记录加入到分类树中去,就象Leader算法一样,它对于一个新的记录计算它与以分好的类的匹配度,选择最好的节点将这个新的记录放进去。这个方法先将新记录暂时放到每一个已经形成的类中,然后计算放入后的每次放入后的CU值,值最大的就是我们要找的最匹配的类。

那么,假如这个新记录不属于任何一个以形成的类时怎么办?实际上,COBWEB也计算将这个新的记录作为一个新的节点时CU的值,如果这个值比上述过程所得到的都要大的话,就建立一个新类。值得注意的是,COBWEB能够自己调整类的数目的大小,而不向其他算法那样自己设定类的个数。

但上述的操作对于的记录的顺序很敏感,COBWEB利用两个操作来将这种敏感性降到最低,这就是merging和splitting的方法,当对一个新的记录进行分类的时候,两个最好的类就可能被合并,当然这些决定必须根据CU值来。

COBWEB的缺点:这个方法假定根据统计得到的对于单个属性的概率分布函数与其他的属性之间是独立的,实际上在两个属性之间通常会存在一些联系。

2, 神经网络的方法

神经网络用于聚类的方法是将每一个类看作一个标本,它是这个类的“典型”,但不需和某个具体的记录或例子相对应。根据新记录和这个标本之间的距离,就可以将这个记录进行分类了。

在这篇中,我们介绍2个神经网络用做聚类的方法,分别是“competitive learning”和“self-organizing feature maps”。

异常情况分析


很多时候,会有一些记录与通常的行为不一样,对于那些跟数据库中其他的记录不相符合的记录,我们称之为outliers。

Outliers可能在聚类运行或者检测的时候被发现,比如一个人的年龄是999,这个在对数据库进行检测的时候就会被发现。还有,就是outliers可能是本身就固有的,而不是一个错误,比如部门经理的工资就比一般员工的工资高出很多。

很多数据挖掘技术都力图将outliers的影响降到最小,直至完全没有。但是,这有可能失去一些重要的隐藏的信息,因为对于一方来讲是“坏”的东西而对于另外的一方来讲很可能是重要的东西。换句话说,这个“异常”可能有特别的作用,例如发现诈骗行为。因此,发现和分析“诈骗行为”是一相很有意义的数据挖掘任务,我称为“outlier mining”。

outlier mining的应用是很广泛的,除了上面说的“欺骗发现”以外,它还能够发现收入特别低或者特别高的顾客的购买行为。outlier mining可以这么来描述:给定n个个记录,和k(我们期望得到的outlier的个数);发现k个与其他的记录最不相象的记录。这个过程可以看成2个子过程:1,首先定义什么样的记录被称为“异常”;2,根据上面的定义,找到一个很有效的方法来发现这些异常。

三种方法来发现outlier:

1,基于统计的方法:

统计的方法先假定在训练集中有一个分布模式存在,并且用一个“discordancy test”的方法来定义和发现outliers。这个方法的应用首先要设定一些参数——假定的分布模式,分布的参数,期望得到的outlier的的个数等等。

工作过程:首先检测2个假说,一个 working hypothesis和 alternative hypothesis。working hypothesis,H,是说所有的记录的数据都应该遵从一个分布模式,F,然后用一个“discordancy test”来检测记录Oi是否与F的关系很大。这儿的“discordancy test”是根据对于数据的了解以及F的选择得出的。这儿,通过T计算出Oi对应的值vi,如果SP(vi)=prob(T>vi)的值很小的话,我们就可以考虑Oi是个outlier。

2,基于距离的方法:

如果一个记录的距离大于d的邻居的个数大于一个设定值p的话,就可以认为这个记录是个outlier。换句话说,就是这个记录没有足够的邻居数目,这儿的邻居是根据距离来确定的。

Index-based algorithm:给定一个数据集,这个算法检查每一个记录o的d半径的邻居个数,定义M为一个outlier的最大d-邻居个数,那么一旦一个记录o有M+1个d-邻居,显然这个记录不是个outlier。

Nest-loop algorithm:与上一个方法相比,它优点在于减少输入、出个数,提高储存效率。

Cell-based algorithm:这种方法是将数据集分成c个cells,每一个cell有两层,第一层有1个cell的厚度,第二层有2*sqrt(k)个cell的厚度。这个算法是一个cell一个cell地来找outlier。对于一个cell,我们计算三个量:在这个cell内的记录个数,在第一层的记录个数,在第二层的记录的个数,分别用cell_count,cell_+_1_layer-count, cell_+_2_layer-count。

那么这个方法是怎样来计算outlier的呢?首先计算cell_+_1_layer-count,如果它的值大于M,那么这个cell内的所有的记录都不是outlier,如果它的值小于后者等于M, 那么接着计算cell_+_2_layer-count,如果它的值小于后者等于M,那么cell中所有的记录都可以认为是outlier。否则我们按照d-邻居的方法来一个一个地检查这层中的记录。

3, 基于背离度的方法

这种方法是根据一个数据集中的主要特征来判定outlier的,那些与这个主要特征背离很大的记录就被认为是一个outlier。

Sequential exception technique:给定一个有n个记录的数据集S,首先建立它的一个记录子集序列,{S1,S2,S3,…Sm},这儿的Sj包含Sj-1。

在这个序列中我们可以计算子集间的不相象性,下面介绍几个关键的概念。

Eeception set:它定义为outlier的集合。

Dissimilarity functuion:这个函数计算在一个集合中记录的不相象性,如果各个记录之间越象,那么这个值就越小,而记录之间背离读越大,则这个值就越大。

Cardinality function:它计算在给定的一个集合中记录的个数。

Smoothing factor:这个函数计算了从原集合S中去除一个子集后Dissimilarity的减少值,那个减少的值最多的子集就是outlier。

 

聚类的方法小节:

这篇文章很全面的介绍了聚类:包括聚类的定义,聚类的应用,聚类的几种常用的算法,,最后还介绍了异常的检测。

聚类的算法包括分割的聚类方法,层次聚类,基于密度的方法,和基于模型的方法


最近邻居和聚集(Nearest Neighbor and Clustering)

距离近:在一些重要的属性上比较相似

聚集(clustering):是把相似的记录放在一起。

用途:

聚集让用户在较高的层次上观察数据库。常被用来做商业上的顾客分片(segmentation)。找到不能与其他记录集合在一起的记录,做例外分析。

最近邻居预测,距离相近的对象通常他们的预测值也相似,因此只要知道一个对象的预测值,就可以用他来预测他的邻居的值。

分数卡基本思想:

一般来说一个数据库没有一种最好的分类方法。聚集要在类中对象的相似程度和类的数目之间找到一个最佳的结合点。

N维空间和距离:


变量(字段)的个数作为空间的维数。

基本的距离定义有两种:Manhatan距离 ∑∣a-b∣、欧氏距离(∑(a–b)2)1/2

决定变量权重的方法:

按照实际问题中各个变量对预测值的影响程度用进化的办法,修改各个变量的权重,看是否能提高预测的准确率。

在文本挖掘中:1 用单词出现频率的倒数;2 按照各个单词对要检索内容的相关程度

怎样计算两个类的距离:

单连通方法(single-link method):取两个类中最近记录的距离为类的距离。此种方法可以生成细长的蛇形类,不适于应用在典型的一堆堆记录集合在一起的情况。

完全连通方法(complete-link method):取两个类中最远记录的距离为类的距离。同第1中方法相反,此种方法易生成很小的记录都聚集在一起的类。

平均连通方法(group-average link):计算两个类中所有记录对的距离平均值。效果介于1、2种算法之间。

Ward方法(Ward’s method):计算两个类中所有记录的距离的和。易于用在生成类层次的情况,对例外的数据(outliers)很敏感,很难应用于生成蛇形类。

聚集的分类和算法流程

分层的聚集(hierarchy):生成一个从小到大的聚集层次树。用户可以自由剪切这棵树,得到对数据的不同划分方法

合并(Agglomerative):从下到上,最初每个记录都是一类,逐步合并,直到合并成一个大类。令数据库中的每一条记录都是一个类把距离最近的类合并重复2直到只含唯一的一个类为止。


分割(Divisive):从上到下,一开始所有记录属于一个大类,逐步分割每一个类,直到不能分割为止。因选择分割哪一个类需要很大的计算量,此种方法很少使用。令数据库中的所有记录都属于一个类在所有的类中找到一个类中数据相似性最小的一个类,把他一分为二。重复2直到每个类中记录的个数都是1或达到一个预先设定的阈值,或类的个数已达到预先设定的最大个数。

不分层聚集:速度更快,但需要用户在使用前设定一些参数,如类的个数、同一类中记录的最大距离。有时要反复修改参数才能得到一种满意的分类方法。

一次通过法(single-pass methods):只扫描数据库一次,就可完成分类。从数据库中读取一条记录,判断他距哪个类的距离最近。如果即使到最近的类的距离比我们设定的距离相比还远,那么建立一个新的类,把此记录放到此类中去。如果数据库中还有记录转1。问题:数据库中记录的输入顺序和类内最大距离的设定,对分类的结果影响很大。

再分配法(reallocation methods):

要把一条记录从一个类拿出来重新分到另一个类。预先设定想要把数据分成类的个数,为每个类随机选取一条数据,作为类的中心或“种子”。
一次读取数据库中的每一条记录,将其归到距离最近的类。重新计算各个类的中心,重复3-4,直到类的中心不再变化或变化很小。问题:用户设定的类的个数很难与实际数据中存在的类的个数正好相符最近邻居用于预测。

方法:

找到数据库中距离最近记录,将此记录的值作为新记录的预测值。

找到最近的K个记录,用这K个记录按其到新记录的距离作为权重,综合得到新记录的预测值。

缺点:

模型太大,预测时要使用整个历史数据库,没有正规的用于防止overfitting的方法(formal way)。

模型的改进:删除用于预言的历史数据库中多余的数据,以得到数据量小而且准确度高的数据。合并相似的记录,用一条记录(称为原型)代替相似的几条记录。要在不降低预测准确率的前提下。只保留一组相似数据中的“边界”数据(称为“哨兵”),去掉“边界”内部的无用数据。

发展方向:

应用算法到新的领域改进输入变量权重的计算方法,和如何减小用于预测的历史数据的大小根据历史记录自动计算变量的权重。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值