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

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

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

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

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

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

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


回答:

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

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

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

Related Posts

关于k折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

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