def test_ffm_vector_kendall_tau(): order = np.array([1, 2, 3, 4, 5]) order_wrong = np.array([5, 3, 4, 2, 1]) order_inv = np.array([5, 4, 3, 2, 1]) assert kendall_tau(order, order) == 1 assert kendall_tau(order, order_inv) == -1 assert kendall_tau(order, order_wrong) != -1
def test_fm_sgr_ranking(): w0, w, V, y, X = get_test_problem() X_test = X.copy() X_train = X.copy() import itertools pairs = [p for p in itertools.combinations(range(len(y)), 2)] compares = np.zeros((len(pairs), 2), dtype=np.float64) for i, p in enumerate(pairs): if y[p[0]] > y[p[1]]: compares[i, 0] = p[0] compares[i, 1] = p[1] else: compares[i, 0] = p[1] compares[i, 1] = p[0] print(compares) fm = bpr.FMRecommender(n_iter=2000, init_stdev=0.01, l2_reg_w=.5, l2_reg_V=.5, rank=2, step_size=.002, random_state=11) fm.fit(X_train, compares) y_pred = fm.predict(X_test) y_pred = np.argsort(y_pred) print(y) print(y_pred) print(np.argsort(y)) assert utils.kendall_tau(np.argsort(y), y_pred) == 1