예제 #1
0
    def test_alignment_value_with_normalization(self):
        """Test value of kernel target alignment with class label rescaling."""
        X = [0.1, 0.4, 0.0]
        Y = [1, -1, 1]

        alignment = kern.target_alignment(
            X,
            Y,
            lambda x1, x2: _mock_kernel(x1, x2, []),
            rescale_class_labels=True)
        alignment_assume = kern.target_alignment(
            X,
            Y,
            lambda x1, x2: _mock_kernel(x1, x2, []),
            assume_normalized_kernel=True,
            rescale_class_labels=True,
        )

        K1 = np.array([
            [
                1,
                0.2,
                0.2,
            ],
            [0.2, 1, 0.2],
            [0.2, 0.2, 1],
        ])
        _Y = np.array([1 / 2, -1, 1 / 2])
        K2 = np.outer(_Y, _Y)
        expected_alignment = np.trace(np.dot(K1, K2)) / math.sqrt(
            np.trace(np.dot(K1, K1)) * np.trace(np.dot(K2, K2)))

        assert alignment == expected_alignment
        assert alignment == alignment_assume
예제 #2
0
    def test_alignment_value_three(self):
        """Test value of kernel target alignment without class label rescaling
        on more data (3/3)."""
        X = [0.1, 0.4, 0.0]
        Y = [1, -1, 1]

        alignment = kern.target_alignment(
            X,
            Y,
            lambda x1, x2: _mock_kernel(x1, x2, []),
            rescale_class_labels=False)
        alignment_assume = kern.target_alignment(
            X,
            Y,
            lambda x1, x2: _mock_kernel(x1, x2, []),
            assume_normalized_kernel=True,
            rescale_class_labels=False,
        )

        K1 = np.array([
            [
                1,
                0.2,
                0.2,
            ],
            [0.2, 1, 0.2],
            [0.2, 0.2, 1],
        ])
        K2 = np.array([[1, -1, 1], [-1, 1, -1], [1, -1, 1]])
        expected_alignment = np.trace(np.dot(K1, K2)) / math.sqrt(
            np.trace(np.dot(K1, K1)) * np.trace(np.dot(K2, K2)))

        assert alignment == expected_alignment
        assert alignment == alignment_assume
예제 #3
0
    def test_correct_calls(self):
        """Test number and order of calls of the kernel function when computing the
        kernel target alignment, including computation of the diagonal kernel matrix entries."""
        X = [0.1, 0.4]
        Y = [1, -1]

        hist = []

        kern.target_alignment(X, Y, lambda x1, x2: _mock_kernel(x1, x2, hist))

        assert hist == [(0.1, 0.1), (0.1, 0.4), (0.4, 0.4)]
예제 #4
0
    def test_correct_calls_normalized(self):
        """Test number and order of calls of the kernel function when computing the
        kernel target alignment, assuming normalized diagonal kernel matrix entries."""
        X = [0.1, 0.4]
        Y = [1, -1]

        hist = []

        kern.target_alignment(
            X, Y, lambda x1, x2: _mock_kernel(x1, x2, hist), assume_normalized_kernel=True
        )

        assert hist == [(0.1, 0.4)]
예제 #5
0
    def test_alignment_value_other_labels(self):
        """Test value of kernel target alignment without class label rescaling (2/3)."""
        X = [0.1, 0.4]
        Y = [1, 1]
        alignment = kern.target_alignment(
            X, Y, lambda x1, x2: _mock_kernel(x1, x2, []), rescale_class_labels=False
        )
        alignment_assume = kern.target_alignment(
            X,
            Y,
            lambda x1, x2: _mock_kernel(x1, x2, []),
            assume_normalized_kernel=True,
            rescale_class_labels=False,
        )

        assert alignment == 2.4 / (2 * math.sqrt(2 + 2 * 0.2 ** 2))
        assert alignment == alignment_assume