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
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
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)]
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)]
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