Example #1
0
    def test_jaccard_rows(self):
        assert_almost_equal = np.testing.assert_almost_equal

        model = distance.Jaccard().fit(self.data)
        assert_almost_equal(model.ps, [0.75, 0.5, 0.75])
        assert_almost_equal(
            model(self.data),
            1 - np.array([[1, 2/3, 1/3, 0],
                          [2/3, 1, 2/3, 1/3],
                          [1/3, 2/3, 1, 1/2],
                          [0, 1/3, 1/2, 1]]))

        X = self.data.X
        with self.data.unlocked():
            X[1, 0] = X[2, 0] = X[3, 1] = np.nan
        model = distance.Jaccard().fit(self.data)
        assert_almost_equal(model.ps, np.array([0.5, 2/3, 0.75]))

        # pylint: disable=bad-whitespace
        assert_almost_equal(
            model(self.data),
            1 - np.array([[      1,        2 / 2.5,        1 / 2.5,        2/3 / 3],
                          [2 / 2.5,              1,    1.25 / 2.75,  (1/2+2/3) / 3],
                          [1 / 2.5,    1.25 / 2.75,              1,  0.5 / (2+2/3)],
                          [2/3 / 3,  (1/2+2/3) / 3,  0.5 / (2+2/3),            1]]))
Example #2
0
    def test_jaccard_cols(self):
        assert_almost_equal = np.testing.assert_almost_equal
        model = distance.Jaccard(axis=0).fit(self.data)
        assert_almost_equal(model.ps, [0.75, 0.5, 0.75])
        assert_almost_equal(
            model(self.data),
            1 - np.array([[1, 1 / 4, 1 / 2], [1 / 4, 1, 2 / 3],
                          [1 / 2, 2 / 3, 1]]))

        self.data.X = np.array([[0, 1, 1], [np.nan, np.nan, 1], [np.nan, 0, 1],
                                [1, 1, 0]])
        model = distance.Jaccard(axis=0).fit(self.data)
        assert_almost_equal(model.ps, [0.5, 2 / 3, 0.75])
        assert_almost_equal(
            model(self.data), 1 -
            np.array([[1, 0.4, 0.25], [0.4, 1, 5 / 12], [0.25, 5 / 12, 1]]))
Example #3
0
import Orange.data
import Orange.misc
from Orange.widgets import widget, gui, settings
from Orange import distance

_METRICS = [
    ("Euclidean", distance.Euclidean()),
    ("Manhattan", distance.Manhattan()),
    ("Cosine", distance.Cosine()),
    ("Jaccard", distance.Jaccard()),
    ("Mahalanobis", distance.Mahalanobis()),
    ("Spearman", distance.SpearmanR()),
    ("Spearman absolute", distance.SpearmanRAbsolute()),
    ("Pearson", distance.PearsonR()),
    ("Pearson absolute", distance.PearsonRAbsolute()),
]


class OWDistances(widget.OWWidget):
    name = "Distances"
    description = "Compute a matrix of pairwise distances."
    icon = "icons/Distance.svg"

    inputs = [("Data", Orange.data.Table, "set_data")]
    outputs = [("Distances", Orange.misc.DistMatrix)]

    axis = settings.Setting(0)
    metric_idx = settings.Setting(0)
    autocommit = settings.Setting(False)

    want_main_area = False