예제 #1
0
    def test_score_for_python_version(self):
        tf = PyTensorCoFi(n_factors=2)
        inp = [{"user": 10, "item": 100},
               {"user": 10, "item": 110},
               {"user": 12, "item": 120}]
        inp = pd.DataFrame(inp)
        tf.fit(inp)
        uid = tf.data_map[tf.get_user_column()][10]
        iid = tf.data_map[tf.get_item_column()][100]

        tf.factors[0][uid, 0] = 0
        tf.factors[0][uid, 1] = 1
        tf.factors[1][iid, 0] = 1
        tf.factors[1][iid, 1] = 5
        self.assertEqual(0*1+1*5, tf.get_score(10, 100))
예제 #2
0
    def test_ids_returns_for_python_version(self):
        tf = PyTensorCoFi(n_factors=2)
        inp = [{"user": 10, "item": 100},
               {"user": 10, "item": 110},
               {"user": 12, "item": 120}]
        inp = pd.DataFrame(inp)
        tf.fit(inp)

        # Test the id in map
        uid = tf.data_map[tf.get_user_column()][10]
        iid = tf.data_map[tf.get_item_column()][100]
        self.assertEquals(uid, 0)
        self.assertEquals(iid, 0)

        # Test number of factors
        self.assertEquals(len(tf.factors[0][uid, :]), tf.number_of_factors)
        self.assertEquals(len(tf.factors[1][iid, :]), tf.number_of_factors)
예제 #3
0
    def test_score_for_python_version(self):
        tf = PyTensorCoFi(n_factors=2)
        inp = [{
            "user": 10,
            "item": 100
        }, {
            "user": 10,
            "item": 110
        }, {
            "user": 12,
            "item": 120
        }]
        inp = pd.DataFrame(inp)
        tf.fit(inp)
        uid = tf.data_map[tf.get_user_column()][10]
        iid = tf.data_map[tf.get_item_column()][100]

        tf.factors[0][uid, 0] = 0
        tf.factors[0][uid, 1] = 1
        tf.factors[1][iid, 0] = 1
        tf.factors[1][iid, 1] = 5
        self.assertEqual(0 * 1 + 1 * 5, tf.get_score(10, 100))
예제 #4
0
 def test_recommendation_with_testfm(self):
     """
     [recommendation.api.GetRecommendation] Test recommendation with testfm
     """
     data = np.array(zip(*map(lambda x: (x["user_id"]-1, x["item_id"]-1, 1.),
                              Inventory.objects.all().values("user_id", "item_id"))), dtype=np.float32)
     users, items = zip(*Inventory.objects.all().values_list("user_id", "item_id"))
     df = pd.DataFrame({"user": pd.Series(users), "item": pd.Series(items)}, dtype=np.float32)
     evaluator = Evaluator(use_multi_threading=False)
     tensor = TensorCoFi.get_model_from_cache()
     tfm_tensor = PyTensorCoFi()
     tfm_tensor.data_map = tensor.data_map
     tfm_tensor.users_size = lambda: tensor.users_size()
     tfm_tensor.items_size = lambda: tensor.items_size()
     tfm_tensor.get_score = lambda user, item: \
         np.dot(tfm_tensor.factors[0][tfm_tensor.data_map[tfm_tensor.get_user_column()][user]],
                tfm_tensor.factors[1][tfm_tensor.data_map[tfm_tensor.get_item_column()][item]].transpose())
     tfm_tensor.train(data.transpose())
     items = df.item.unique()
     t = evaluator.evaluate_model(tensor, df, all_items=items, non_relevant_count=100)
     tfm = evaluator.evaluate_model(tfm_tensor, df, all_items=items, non_relevant_count=100)
     assert abs(t[0] - tfm[0]) < 0.15, \
         "Difference between testfm implementation and frappe is to high (%f, %f)" % (t[0], tfm[0])
예제 #5
0
    def test_ids_returns_for_python_version(self):
        tf = PyTensorCoFi(n_factors=2)
        inp = [{
            "user": 10,
            "item": 100
        }, {
            "user": 10,
            "item": 110
        }, {
            "user": 12,
            "item": 120
        }]
        inp = pd.DataFrame(inp)
        tf.fit(inp)

        # Test the id in map
        uid = tf.data_map[tf.get_user_column()][10]
        iid = tf.data_map[tf.get_item_column()][100]
        self.assertEquals(uid, 0)
        self.assertEquals(iid, 0)

        # Test number of factors
        self.assertEquals(len(tf.factors[0][uid, :]), tf.number_of_factors)
        self.assertEquals(len(tf.factors[1][iid, :]), tf.number_of_factors)