added more spacing entropy estimators
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
% jackknifed_m_spacing() - get an unbiased estimate of entropy
|
||||
% using jackknifed m-spacing
|
||||
function H = jackknifed_m_spacing(n);
|
||||
|
||||
% the vanilla m-spacing estimator for reference
|
||||
%{
|
||||
sum_logs = 0;
|
||||
for i = 1:n
|
||||
if (i + m) > n
|
||||
sum_logs = sum_logs + log( (n/(2*m)) * (Z(n) - Z(i-m)));
|
||||
elseif (i-m) < 1
|
||||
sum_logs = sum_logs + log( (n/(2*m)) * (Z(i+m) - Z(1)));
|
||||
else
|
||||
sum_logs = sum_logs + log( (n/(2*m)) * (Z(i+m) - Z(i-m)));
|
||||
end
|
||||
end
|
||||
%}
|
||||
|
||||
H = 1;
|
||||
|
||||
% consider leaving out i
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
%\documentclass{amsart}
|
||||
\documentclass{article}
|
||||
\usepackage{amsmath, amsthm}
|
||||
\usepackage[colorlinks=true]{hyperref}
|
||||
@@ -118,7 +117,7 @@
|
||||
\section{Expanded $L_2E$ objective function}
|
||||
|
||||
\begin{displaymath}
|
||||
\frac{1}{\vert Q \vert} \sum_{q \in Q} \left( T_{\log} \left( \frac{1}{N} \sum_{i=1}^n K_h(d(q,x_i)) \right) \right) ^2 - 2 \sum_{i=1}^n \log \hat{f}_{h_E,-i}(x_i) \hat{f}_{h,-i}(x_i) \log \hat{f}_{h,-i}(x_i)
|
||||
\arg \min_h \frac{1}{\vert Q \vert} \sum_{q \in Q} \left( T_{\log} \left( \frac{1}{N} \sum_{i=1}^n K_h(d(q,x_i)) \right) \right) ^2 - 2 \sum_{i=1}^n \log \hat{f}_{h_E,-i}(x_i) \hat{f}_{h,-i}(x_i) \log \hat{f}_{h,-i}(x_i)
|
||||
\end{displaymath}
|
||||
|
||||
where $ T_{\log}(p) = p \log(p) $ and $Q$ is a set of sample points on the range of $X$ (e.g. linear spacing of $M$ points)
|
||||
|
||||
@@ -1,15 +1,45 @@
|
||||
% m_spacing() - estimate entropy using m-spacing
|
||||
function H = m_spacing(X, m);
|
||||
function H = m_spacing(n);
|
||||
|
||||
randn('seed', sum(100*clock));
|
||||
|
||||
X = normrnd(zeros(n, 1), 1);
|
||||
|
||||
m = round(sqrt(n)/2);
|
||||
|
||||
X = X / std(X);
|
||||
|
||||
N = length(X);
|
||||
|
||||
Z = sort(X, 'ascend');
|
||||
|
||||
sum = 0;
|
||||
for i = 1 : (N - m)
|
||||
sum = sum + log2( (N / m) * (Z(i + m) - Z(i)) );
|
||||
sum_logs = 0;
|
||||
%for i = (m+1):(n-m)
|
||||
for i = 1:n
|
||||
if (i + m) > n
|
||||
sum_logs = sum_logs + log( (n/(2*m)) * (Z(n) - Z(i-m)));
|
||||
elseif (i-m) < 1
|
||||
sum_logs = sum_logs + log( (n/(2*m)) * (Z(i+m) - Z(1)));
|
||||
else
|
||||
sum_logs = sum_logs + log( (n/(2*m)) * (Z(i+m) - Z(i-m)));
|
||||
end
|
||||
end
|
||||
|
||||
H = sum / N;
|
||||
H = sum_logs / n;
|
||||
%H = sum_logs / (n-2*m);
|
||||
|
||||
% Vasicek's bias correction
|
||||
|
||||
sum_psi = 0;
|
||||
for i=1:m
|
||||
sum_psi = sum_psi + psi(i+m-1);
|
||||
end
|
||||
|
||||
bias = ...
|
||||
+ log(n) ...
|
||||
- log(2*m) ...
|
||||
+ (1 - 2*m/n) * psi(2*m) ...
|
||||
- psi(n+1) ...
|
||||
+ (2/n) * sum_psi;
|
||||
|
||||
|
||||
|
||||
H = H - bias;
|
||||
@@ -0,0 +1,11 @@
|
||||
function mean_H_minus_opt = test_m_spacing(num_trials, n);
|
||||
|
||||
opt=log(sqrt(2*pi*exp(1)));
|
||||
|
||||
h = zeros(num_trials,1);
|
||||
|
||||
for i=1:num_trials
|
||||
h(i) = m_spacing(n);
|
||||
end
|
||||
|
||||
mean_H_minus_opt = mean(h) - opt;
|
||||
Reference in New Issue
Block a user