数据挖掘情况

时间:2011-09-30 17:23:00

标签: data-mining text-mining

假设我有如下所述的数据。

11AM user1 Brush

11:05 AM user1 Prep Brakfast

11:10 AM user1吃早餐

11:15 AM user1洗澡

11:30 AM user1离开办公室

12PM user2 Brush

12:05 PM user2 Prep Brakfast

12:10 PM user2吃早餐

12:15 PM user2洗澡

12:30 PM user2离开办公室

上午11点用户3洗澡

11:05 AM user3 Prep Brakfast

11:10 AM user3 Brush

11:15 AM user3吃早餐

11:30 AM user3离开办公室

12PM user4洗澡

12:05 PM user4 Prep Brakfast

12:10 PM user4 Brush

12:15 PM user4吃早餐

12:30 PM user4离开办公室

这些数据告诉我不同​​人的日常生活。从这些数据来看,似乎user1和user2的行为相似(尽管它们执行活动的时间有所不同,但它们遵循相同的顺序)。出于同样的原因,User3和User4的行为类似。 现在我必须将这些用户分组到不同的组中。在此示例中,group1- user1和USer2 ...后跟group2,包括user3和user4

我应该如何应对这种情况。我正在尝试学习数据挖掘,这是一个我认为是数据挖掘问题的例子。我试图找到解决方案的方法,但我想不出一个。我相信这些数据有其中的模式。但我无法想到可以揭示它的方法。 另外,我必须在我拥有的数据集上映射这种方法,这非常巨大,但与此类似:)数据是关于日志说明一次发生事件。我想找到代表相似事件序列的群体。

任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

关联挖掘,更准确地说是Apriori算法之上,它看起来像聚类。像这样:

  1. 挖掘行动之间所有可能的关联,即序列布什 - >准备早餐,准备早餐 - >吃早餐,......,布什 - >准备早餐 - >吃早餐等。您可以在数据中找到每对,三联,四联等。
  2. 从每个这样的序列中创建单独的属性。为了获得更好的性能,请为对属性添加2,为三元组添加3,依此类推。
  3. 此时你必须有一个带有相应增强矢量的属性向量。您可以为每个用户计算特征向量:如果用户操作中存在此序列,则在向量中的每个位置设置1 * boost,否则为0)。您将获得每个用户的矢量表示。
  4. 在此向量上使用更适合您需求的聚类算法。每个找到的类都是您使用的组。
  5. 示例:

    让我们将所有动作标记为字母:

    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个特征向量之间的余弦值。如果2个用户具有完全相同的操作序列,则它们的相似性将等于1.如果它们没有共同点 - 它们的相似性将为0.

    使用距离测量使用聚类算法(例如,k-means)来制作用户组。

答案 1 :(得分:0)

在其他答案中使用像Apriori这样的项集挖掘算法并不是最佳解决方案,因为Apriori不考虑时间或顺序排序。因此,它需要进行额外的预处理步骤以考虑订购。

更好的解决方案是直接使用PrefixSpan,SPADE或CM-SPADE等顺序模式挖掘算法。顺序模式挖掘算法将直接找到经常出现在一组序列中的子序列。

然后,您仍然可以对找到的序列模式应用聚类!