def setUpClass(cls): cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=15, num_items=30, interaction_density=.5, num_user_features=200, num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5 ) tf.reset_default_graph() set_session(None)
def test_basic_usage(self): # Build the model with default parameters model = TensorRec() # Generate some dummy data interactions, user_features, item_features = generate_dummy_data( num_users=100, num_items=150, interaction_density=.05) # Fit the model model.fit(interactions, user_features, item_features, epochs=5, verbose=True) # Predict scores for user 75 on items 100, 101, and 102 predictions = model.predict(user_ids=[75, 75, 75], item_ids=[100, 101, 102], user_features=user_features, item_features=item_features) # Calculate and print the recall at 10 r_at_k = recall_at_k(model, interactions, k=10, user_features=user_features, item_features=item_features) print(np.mean(r_at_k)) self.assertIsNotNone(predictions)
def setUpClass(cls): cls.n_users = 15 cls.n_items = 30 cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200, num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5, return_datasets=True) cls.standard_model = TensorRec(n_components=10) cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10) cls.unbiased_model = TensorRec(n_components=10, biased=False) cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
def test_fit(self): interactions, user_features, item_features = generate_dummy_data( num_users=10, num_items=10, interaction_density=.5) model = TensorRec(n_components=10) model.fit(interactions, user_features, item_features, epochs=10) # Ensure that the nodes have been built self.assertIsNotNone(model.tf_prediction_dense)
def setUpClass(cls): cls.n_user_features = 200 cls.n_item_features = 150 cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=15, num_items=30, interaction_density=.5, num_user_features=cls.n_user_features, num_item_features=cls.n_item_features, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5) set_session(None) cls.temp_dir = tempfile.mkdtemp() cls.interactions_path = os.path.join(cls.temp_dir, 'interactions.tfrecord') cls.user_features_path = os.path.join(cls.temp_dir, 'user_features.tfrecord') cls.item_features_path = os.path.join(cls.temp_dir, 'item_features.tfrecord') write_tfrecord_from_sparse_matrix(cls.user_features_path, cls.user_features) write_tfrecord_from_sparse_matrix(cls.item_features_path, cls.item_features) write_tfrecord_from_sparse_matrix(cls.interactions_path, cls.interactions)
def setUpClass(cls): cls.n_users = 15 cls.n_items = 30 cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200, num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5) cls.standard_model = TensorRec( n_components=10, n_tastes=3, user_repr_graph=NormalizedLinearRepresentationGraph(), attention_graph=LinearRepresentationGraph()) cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10) cls.unbiased_model = TensorRec( n_components=10, n_tastes=3, biased=False, user_repr_graph=NormalizedLinearRepresentationGraph(), attention_graph=LinearRepresentationGraph()) cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
def setUpClass(cls): # Blow away an existing session to avoid 'tf_map_func not found' error set_session(None) cls.n_users = 15 cls.n_items = 30 int_ds, uf_ds, if_ds = generate_dummy_data( num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200, num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5 ) cls.temp_dir = tempfile.mkdtemp() cls.interactions = os.path.join(cls.temp_dir, 'interactions.tfrecord') cls.user_features = os.path.join(cls.temp_dir, 'user_features.tfrecord') cls.item_features = os.path.join(cls.temp_dir, 'item_features.tfrecord') write_tfrecord_from_sparse_matrix(cls.interactions, int_ds) write_tfrecord_from_sparse_matrix(cls.user_features, uf_ds) write_tfrecord_from_sparse_matrix(cls.item_features, if_ds) cls.standard_model = TensorRec(n_components=10) cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10) cls.unbiased_model = TensorRec(n_components=10, biased=False) cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
def setUpClass(cls): cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=15, num_items=30, interaction_density=.5, num_user_features=200, num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5 ) cls.standard_model = TensorRec(n_components=10) cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
def setUpClass(cls): cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=10, num_items=12, interaction_density=.5) model = TensorRec(n_components=10) model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10) cls.model = model
def test_predict(self): interactions, user_features, item_features = generate_dummy_data( num_users=10, num_items=20, interaction_density=.5) model = TensorRec(n_components=10) model.fit(interactions, user_features, item_features, epochs=10) predictions = model.predict(user_features=user_features, item_features=item_features) self.assertEqual(predictions.shape, (user_features.shape[0], item_features.shape[0]))
def test_predict(self): interactions, user_features, item_features = generate_dummy_data( num_users=10, num_items=10, interaction_density=.5) model = TensorRec(n_components=10) model.fit(interactions, user_features, item_features, epochs=10) predictions = model.predict(user_ids=[1, 2, 3], item_ids=[4, 5, 6], user_features=user_features, item_features=item_features) self.assertEqual(len(predictions), 3)
def setUpClass(cls): cls.n_users = 15 cls.n_items = 30 cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200, num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5, return_datasets=True ) cls.standard_model = TensorRec(n_components=10) cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10) cls.unbiased_model = TensorRec(n_components=10, biased=False) cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
def test_fit(self, name, user_repr, item_repr, n_user_features, n_item_features, n_components): interactions, user_features, item_features = generate_dummy_data( num_users=15, num_items=30, interaction_density=.5, num_user_features=n_user_features, num_item_features=n_item_features, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5) model = TensorRec(n_components=n_components, user_repr_graph=user_repr(), item_repr_graph=item_repr()) model.fit(interactions, user_features, item_features, epochs=10) # Ensure that the nodes have been built self.assertIsNotNone(model.tf_prediction)
def setUpClass(cls): cls.n_user_features = 200 cls.n_item_features = 150 cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=15, num_items=30, interaction_density=.5, num_user_features=cls.n_user_features, num_item_features=cls.n_item_features, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5 ) set_session(None) cls.temp_dir = tempfile.mkdtemp() cls.interactions_path = os.path.join(cls.temp_dir, 'interactions.tfrecord') cls.user_features_path = os.path.join(cls.temp_dir, 'user_features.tfrecord') cls.item_features_path = os.path.join(cls.temp_dir, 'item_features.tfrecord') write_tfrecord_from_sparse_matrix(cls.user_features_path, cls.user_features) write_tfrecord_from_sparse_matrix(cls.item_features_path, cls.item_features) write_tfrecord_from_sparse_matrix(cls.interactions_path, cls.interactions)
def setUpClass(cls): cls.n_users = 15 cls.n_items = 30 cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200, num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5 ) cls.standard_model = TensorRec(n_components=10, n_tastes=3, user_repr_graph=NormalizedLinearRepresentationGraph()) cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10) cls.unbiased_model = TensorRec(n_components=10, n_tastes=3, biased=False, user_repr_graph=NormalizedLinearRepresentationGraph()) cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
def test_fit_fail_on_bad_dims(self): interactions, user_features, item_features = generate_dummy_data( num_users=15, num_items=30, interaction_density=.5, num_user_features=30, num_item_features=20, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5) with self.assertRaises(ValueError): model = TensorRec( n_components=25, user_repr_graph=FeaturePassThroughRepresentationGraph(), item_repr_graph=LinearRepresentationGraph()) model.fit(interactions, user_features, item_features, epochs=10) with self.assertRaises(ValueError): model = TensorRec( n_components=25, user_repr_graph=LinearRepresentationGraph(), item_repr_graph=FeaturePassThroughRepresentationGraph()) model.fit(interactions, user_features, item_features, epochs=10)
def setUpClass(cls): cls.interactions, cls.user_features, cls.item_features = generate_dummy_data( num_users=10, num_items=20, interaction_density=.5)