首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >graphlab不推荐用户已经拥有的项目

graphlab不推荐用户已经拥有的项目
EN

Stack Overflow用户
提问于 2016-09-04 06:32:10
回答 1查看 107关注 0票数 0

在创建graphlab推荐模型时,用户已经拥有的项不再推荐给他时,应该具体说明什么?这可以直接通过指定某些参数来完成,还是我需要从头开始编写推荐信呢?数据应该如下所示

代码语言:javascript
复制
| user_id    |  item_id    | othercolumns |
|:-----------|------------:|:------------:|
| 1          |     21      |     This     | 
| 2          |     22      |     column   |
| 1          |     23      |     will     |
| 3          |     24      |     hold     |
| 2          |     25      |     other    |
| 1          |     26      |     values   |

由于项目21、23和26已为用户1所拥有,因此不应向他推荐该项目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-04 10:15:44

这种行为由recommender.recommend方法(文档)的文档参数控制。

exclude_known : bool,可选 默认情况下,以前在培训数据或使用new_observation_data.提供的任何新数据中看到的所有用户项交互都被排除在建议之外。传入exclude_known = False将重写此行为。

示例

代码语言:javascript
复制
>>> import graphlab as gl
>>> sf = gl.SFrame({'user_id':[1,2,1,3,2,1], 'item_id':[21,22,23,24,25,26]})
>>> print sf
+---------+---------+
| item_id | user_id |
+---------+---------+
|    21   |    1    |
|    22   |    2    |
|    23   |    1    |
|    24   |    3    |
|    25   |    2    |
|    26   |    1    |
+---------+---------+
[6 rows x 2 columns]
>>> rec_model = gl.recommender.create(sf)
>>> # we recommend items not owned by user
>>> rec_wo_own_item = rec_model.recommend(sf['user_id'].unique())
>>> rec_wo_own_item.sort('user_id').print_rows(100)
+---------+---------+----------------+------+
| user_id | item_id |     score      | rank |
+---------+---------+----------------+------+
|    1    |    22   |      0.0       |  1   |
|    1    |    24   |      0.0       |  2   |
|    1    |    25   |      0.0       |  3   |
|    2    |    21   |      0.0       |  1   |
|    2    |    23   |      0.0       |  2   |
|    2    |    24   |      0.0       |  3   |
|    2    |    26   |      0.0       |  4   |
|    3    |    21   | 0.333333333333 |  1   |
|    3    |    23   | 0.333333333333 |  2   |
|    3    |    26   | 0.333333333333 |  3   |
|    3    |    22   | 0.166666666667 |  4   |
|    3    |    25   | 0.166666666667 |  5   |
+---------+---------+----------------+------+
[12 rows x 4 columns]
>>> # we recommend items owned by user
>>> rec_w_own_item = rec_model.recommend(sf['user_id'].unique(), exclude_known=False)
>>> rec_w_own_item.sort('user_id').print_rows(100)
+---------+---------+----------------+------+
| user_id | item_id |     score      | rank |
+---------+---------+----------------+------+
|    1    |    21   | 0.666666666667 |  1   |
|    1    |    23   | 0.666666666667 |  2   |
|    1    |    26   | 0.666666666667 |  3   |
|    1    |    22   |      0.0       |  4   |
|    1    |    24   |      0.0       |  5   |
|    1    |    25   |      0.0       |  6   |
|    2    |    26   |      0.0       |  6   |
|    2    |    24   |      0.0       |  5   |
|    2    |    23   |      0.0       |  4   |
|    2    |    21   |      0.0       |  3   |
|    2    |    25   |      0.5       |  2   |
|    2    |    22   |      0.5       |  1   |
|    3    |    24   |      0.0       |  6   |
|    3    |    25   | 0.166666666667 |  5   |
|    3    |    22   | 0.166666666667 |  4   |
|    3    |    26   | 0.333333333333 |  3   |
|    3    |    23   | 0.333333333333 |  2   |
|    3    |    21   | 0.333333333333 |  1   |
+---------+---------+----------------+------+
[18 rows x 4 columns]
>>> # we add recommended items not owned by user to the original SFrame
>>> rec = rec_wo_own_item.groupby('user_id', {'reco':gl.aggregate.CONCAT('item_id')})
>>> sf = sf.join(rec, 'user_id', 'left')
>>> print sf
+---------+---------+----------------------+
| item_id | user_id |         reco         |
+---------+---------+----------------------+
|    21   |    1    |     [24, 25, 22]     |
|    22   |    2    |   [24, 26, 23, 21]   |
|    23   |    1    |     [24, 25, 22]     |
|    24   |    3    | [21, 23, 26, 25, 22] |
|    25   |    2    |   [24, 26, 23, 21]   |
|    26   |    1    |     [24, 25, 22]     |
+---------+---------+----------------------+
[6 rows x 3 columns]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39314181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档