我正在尝试对公司的访问权限进行一些数据挖掘。我正在尝试根据他们的访问权限将不同的群组聚集在一起,然后确定某人的访问是否可疑,因为他们的群组对等方都没有访问权限。我只是在寻找一种可以帮助我的算法。它几乎是一个反向推荐系统(即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的功能相似且可能属于同一组,因为它们具有相似的文件访问权限(聚类)。在我们识别出集群之后,我们标记了异常访问,即文件E的人员1。
我试图查看AI4R ruby库,但走到了尽头。有很多算法可供选择。我只需要以正确的方式指出。感谢。
答案 0 :(得分:0)
这样做的直接方法是为每个人构建特征向量,并使用cosine similarity /点积作为两者之间相似性的度量。特征向量类似于(A = 1,B = 0,C = 1 ......)等等。计算时如果您的数据太稀疏,即访问选项太多,您最终可能会得到非常低的相似性度量。
您还可以构建一个参考(特征)矩阵,表示两个特征/访问如何相互关联,即它们彼此之间的相似程度(比如0到1之间的值)。当你采用加权平均值时,两个向量之间的相似性度量可以更聪明:Sum(f1,f2)/(nr(f1)* nr(f2))其中f1是特征/访问形式人1和f2是来自人2的特征/访问.nr(f1)=人1的总特征,以及人2的nr(f2)总特征。
现在说,您可以衡量每个人与另一个人的关系。现在,您可以使用agglomerative clustering策略,这将允许您最终获得预定义(意味着您设置此限制)的群集数量。或者,您可以设置有关群集质心之间的最大增量的规则,以允许聚集,这可能会使过程在某个不可预测的阶段停止(即,您最终会得到未指定数量的聚类)。
这些是非常简单的策略。特征矩阵需要领域知识,如果您有很多功能/访问类型,则需要时间来构建。