ruby – 如何在postgresql中创建多列推荐引擎?

前端之家收集整理的这篇文章主要介绍了ruby – 如何在postgresql中创建多列推荐引擎?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 postgresql中有一个表包含一些汽车1000000条记录:
+----+--------+------+---------+-----------+-------------+------------+------------+
| id |  price | year | mileage | fuel_type |  body_type  |   brand    |   model    |
+----+--------+------+---------+-----------+-------------+------------+------------+
|  1 |   4894 | 2011 |  121842 | "Benzin"  | "Sedan"     | "Toyota"   | "Yaris"    |
|  2 |   4989 | 2012 |   33901 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
|  3 |   4990 | 2013 |   55105 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
|  3 |   5290 | 2013 |   20967 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
|  5 |   5594 | 2008 |  121281 | "Benzin"  | "Hatchback" | "Mercedes" | "A170"     |
|  6 |   4690 | 2012 |   71303 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
|  7 |   5290 | 2013 |   58300 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
|  8 |   5890 | 2013 |   35732 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
|  9 |   5990 | 2013 |   38777 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
| 10 |   6180 | 2013 |   69491 | "Benzin"  | "Hatchback" | "VW"       | "up!"      |
| 11 |   6490 | 2012 |   72900 | "Benzin"  | "Sedan"     | "Renault"  | "Clio III" |
| 12 |   6790 | 2012 |   49541 | "Benzin"  | "Hatchback" | "Renault"  | "Clio III" |
| 13 |   6790 | 2012 |   46377 | "Benzin"  | "Hatchback" | "Renault"  | "Clio III" |
| 14 |   6790 | 2012 |   45200 | "Benzin"  | "Hatchback" | "Renault"  | "Clio III" |
| 15 |   6894 | 2007 |  108840 | "Benzin"  | "Sedan"     | "VW"       | "Golf V"   |
| 16 |   6990 | 2009 |   54200 | "Benzin"  | "Sedan"     | "Renault"  | "Mégane"   |
| 17 |   6990 | 2012 |   40652 | "Benzin"  | "Hatchback" | "Renault"  | "Clio III" |
| 18 |   6990 | 2012 |   38080 | "Benzin"  | "Sedan"     | "Renault"  | "Clio III" |
| 19 |   7290 | 2012 |   28600 | "Benzin"  | "Hatchback" | "Renault"  | "Clio III" |
| 20 |   7290 | 2013 |   52800 | "Benzin"  | "Hatchback" | "Renault"  | "Twingo"   |
+----+--------+------+---------+-----------+-------------+------------+------------+

我想创建一个推荐引擎,它可以根据一些不同的标准返回20个最“相似”的匹配,例如:当用户搜索:brand =’Renault’且价格< 60000年和年> 2010年,我想在搜索结果之外提出一些其他的,与其他汽车相比更松散的结果,这是相似的,但不一定完全符合所有搜索条件. 我已经尝试在ruby中制作一些基于规则的代码,它可以执行以下操作:
>如果您通过’雷诺Clio’进行搜索,那么’Renen Twingo’也是一个非常接近的比赛
>如果您的最高价格为8000,那么请按最接近的价格订购
等等

基于此代码,我生成一个SQL查询,其中包含where和order by子句.

然而问题是,事情变得很大,因为我想根据初始标准考虑20个不同的列,我可以选择考虑.此外,我希望建议向后兼容,因为我不想只做一个简单的过滤(WHERE)查询,在这种情况下最终可能会返回零匹配.相反,我希望它做一些类似于使用文本相似度算法时的方法,您可以将一个短语与所有短语进行比较,并获得所有这些短语的比较分数,然后您可以对其进行排序.

我对如何实现这一点感到非常困惑,在一种方法中,这不是定义1000条规则和if / then语句来生成SQL查询.是否有其他技术我可以使用,或者可能是postgresql之外的其他技术?

解决方法

应用机器学习技巧.

MADlib http://madlib.incubator.apache.org/是Postgres的扩展,使您能够在数据库内部使用各种机器学习算法.值得学习和尝试.

从你的向量的线性回归开始,然后尝试随机森林和其他算法,并比较在你的情况下更好的效果(评估算法质量的技巧很简单:你拿走你拥有的所有数据,使用70-80%的它训练,然后使用余数从训练的引擎得到估计 – 然后使用一些函数来计算偏差误差,通常人们使用均方误差方法).

此外,我可以推荐一个很棒的斯坦福在线课程,在Youtube上发布在线书籍和讲座(全部免费!):http://mmds.org/.构建推荐引擎的各种现代方法在其中有很好的描述.

猜你在找的Ruby相关文章