检测异常
我试图做一个公司的访问权限一些数据挖掘。我试图根据他们拥有的访问权将不同的组聚合在一起,然后确定是否有人的访问受到怀疑,因为他们的组对等人都没有访问权限。我只是在寻找一种算法来帮助我。这几乎是一个逆推荐系统(即Netflix,亚马逊)。这里有一个简单的例子:检测异常
Person 1 has access to files A, B, E
Person 2 has access to files A, B
Person 3 has access to files A, B
Person 4 has access to files C, D, E
Person 5 has access to files C, D
Person 6 has access to files C, D, E
我希望能够没有它(无监督学习)是1-3人及人事4-6是同样的功能,并有可能在同一组,因为分类认识到自己的类似的文件访问(集群)。之后,我们确定了集群,那么WE标志异常访问,这是人1文件E.
我试图寻找到AI4R Ruby库,而是来到了一个死胡同。有很多算法可供选择。我只需要指出正确的方式。谢谢。
这样做的一个直接的办法就是建立每个人的特征向量,并使用cosine similarity /点积两者之间的相似性的措施。特征向量可能类似于(A = 1,B = 0,C = 1 ...)等等。计算时如果数据太稀疏,即访问选项过多,则最终可能会得到非常低的相似性度量。
您也可以建立的两个特征/接入如何彼此相关的引用(特征)矩阵,即它们是彼此的相似(比如说在0和1之间的值)。当你取加权平均值时,两个向量之间的相似性度量可能会更聪明一些:Sum(f1,f2)/(nr(f1)* nr(f2))其中f1是特征/访问形式person1,f2是来自人2的特征/访问。nr(f1)=人1的总特征,以及人2的总特征nr(f2)。
现在说你已经测量了每个人与另一个人的关系。现在您可以使用agglomerative clustering策略,该策略将允许您以预定义(意味着您设置此限制)数量的集群结束。或者,您可以设置关于群集质心之间最大增量的规则以允许聚集,这可能会使进程在某个不可预知的阶段停止(即最终得到未指定数量的群集)。
这些都是很简单的策略。特征矩阵需要领域知识,并且需要时间来构建,特别是如果您有很多特征/访问类型。
怎么样一个简单的GROUP_BY?可能会给你一个概述。 – three 2012-02-17 21:53:00