数据挖掘情况
Posted
技术标签:
【中文标题】数据挖掘情况【英文标题】:Data Mining situation 【发布时间】:2011-11-28 15:45:09 【问题描述】:假设我有如下所述的数据。
11AM user1 刷机
上午 11:05 用户 1 准备早餐
上午 11:10 用户 1 吃早餐
上午 11:15 用户 1 洗澡
上午 11:30 用户 1 离开办公室
12PM user2刷机
下午 12:05 用户 2 准备早餐
下午 12:10 用户 2 吃早餐
下午 12:15 用户 2 洗澡
下午 12:30 用户 2 离开办公室
11AM user3 洗澡
上午 11:05 用户 3 准备早餐
上午 11:10 用户 3 刷机
上午 11:15 用户 3 吃早餐
上午 11:30 用户 3 离开办公室
12PM user4 洗澡
下午 12:05 用户 4 准备早餐
12:10PM user4 刷机
下午 12:15 用户 4 吃早餐
下午 12:30 用户 4 离开办公室
这些数据告诉我不同人的日常生活。从这些数据看来,user1 和 user2 的行为相似(尽管它们执行活动的时间有所不同,但它们遵循相同的顺序)。出于同样的原因,User3 和 User4 的行为相似。 现在我必须将这些用户分组到不同的组中。在此示例中,group1- user1 和 USer2 ... 后跟 group2,包括 user3 和 user4
我应该如何处理这种情况。我正在尝试学习数据挖掘,这是一个我认为是数据挖掘问题的例子。我正在尝试找到解决方案的方法,但我想不出一个。我相信这些数据中有规律。但我无法想到可以揭示它的方法。 此外,我必须将这种方法映射到我拥有的数据集上,该数据集非常庞大但与此类似:) 数据是关于一次记录事件发生的日志。我想找到代表相似事件序列的组。
任何指针将不胜感激。
【问题讨论】:
【参考方案1】:看起来像聚类在关联挖掘之上,更准确地说是Apriori算法。像这样的:
-
挖掘动作之间所有可能的关联,即序列布什 -> 准备早餐,准备早餐 -> 吃早餐,...,布什 -> 准备早餐 -> 吃早餐等。每对,三胞胎,四胞胎等。你可以在你的数据中找到。
为每个此类序列创建单独的属性。为了获得更好的性能,为对属性添加 2 的提升,为三胞胎添加 3 等等。
此时你必须有一个属性向量和相应的提升向量。您可以为每个用户计算特征向量:如果该序列存在于用户操作中,则在向量中的每个位置设置 1 * boost,否则设置为 0)。您将获得每个用户的矢量表示。
在此向量上使用更适合您需求的聚类算法。每个找到的类都是您使用的组。
示例:
让我们将所有动作标记为字母:
a - 画笔 b - 准备早餐 c - 东早餐 d - 洗澡 ...
你的属性看起来像
a1: a->b a2: a->c a3: a->d ... a10: b->a a11: b->c a12: b->d ... a30: a->b->c->d a31: a->b->d->c ...
用户特征向量在这种情况下将是:
attributes = a1, a2, a3, a4, ..., a10, a11, a12, ..., a30, a31, ...
user1 = 1, 0, 0, 0, ..., 0, 1, 0, ..., 4, 0, ...
user2 = 1, 0, 0, 0, ..., 0, 1, 0, ..., 4, 0, ...
user3 = 0, 0, 0, 0, ..., 0, 0, 0, ..., 0, 0, ...
要比较 2 个用户,需要一些距离测量。最简单的是cosine distance,即两个特征向量之间的余弦值。如果 2 个用户有完全相同的动作序列,他们的相似度将等于 1。如果他们没有共同点 - 他们的相似度将是 0。
使用距离测量使用聚类算法(例如,k-means)来创建用户组。
【讨论】:
谢谢.. 我想我明白了你的解释。像您解释的那样进行聚类应该是一个好主意。我会努力的。非常感谢您的帮助:)【参考方案2】:使用像其他答案中提出的 Apriori 这样的项目集挖掘算法并不是最佳解决方案,因为 Apriori 不考虑时间或顺序。因此,它需要做一个额外的预处理步骤来考虑排序。
更好的解决方案是直接使用 PrefixSpan、SPADE 或 CM-SPADE 等顺序模式挖掘算法。顺序模式挖掘算法将直接找到在一组序列中经常出现的子序列。
那么您仍然可以对找到的顺序模式应用聚类!
【讨论】:
以上是关于数据挖掘情况的主要内容,如果未能解决你的问题,请参考以下文章