Skip to content

Instantly share code, notes, and snippets.

@myui
Last active April 25, 2016 09:04
Show Gist options
  • Save myui/8ce8c6280bdf122128e5cfe795cab550 to your computer and use it in GitHub Desktop.
Save myui/8ce8c6280bdf122128e5cfe795cab550 to your computer and use it in GitHub Desktop.
CREATE TABLE bprmf_model
as
WITH t as (
  select
    bpr_sampling(userid, pos_items, "-sampling_rate 5.0")
      as (userid, pos_item, neg_item)
  from
    ranking_train
)
select
  train_bprmf(userid, pos_item, neg_item, "-iterations 50")
from
  t
;

WITH input as (
select
  t1.userid,
  t2.itemids as excludeItems
FROM  
  ranking_test t1 
  LEFT OUTER JOIN ranking_train t2 ON (t1.userid = t2.userid)
),
test as (
select 
  t1.userid,
  t3.itemid
from 
  input t1 
  LATERAL VIEW populate_not_in(t1.excludeItems, 3952) t3 as itemid
),
predict as (
    select
      t2.userid, t2.itemid,
      bprmf_predict(t2.Pu, p2.Qi, p2.Bi) as score
    from (
      select
        t1.userid, t1.itemid, p1.Pu
      from
        test t1 LEFT OUTER JOIN bprmf_model p1
        ON (t1.userid = p1.idx) 
    ) t2 
    LEFT OUTER JOIN bprmf_model p2
    ON (t2.itemid = p2.idx)
),
recommend as (
  select
  each_top_k(10, userid, score, userid, itemid) 
      as (rank, score, userid, itemid)
  from
    predict
)
select 
  userid,
  map_values(to_ordered_map(score, itemid, true)) as rec_items
from
  recommend
group by
  userid
;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment