aihot  2017-11-25 21:22:13  深度学习 |   查看评论   

  接下来的问题是发现流中的频繁项集,流和数据文件的区别在于,流元素只有到达后才可用,并且通常情况下到达速率很高以至于无法存储整个流来支持简单查询,另外,一个流会随着时间推移而不断变化,当前的频繁项也许过段时间就不再频繁。

  而且流不会结束,只要某个项集反复在流中出现,它最终都会超过支持度阈值。为了解决这个问题,我们将支持度阈值看成是项集出现的购物篮所占的比例。

  发现流的频繁项集需要对流进行抽样,我们可以先收集一定量的购物篮并将它存为一个文件,在该文件上执行频繁项集算法,然后这同时可以收集另外一个文件,当第一次迭代完成且收集到的新购物篮流数据数目足够时开始运行第二次迭代。

  定期从流中收集新的数据进行迭代,新的迭代进行,如果任一项集的购物篮出现的比例显著低于比例阈值,则该项集可以从所有的频繁项集集合中去掉,频繁项集集合包含没有被删除的项集和新文件中发现的频繁项集。

  我们希望应对这种流数据,也可以用衰减窗口,前面讲,我们可以选定一个很小的常数C,并给流窗口的倒数第i个元素赋予(1-C)^i或者e^-ci的权重值,来形成流中的一个衰减窗口。

  想应用衰减窗口需要对之前的算法做两项修改,第一项非常简单,就是把流元素由单个的项变成购物篮,给定的流元素可能会包含多个项。将这些项中的每一项都看成当前项,并按之前当前项的处理方式进行处理。

  第二项修改要复杂一些,我们想找到所有的频繁项集而不只是单元素项集。一种处理该问题的方法是,我们借助Apriori算法的思想定下一个规则,只有在项集I的所有直接真子集都已经评分后,才对项集I开始评分,对于那些真子集为空集的,直接开始评分。

  而且由于窗口不断衰减,我们将所有计数值乘以1-c并去掉那些计数值低于1/2的项集。

聚类

  按照聚类算法所使用的两种不同的基本策略,我们可以将聚类算法分为两类:

  • 一类称为层次式凝聚式算法。这类算法一开始将每个点都看成一个簇。簇与簇之间按照接近度来组合,接近度可以采取不同的定义,当进一步的组合到达停止条件时停止,比如当达到预先给定的簇数目时可以停止聚类。
  • 另一类算法设置点分配过程,即按照某个顺序一次考虑每个点,并将它分配到最合适的簇中。该过程通常都有一个短暂的初始簇估计阶段。一些算法允许簇合并或分裂,或允许离群点不分配到任何簇中。

  接下来要介绍一下维数灾难,维数灾难的一个表现是,在高维空间下,几乎所有的点对之间的距离都差不多相等;另一个表现是,集合任意的两个向量之间都是近似正交的。这会让我们的欧氏距离和余弦距离计算方式失效。

层次聚类

  层次聚类方法仅可用于规模相对较小的数据集,当层次聚类算法用于非欧空间时,如果不存在簇质心或者说簇中平均点(将簇内所有点算术平均)的时候,我们可以考虑采用簇中心点(离平均点最近的实际簇内点)来表示一个簇。

  对于欧式空间,我们可以将簇之间的距离定义为其质心之间的距离,并选择具有最短距离的两个簇进行合并。如果我们事先知道数据的最佳簇数目,那直接合并到剩余到这个数目时停止合并;或者在某次最佳合并时产生一个不恰当的簇的时候停止合并,比如合并之后发现这个簇内的所有点到其质心的平均距离过大。

  当然我们也可以聚到只剩一个簇,不过这样没什么意义。

  对于非欧空间,簇质心的定义不存在,我们可以考虑这样几种方式来找到簇中心点,比如该点到簇中其他所有点的距离之和最小,或者是平方和最小,或者是到簇中另外一点的最大值最小。

点分配聚类

  最有名的点分配聚类算法就是在《浅谈机器学习基础》中也讲过的k均值聚类算法。

点分配聚类

  当簇数目低于数据中真是的簇数目时,平均直径或其他分散度指标会快速上升。我们可以利用二分查找找到最合适的k数目。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自浅谈数据挖掘基础

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]