数据挖掘情况

use*_*856 7 data-mining text-mining

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

11AM user1刷机

上午11:05 user1准备Brakfast

上午11:10用户1吃早餐

上午11:15 user1洗澡

上午11:30用户1离开办公室

12PM user2刷机

下午12:05 user2 Prep Brakfast

下午12:10用户2吃早餐

12:15 PM user2洗澡

12:30 PM user2离开办公室

11AM user3洗澡

上午11:05 user3准备Brakfast

上午11:10 user3刷机

上午11:15 user3吃早餐

上午11:30 user3离开办公室

12PM user4洗澡

下午12:05 user4 Prep Brakfast

下午12:10 user4刷机

下午12:15用户4吃早餐

12:30 PM user4离开办公室

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

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

任何指针将不胜感激.

ffr*_*end 2

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

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

例子:

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

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, ...
Run Code Online (Sandbox Code Playgroud)

为了比较两个用户,需要一些距离测量。最简单的是余弦距离,即两个特征向量之间的余弦值。如果 2 个用户具有完全相同的操作序列,则他们的相似度将等于 1。如果他们没有任何共同点,那么他们的相似度将为 0。

通过距离测量,使用聚类算法(例如k-means)来创建用户组。