在内容-based过滤推荐系统中处理连续特征的错误

我有一个内容-based的推荐系统,它的工作…还算可以。我相当确定这是解决这个问题的正确方法(将已建立的“用户”与几乎总是新的“项目”进行匹配,但这些项目包含与现有项目相似的已知特征)。

在研究过程中,我发现几乎所有关于内容-based过滤的例子都使用文章/电影作为例子,并且专门研究从文本块中提取的编码tf-idf特征。这并不完全是我所处理的情况,但我的大部分特征都是布尔特征,因此制作一个类似的向量并查看余弦距离并不特别困难。我还有一个连续特征,我对其进行了缩放并包含在向量中。正如我所说,它似乎有效,但相当不确定,我认为我知道部分原因…

我使用的连续特征是一个评分(我们称之为“美味度”),在几乎所有情况下,更高的分数会表明该项目对用户更有利。它是连续的,但也有一个明确的“方向”(不确定这是不是正确的术语)。一个方向上的错误与另一个方向上的错误是不一样的。

我有一些情况,其中一些用户对“美味度”评分一般的项目给予了高评分,但从逻辑上讲,他们仍然会更喜欢更美味的东西。那个用户的向量可能有一个平均美味度为2.3。我对余弦距离的理解是,在我的模型中,如果该用户遇到了两个新项目,除了一个美味度为1.0而另一个为4.5外完全相同,它实际上会偏向前者,因为它是向量之间的较短距离。

我如何修改或引入其他类型的距离度量,以考虑到美味度错误/距离在一个方向上与另一个方向上的错误/距离是不一样的?

(作为一个次要问题,我如何决定如何最好地缩放这个连续特征与我的布尔特征相邻?)


回答:

解决这个问题有两种基本方法:

(1) 编写你自己的距离函数。明显的方法是从每个向量中移除deliciousness元素,独立评估该差异。对向量的其余部分使用余弦相似性。根据需要将该数值与味道差异结合起来。

(2) 转换你的deliciousness数据,使得生成的度量线性的。这将允许“正常”的距离度量按预期发挥作用。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注