Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tree 计算加权树的相似性_Tree_Recommendation Engine_Collaborative Filtering - Fatal编程技术网

Tree 计算加权树的相似性

Tree 计算加权树的相似性,tree,recommendation-engine,collaborative-filtering,Tree,Recommendation Engine,Collaborative Filtering,我的树的结构很简单,深度是两个,每个子节点都是根的直接子节点,每个节点除了根之外都有一个权重。有没有衡量两棵树相似性的好方法? 以下是原始问题: 假设你有一个关于你读过的书的数据列表。该列表包含类似哈希表的键和值。键是图书类别,值是您在当前类别下阅读的图书数量。所以每个人都有这个数据列表,我想根据这个数据列表比较两个用户的相似性。我知道协作过滤可以做到这一点,但我正在尝试这种方法,并将其与cf进行比较。 因此,我将数据列表视为加权树。类别是子节点,每个子节点的权重是该类别出现在用户手册中的次数。

我的树的结构很简单,深度是两个,每个子节点都是根的直接子节点,每个节点除了根之外都有一个权重。有没有衡量两棵树相似性的好方法?
以下是原始问题:
假设你有一个关于你读过的书的数据列表。该列表包含类似哈希表的键和值。键是图书类别,值是您在当前类别下阅读的图书数量。所以每个人都有这个数据列表,我想根据这个数据列表比较两个用户的相似性。我知道协作过滤可以做到这一点,但我正在尝试这种方法,并将其与cf进行比较。
因此,我将数据列表视为加权树。类别是子节点,每个子节点的权重是该类别出现在用户手册中的次数。

该相似度与协同过滤中两个用户的相似度相似。这是一个数字。

这可以通过设置操作来完成

几年前,我曾在Meta CVS软件中实现过这样一个相似性度量。将快照导入到分支时,这用于标识重命名的文件。当然,可以在基线之间重命名和编辑文件,这意味着您无法执行精确的比较。但我离题了

Jaccard索引

首先,两个用户可能对书籍有完全不同的兴趣。或者他们可以有完全相同的兴趣

你能做的就是计算他们共同兴趣的大小,并将他们共同拥有的部分表示为整体大小的一小部分

假设兴趣集没有加权,只是设置了没有相关权重的类别。相似性可以表示为两个用户共有的类别数除以类别总数。也就是说,集合交的基数除以集合并的基数

如果涉及到重量,你必须以某种方式进行计算。也许可以通过并集的总权重计算集合交点的总权重(注意被零除)

如您所见,如果用户没有共同的类别,则该度量值为0.0;如果用户对匹配类别感兴趣(无论权重如何),则该度量值为1.0,因此该度量值是可行的

余弦相似性

定义相似性的另一种方法是将其视为向量点积(相关性)。首先,确定两个用户之间存在的所有类别。为两个用户中的每个用户形成一个向量,其中每个类别的权重都存在(如果用户的兴趣集中没有该类别,则为零)

然后你可以通过取这些向量的点积,除以它们的长度的乘积来计算相似度:(A.B)/|A | B |

向量的长度是权重平方和的平方根。(同样,要注意被零除。)

在这种相似性度量下,如果用户没有共同的类别,则两个向量是垂直的,并且它们的点积为零。该度量基本上是两个向量之间角度的余弦。余弦越接近1,向量就越平行(用户的兴趣“在同一方向上对齐”)


希望这能给你一些想法;但正如你所看到的,这是一个开放式的过程。

如果你能清楚地表达“相似”的定义,算法可能会突然出现。你对相似性的定义是什么?它是一个布尔谓词,还是一个连续度量?正如你们所说,我们的问题很可能会被投票通过:这不是一个真正的问题:很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或修辞性强,无法以目前的形式得到合理的回答。@Kaz谢谢你的提醒,我会注意的。如果树有深度二,而根没有权重,这与有序集合(如列表或向量)有何区别?@Kaz是的,你是对的,它不是树,它是哈希表或任何键值对集合。我把它描述为树,因为我认为这里可能会用到一些树的方法或算法。你可能是不正确的。实际上,您拥有的结构是一个集合,因为它是无序的,而相似性度量(无论您如何定义)是一个集合操作。树操作不太可能揭示集合操作。缺乏秩序是很重要的,因为这意味着如果两个对象的内容相同,那么它们应该是相似的,而不考虑任何秩序。谢谢你的想法,很高兴与你交谈。