我试图在MATLAB中实现内核平滑。代码是在Alpaydin的机器学习教科书中实现的。
在第一个for循环中,我计算了这个表达式的k的总和'来自教科书中的第二个公式。问题是我不确定x是什么。据我所知,xt是我的数据点吗?我见过(不幸的是我丢失了链接)x是bin的一半。它是否正确?任何提示都会有所帮助。以防我附上我的部分代码,其中输入'是x。
for i=1:size(data,1)
SumKernel(i,1)=(1/sqrt(2*pi))*exp(-((((input(i,1)-data(i,1))/binsize)^2)/2));
end;
for i=1:size(data,1)
Kernel_histo(i,1) = (1/(binsize*size(data,1)))*SumKernel(i,1)
end;
答案 0 :(得分:0)
xt是您的数据点。
x是你的查询点,即概率点(松散地) 说)您正在尝试使用您的数据点进行估算。注意 x和xt具有相同的尺寸。
有关详细信息,请参阅wiki link。
答案 1 :(得分:0)
x
是您想要估算平滑分布的位置。
符号&进一步解释:
鉴于x1,...xN
是来自某个未知分布的数据样本,您需要估计基础概率密度函数(pdf)。因此,您选择带宽 h
和内核 K
并使用内核估算器 p
( parzen window)估算pdf。
Matlab中的示例:
%% get some samples from a random process
xt = [randn(1000,1)-2;2*randn(3000,1)+7];
%% choose kernel K and bandwith h
K = @(u) exp(-u.^2/2)/sqrt(2*pi);
h = 0.4;
%% pdf estimation (implemented in an easy-to-read way)
x = -10:0.001:30;
N = length(xt);
p = 0*x;
for t = 1:N
p = p + K((x - xt(t))/h);
end
p = p/(N*h);
%% plot result
figure;
hold on;
histBinWidth = 1;
[histY,histX] = hist(xt,-10:histBinWidth:30);
bar(histX,histY/(N*histBinWidth));
plot(x,p,'r');