Быстрое масштабирование ядра Гаусса по ковариации входных данных

В настоящее время я возюсь с многомерными оценками плотности ядра для оценки функций плотности вероятности (PDF) наборов гидрологических данных с использованием Matlab. Я лучше всего знаком с оценкой плотности ядра с использованием ядер Гаусса, как описано в Sharma (2000 и 2014) (где полосы пропускания ядра устанавливаются с использованием эталонного правила Гаусса (GRR)). GRR записывается следующим образом (Шарма, 2000):

lambda_ref = пропускная способность GRR ядра, n – размер выборки, d – размеры набора данных, который мы используем для  оценка плотности

где lambda_ref = пропускная способность ядра GRR, n — размер выборки, а d — размер набора данных, который мы используем для оценки плотности. Для оценки многомерной плотности нашего набора данных X мы используем следующую формулу (Sharma, 2000):

где lamda - это то же самое, что и lamda_ref выше, S - выборочная ковариация X, а det() означает определитель

где lamda совпадает с lamda_ref выше, S — выборочная ковариация X, а det() — детерминант.

Мой вопрос: я понимаю, что существует много "быстрых" методов для вычисления функции ядра Гаусса, представленной термином exp(), например метод, предложенный здесь (с использованием Matlab): http://mrmartin.net/?p=218. Поскольку я буду работать с наборами данных, размер выборки которых довольно велик (1000-10 000), я ищу быстрый код. Кто-нибудь знает, как я могу написать быстрый код для второго уравнения, который учитывает обратную матрицу выборки ковариации (S ^ -1)?

Я очень признателен за любую помощь, которая может быть предоставлена ​​по этому вопросу. Благодарю вас!

Примечания):

Я понимаю, что существует код Matlab для вычисления второго уравнения, найденный как подфункция в: http://www.mathworks.com/matlabcentral/fileexchange/29039-mutual-information-2-variablle/content/MutualInfo.m. Однако этот код имеет узкое место в том, как он вычисляет матрицу ядра.

Рекомендации:

1 А. Шарма, Вероятностные прогнозы сезонных и межгодовых осадков для улучшения управления водоснабжением: часть 3 — Модель непараметрического вероятностного прогноза, Журнал гидрологии, том 239, выпуски 1–4, 20 декабря 2000 г., страницы 249–258, ISSN 0022–1694, http://dx.doi.org/10.1016.

2 Шарма А. и Р. Мехротра (2014 г.), Информационно-теоретическая альтернатива для моделирования природной системы, используя только данные наблюдений, Water Resour. Рез., 50, 650–660, doi:10.1002/2013WR013845.


person thatWaterGuy    schedule 18.07.2015    source источник
comment
Вы изучали использование fspecial с вводом 'gaussian'?   -  person Justin    schedule 18.07.2015
comment
Спасибо за предложение @jucestain, я раньше не использовал команду «fspecial», но нашел код, который могу изменить для своих целей, и опубликую его как ответ на этот вопрос.   -  person thatWaterGuy    schedule 18.07.2015


Ответы (1)


Я нашел код, который я могу изменить для своих целей. Исходный код указан по следующей ссылке: http://www.kernel-methods.net/matlab/kernels/rbf.m.

Код

function K = rbf(coord,sig)

%function K = rbf(coord,sig)
%
% Computes an rbf kernel matrix from the input coordinates
%
%INPUTS
% coord =  a matrix containing all samples as rows
% sig = sigma, the kernel width; squared distances are divided by
%       squared sig in the exponent
%
%OUTPUTS
% K = the rbf kernel matrix ( = exp(-1/(2*sigma^2)*(coord*coord')^2) )
%
%
% For more info, see www.kernel-methods.net

%
%Author: Tijl De Bie, february 2003. Adapted: october 2004 (for speedup).

n=size(coord,1);
K=coord*coord'/sig^2;
d=diag(K);
K=K-ones(n,1)*d'/2;
K=K-d*ones(1,n)/2;
K=exp(K);

Модифицированный код, включающий масштабирование выборочной ковариации:

xcov = cov(x.'); % sample covariance of the data
invxc = pinv(xcov); % inversion of data sample covariance
coord = x.';
sig = sigma; % kernel bandwidth
n = size(coord,1);
K = coord*invxc*coord'/sig^2;
d = diag(K);
K = K-ones(n,1)*d'/2;
K = K-d*ones(1,n)/2;
K = exp(K); % kernel matrix

Я надеюсь, что это поможет кому-то другому, ищущему ту же проблему.

person thatWaterGuy    schedule 18.07.2015