Tag: dm

找有相似游戏爱好的用户

上一篇讲了聚类算法中常用的一个k均值算法,接下来举一个用到实际中的例子。

我们的数据中有一项是希望用户选择几个自己喜欢的游戏,然后我们根据他的喜好,推荐跟他类似喜好的玩家。比如我们给定几个游戏或游戏类型,(A, B, C, D, E, F, G),然后用户甲选择时,选择了自己喜欢A, D, E, G,然后用户乙选择了B, D,E,用户丙选择了B, C, D, G ,等等等等,假设我们已经有了100个用户的喜好数据,然后当一个新用户进来并从中选择完自己喜欢的游戏类型后,如何迅速推荐给他和他相似游戏爱好的人,并告诉他相同游戏爱好的一个交集信息?

Read more… »

k均值

k均值(k-means)是聚类算法的一种,聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的。组内的相似性越大,组间差别越大,聚类就越好。

举个例子,在二维平面上有几百个点,在笛卡儿坐标系中有(x,y)坐标,把它们点到纸上,问题是如何把它们分成不同组,每个组里点彼此之前都比较相近,而离其它组的成员又比较远。下面介绍的k均值就能干这种事。

Read more… »

计算相似度

顾名思义,就是计算两个item的相似度,这些在数据挖掘中是个很基础的部分,很多数据挖掘的算法都要以此为基础,例如聚类。因为以前总结过,这里就不再详细说了,下面简单列举了4个方法,根据不同的数据样本选择不同的方式。

举个例子,这里有五本书,a,b,c三个童鞋看过,它们对这五本书的评价如下(分数为1~5):

A = [1, 2, 4, 3, 5]
B = [2, 4, 3, 3, 4]
C = [3, 3, 2, 2, 3]

问题,谁和用户A的口味比较相似?

Read more… »

关联规则-剪枝的Apriori算法

上一篇简单介绍了关联规则的基本概念,继续这个部分,这篇来说一些稍微优化的算法,最后以“挖掘”我们的文具系统为例收尾。

上篇的“啤酒尿布”事件中,我们如果要算频繁三项集,使用的是“蛮力法”,即产生C(6,3) =20个 所有的三项集,再每个去判断它是不是频繁的。但数据集的项只有6个时,这不算什么,假设有400个时,如果要把全部三项集都算出来,那么要计算C(400,3) = 10586800 个,然后再去查每个是否是频繁的。有没有更快的方法,减少这么大的计算量?

在上一个例子中,我们可以发现,鸡蛋在5个事务中,只出现了一次,而包含了鸡蛋的所有三项集的支持度计数都不会超过1,如果按上一篇,我们要求支持度为0.4,也就是要求在5个事务中,至少出现2次,所以这就意味着“所有包含了鸡蛋的三项集必然不符合要求”。这就意味着,我们可以先计算“频繁1项集”,对于不符合条件的1项集就直接减掉,不再在它的基础上产生3项集了。这样就大大减少了最后产生项集的个数。

Read more… »

关联规则-基本概念

分类,聚类,关联规则是数据挖掘的三大部分,先记下关联规则的概念

关联规则有两个关键概念,支持度和置信度。先放概念:关联规则是形如 X -> Y的表达式,其中X和Y是不相交的项集。关联规则的强度可以用它的支持度和置信度来度量。支持度确定规则可以用于给定数据集的频繁程度,而置信度确定Y在包含X的事务中出现的频繁程度。

举例配合下这个说明,著名的啤酒和尿布事件。

假设有这几件物品, [ 面包 | 牛奶 | 尿布 | 啤酒 | 鸡蛋 | 可乐],有以下几个客户的一次购买数据,0表示没有买,1表示买了:

  1. [1,1,0,0,0,0]
  2. [1,0,1,1,1,0]
  3. [0,1,1,1,0,1]
  4. [1,1,1,1,0,0]
  5. [1,1,1,0,0,1]

Read more… »