ruby-on-rails - 是否有比蛮力更聪明的 Ruby 算法来查找多维数据中的相关性?

标签 ruby-on-rails ruby algorithm cluster-analysis matching

我的平台是 Ruby - 一个特别使用 Rails 3.2 的网络应用程序。

我正在尝试根据对象(人)对某些项目的评分来匹配对象(人)。人们可能会对与其他人相同的所有项目、某些项目或不对任何项目进行评价。评分是 0 到 5 之间的整数。可评分的项目数量和用户数量都可以被认为是重要的。

快速说明 -

Data illustration

蛮力方法是遍历所有人,计算每个项目的差异。在 Ruby 风格的伪代码中 -

MATCHES = {}
for each (PERSON in (people except USER)) do
  for each (RATING that PERSON has made) do
    if (USER has rated the item that RATING refers to) do
      MATCHES[PERSON's id] += difference between PERSON's rating and USER's rating
    end
  end
end
lowest values in MATCHES are the best matches for USER

这里的问题是,随着项目、评级和人数的增加,这段代码将花费非常长的时间来运行,暂时忽略缓存,这是必须运行很多次的代码,因为这个匹配是我的应用程序的主要功能。

我对更聪明的算法和更聪明的数据库持开放态度来实现这一目标,但通过算法来实现并因此允许我将所有内容保存在 MySQL 或 PostgreSQL 中会让我的生活变得更加轻松。我唯一要说的是数据确实需要持久化。

如果需要更多详细信息,请随时询问。非常感谢任何帮助!

最佳答案

查看 KD-Tree .它专门设计用于加速 N 维空间中的邻居查找,例如您的评级系统(第 1 个人是 X 轴上的 3 个单位,Y 轴上的 4 个单位,依此类推)。

您可能必须使用实际的编程语言来执行此操作。一些数据库有空间索引,但它们通常是为地理工作而设计的,比如 PostGIS (使用 GiST 索引),并且仅支持两个或三个维度。

也就是说,我确实找到了 this tantalizing blog post在 PostGIS 上。然后我找不到任何其他引用资料,但也许你的运气会比我好......

希望对您有所帮助!

关于ruby-on-rails - 是否有比蛮力更聪明的 Ruby 算法来查找多维数据中的相关性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864071/

相关文章:

ruby-on-rails - 在 Rails 中呈现不同的格式/布局如何影响 SEO?

ruby-on-rails - Rails 如何在一个 View 中访问不同的数据库表

ruby-on-rails - Searchkick 搜索数据在测试中有效但在浏览器中无效

python - 动态列表切片

arrays - 不使用哈希表从数组中删除重复项

algorithm - 文本的三向合并算法

ruby-on-rails - 无法批量分配 protected 属性 ActiveAdmin

ruby-on-rails - View 中 .html.erb 中的 else 语句

ruby - ruby 一次可以运行的线程数是否有限制?

ruby-on-rails - Rails Wicked Gem - Flash 消息