【问题标题】:Cosine similarity between a combination of numerical and text values数值和文本值组合之间的余弦相似度
【发布时间】:2021-02-27 14:19:31
【问题描述】:

我正在尝试使用有关餐馆的数据在 Yelp 数据集上创建一个简单的基于内容的过滤模型。
我有一个这种格式的DataFrame

>>> business_df.dtypes
address          object
attributes       object
business_id      object
categories       object
city             object
hours            object
is_open          object
latitude        float64
longitude       float64
name             object
postal_code      object
review_count      int64
stars           float64
state            object

现在我正在尝试构建一个基于内容的协同过滤模型,并在其中回答“给定一家餐厅,推荐类似餐厅”的问题

我正在尝试在此处实现 Content-Based Recommender 下给出的模型 - https://www.datacamp.com/community/tutorials/recommender-systems-python

基本上,他们使用一些文本字段来构建一个 Count Vectorizer 矩阵,然后对行进行余弦相似度以获得电影之间的相似度。

他们后来说

引入流行度过滤器:此推荐器将选取 30 部最相似的电影,计算加权评分(使用上面的 IMDB 公式),根据该评分对电影进行排序,并返回前 10 部电影。

我正在尝试使用类别、属性、纬度和对数(距离)、星星和评论计数(根据评论计数加权的星星 - 评论数量越多,星星的权重越大)来构建类似的模型.

但我不知道如何将数字列合并到这里的模型中。我确定我不能将数值列传递到计数向量器中。

我可以通过简单地计算数值列之间的余弦相似度(或 Pearson 相关性)来构建 2 个模型 - 1 个带有文本字段和其他模型 - 并将这 2 个结合起来吗?如果是,我该怎么做?

或者我是否可以遵循数据营模型并在模型中填写文本字段,然后使用公式来合并评分?如果是,我仍然无法根据经纬度计算距离

【问题讨论】:

  • 为什么你认为数字之间的余弦距离比词向量之间的余弦距离更难?想想余弦距离的欧几里得定义。
  • @tripleee 我在想我不能在我添加文本的相同计数矢量化函数中添加数字,解决方案是对文本进行计数矢量化,对数字分别进行 Pearson 相关。但我仍然不知道如何将这两个结果组合成连贯的东西。

标签: python recommendation-engine cosine-similarity


【解决方案1】:

让我们假设CountVectorizer 为您提供了一个形状为(N, m) 的矩阵C,其中N = 餐厅数量,m = 特征数量(这里是单词的数量)。

现在既然你想添加数字特征,假设你有k这样的特征。您可以简单地为每部电影计算这些特征并将它们连接到矩阵C。因此,现在对于每部电影,您将拥有(m+k) 功能。 C 的形状现在将是 (N, m+k)。您可以使用 pandas 进行连接。

现在您可以使用此矩阵简单地计算余弦相似度,这样您就可以考虑文本特征以及数字特征

但是,我强烈建议您对这些值进行归一化处理,因为某些数值特征可能具有较大的量级,这可能会导致较差的结果。此外,除了 CountVectorizer,TFIDF 矩阵甚至词嵌入可能会给您带来更好的结果

【讨论】:

  • 如何标准化这些值?你能指点我一些资源吗?
  • 例如,如果一家餐厅可以有 0 到 5 颗星,您可以将其标准化为 0 到 1 之间的浮点数(0.0、0.2、0.4、0.6、0.8、1.0)
  • @tripleee 明白了!另外,您知道我如何根据评论数量来衡量评分吗?有些餐厅的评分很高,但评论数却很少
  • 最大值(或某个理论最大值)为 1.0 的简单线性插值似乎是显而易见的解决方案。有时,当您更关心数量级而不是线性比例时,对数是有意义的。
  • 您链接的教程介绍了如何得出加权评级。另请看:stackoverflow.com/questions/8542391/…
猜你喜欢
  • 2020-02-11
  • 1970-01-01
  • 2019-04-12
  • 2021-08-04
  • 2014-02-25
  • 2018-02-19
  • 2017-04-04
  • 2011-02-01
  • 2021-06-13
相关资源
最近更新 更多