我有一个内容-based的推荐系统,它的工作…还算可以。我相当确定这是解决这个问题的正确方法(将已建立的“用户”与几乎总是新的“项目”进行匹配,但这些项目包含与现有项目相似的已知特征)。
在研究过程中,我发现几乎所有关于内容-based过滤的例子都使用文章/电影作为例子,并且专门研究从文本块中提取的编码tf-idf特征。这并不完全是我所处理的情况,但我的大部分特征都是布尔特征,因此制作一个类似的向量并查看余弦距离并不特别困难。我还有一个连续特征,我对其进行了缩放并包含在向量中。正如我所说,它似乎有效,但相当不确定,我认为我知道部分原因…
我使用的连续特征是一个评分(我们称之为“美味度”),在几乎所有情况下,更高的分数会表明该项目对用户更有利。它是连续的,但也有一个明确的“方向”(不确定这是不是正确的术语)。一个方向上的错误与另一个方向上的错误是不一样的。
我有一些情况,其中一些用户对“美味度”评分一般的项目给予了高评分,但从逻辑上讲,他们仍然会更喜欢更美味的东西。那个用户的向量可能有一个平均美味度为2.3。我对余弦距离的理解是,在我的模型中,如果该用户遇到了两个新项目,除了一个美味度为1.0而另一个为4.5外完全相同,它实际上会偏向前者,因为它是向量之间的较短距离。
我如何修改或引入其他类型的距离度量,以考虑到美味度错误/距离在一个方向上与另一个方向上的错误/距离是不一样的?
(作为一个次要问题,我如何决定如何最好地缩放这个连续特征与我的布尔特征相邻?)
回答:
解决这个问题有两种基本方法:
(1) 编写你自己的距离函数。明显的方法是从每个向量中移除deliciousness
元素,独立评估该差异。对向量的其余部分使用余弦相似性。根据需要将该数值与味道差异结合起来。
(2) 转换你的deliciousness
数据,使得生成的度量是线性的。这将允许“正常”的距离度量按预期发挥作用。