Back to Kozachenko-Leonenko estimator
% Description: Testing for differential_entropy_kl
% DocumentationOf: differential_entropy_kl.m
classdef test_differential_entropy_kl < matlab.unittest.TestCase
properties (TestParameter)
d = struct('one', 1, 'two', 2, 'four', 4, 'ten', 10);
k = struct('one', 1, 'two', 2, 'four', 4, 'ten', 10);
end
methods (Test)
function testAgainstNormal(testCase, d, k)
n = 10000;
pointSet = randn(d, n);
de = tim.differential_entropy_kl(...
pointSet, 'k', k);
% The estimator is very accurate for the standard
% normal distribution.
correct = tim.differential_entropy_normal(d);
testCase.verifyEqual(de, correct, 'RelTol', 0.03);
end
function testAgainstUniform(testCase, d, k)
n = 10000;
pointSet = rand(d, n);
de = tim.differential_entropy_kl(...
pointSet, 'k', k);
% The estimator is quite inaccurate for the
% uniform distribution. This is probably because
% the distribution is discontinuous, and thus
% the assumption of a local uniform distribution
% does not hold at the boundaries.
correct = tim.differential_entropy_uniform(d);
testCase.verifyEqual(de, correct, 'AbsTol', 1.5);
end
end
end