我的数据由大小为1x5的向量组成,每个向量代表一个pikel:[x,y,r,g,b]
,x
和y
是位置:0 <= x <= M
,{{1} }。 0 <= y <= N
是像素的颜色:r,g,b
。
我想使用多变量Epanechnikov核估计密度估计。我读到基本上有两种方法可以做到:
这两种方法中的每种方法究竟如何处理我的数据?知道Epanechnikov内核为标准化值0 <= r,g,b <= 255
或> 1
得出0,我需要进行标准化。
我用C ++编程。
答案 0 :(得分:2)
- 乘法方法 - 计算每个维度的内核,然后将它们相乘。
- 计算向量的范数并计算该值的内核。
醇>
这两种方法中的每种方法究竟如何处理我的数据?
我会尝试两者并看看哪一个给出了更好的结果(例如哪一个给出了数据的更好的可能性,但注意不要过度拟合数据,例如通过使用cross validation)。
在最基本的形式中,这意味着您拆分样本,使用一个部分来计算密度估计函数(即将核心置于数据点周围)并评估另一部分的可能性(密度估计值的乘积)在用于测试的点处起作用或更好地记录概率乘积的对数)并查看哪一个在“其他”样本上给出了更高概率的乘积(未用于计算估计的那个)。
相同的参数(交叉验证)也适用于内核宽度的选择('缩放因子',使内核变窄或变宽)。
您当然可以手动选择内核宽度来开始。选择内核宽度太小会产生“尖峰”密度估计,选择太大会“清除”数据的重要特征。
我知道Epanechnikov内核的归一化值为0时,我需要进行标准化操作&gt; 1或者&lt; -1
您提到的功能与规范化无关。您应该为内核本身使用规范化表达式,即内核为非零的范围内的积分应为1。对于你的情况1.,如果1D内核被标准化(例如3/4*(1-u^2)
上的[-1..1]
就是这种情况,那么2D产品也将被标准化。对于情况2.必须计算2D积分。
假设内核已标准化,那么您可以按如下方式对密度估计进行标准化:
其中N是数据点的数量。这将被归一化,即p(x,y)
在2D平面上的积分为1。
请注意,您提到的这两种功能形式都不允许任意covariance matrices。解决此问题的一种方法是首先“去相关”数据集(即应用矩阵变换,使数据集的协方差矩阵成为单位矩阵),然后执行密度估计,然后应用逆变换。
此外还有adaptive kernel density estimation等扩展程序,其中内核的宽度随x
和y
的变化而变化,如果在某些时候您想要优化估算等。