def test_deduplication_works(): # toy sample (the last two samples are outliers) X = [[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1], [6, 3], [4, -7]] y = [0] * 6 + [1] * 2 X_test = [[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1], [10, 5], [5, -7]] # Test LOF clf = SkopeRules(random_state=rng, max_samples=1., max_depth_duplication=3) clf.fit(X, y) decision_func = clf.decision_function(X_test) rules_vote = clf.rules_vote(X_test) score_top_rules = clf.score_top_rules(X_test) pred = clf.predict(X_test) pred_score_top_rules = clf.predict_top_rules(X_test, 1)
def test_skope_rules_works(): # toy sample (the last two samples are outliers) X = [[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1], [6, 3], [4, -7]] y = [0] * 6 + [1] * 2 X_test = [[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1], [10, 5], [5, -7]] # Test LOF clf = SkopeRules(random_state=rng, max_samples=1.) clf.fit(X, y) decision_func = clf.decision_function(X_test) rules_vote = clf.rules_vote(X_test) score_top_rules = clf.score_top_rules(X_test) pred = clf.predict(X_test) pred_score_top_rules = clf.predict_top_rules(X_test, 1) # assert detect outliers: assert_greater(np.min(decision_func[-2:]), np.max(decision_func[:-2])) assert_greater(np.min(rules_vote[-2:]), np.max(rules_vote[:-2])) assert_greater(np.min(score_top_rules[-2:]), np.max(score_top_rules[:-2])) assert_array_equal(pred, 6 * [0] + 2 * [1]) assert_array_equal(pred_score_top_rules, 6 * [0] + 2 * [1])
############################################################################### # Extracting top rules # .................... # # On the 4 following figures, the predict_top_rules method is used with # several values of n_rules. n_rules = 2 means that the prediction is # done using only the 2 best rules. print('The 4 most precise rules are the following:') for rule in clf.rules_[:4]: print(rule[0]) fig, axes = plt.subplots(2, 2, figsize=(12, 5), sharex=True, sharey=True) for i_ax, ax in enumerate(np.ravel(axes)): Z = clf.predict_top_rules(np.c_[xx.ravel(), yy.ravel()], i_ax + 1) Z = Z.reshape(xx.shape) ax.set_title("Prediction with predict_top_rules, n_rules=" + str(i_ax + 1)) ax.contourf(xx, yy, Z, cmap=plt.cm.Blues) a = ax.scatter(X_inliers[:, 0], X_inliers[:, 1], c='white', s=20, edgecolor='k') b = ax.scatter(X_outliers[:, 0], X_outliers[:, 1], c='red', s=20, edgecolor='k') ax.axis('tight')