在计算机视觉中,有时也简称为高斯函数。高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:
(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.
(2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.
(3)高斯函数的傅立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数傅里叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.
(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.
(5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.
想写一下我自己对于核函数的理解,虽然并不知道核函数的发明过程,但我想以自己的理解,来重现这个过程。
核函数的应用很广,在SVM上的应用只是冰山一角。即便如此,我还是假设发明人是在解决SVM问题的过程了发明的核函数。
对于一个二分类问题,有一个理想的数据集,假设它是线性可分的,这时直接应用SVM算法即可进行分类。
假设现在的数据集不是线性可分的,如图1所示:
该数据集在二维空间中,每个数据点都可用一个二维向量(x1,x2)'''来表示(3个单引号'''表示转置)。我们可以用一个椭圆形状的超平面在该2维空间中对数据集进行分类,我们写出椭圆的一般方程:
如果我们令:
其中:
你会发现,2维向量x被映射成另一个5维向量z后,分类超平面是一个线性超平面,数据点变得线性可分!也即是下面的变换:
也就是说,数据集在二维空间中线性不可分,若想实现线性可分,须把该数据集映射到一个5维空间中!考虑SVM的的原始优化问题:
(式中的点号代表内积运算)式(5)中的xi对应数据集中的样本点,现在在二维空间中。我们要实现该数据集线性可分,需要把每个点都映射到5维空间中去。也就变成了下式:
根据式(6)可以推知,对于一个线性不可分的数据集,我们只要把xi替换成相应的映射后的点就可以了。所以,原来二维空间中的分类决策函数:
也就变成了5维空间中的分类决策函数:
好了,因为x的映射函数已知,所以我们就能轻松根据上式得到决策超平面了。
看似问题到这里就结束了,但是,考虑到本例中只是实现二维空间中数据的线性可分,就把数据映射到了5维空间。想像如果数据本身的维度就很高,那映射后的空间维度会更高,甚至是无限维!我们该怎么求这个映射函数呢?即便知道了这个映射函数,也没法算啊,因为它是无限维的。所以, 我们应该找一个合适的二元函数,它的输入是原空间的两个向量,它的输出是映射到高维空间的两个向量的内积! 给这个合适的二元函数起个霸气的名字,就叫做 核函数 。
为什么这样定义?对照(8)式中的两个映射函数的内积来思考一下:我们要求出(8)式两个映射函数的内积,所以要构造一个二元函数,它的输入就是原二维空间中的x和xi两个向量,它的输出就是映射到5维空间的两个向量的内积。
这样,我们就避免了求映射函数,只通过一个核函数就可以在低维空间完成高维空间中才能完成的事!
(至此,有些童鞋会想,既然映射后的向量的内积不好求,你咋知道你构造的核函数的值就是映射后的向量的内积?!一会儿会说这个问题。)
先考虑一个简单的例子:
现在有两个二维空间中的数据点x=(x1,x2)'''和y=(y1,y2)''',考虑下面这个二元函数:
把x,y代表(9)式,解之得:
你会发现,最后的函数值竟然等于两个向量p和q的内积,而且两个向量分别是二维空间数据点x和y在三维空间中的映射!想到刚才定义的核函数,我们很容易想到,f(x,y)就是一个核函数。它给出了一个二维的表达式,使得x,y代入即可求值,而不再需要先把x,y映射成3维空间中的向量p,q,再求内积。
这也正是我们定义核函数的目的,即 虽然没有显式地给出原空间中向量的映射函数,但却达到了可以在原空间中计算映射后的向量内积的目的!
回到我们刚才讨论的问题,对于(8)式,假设我不知道这个5维的映射是啥,但我要求映射后向量的内积,所以我要构造一个核函数K(x,xi)来代替映射后向量的内积,即可得到下面的决策分类面:
那么问题来了:
有几个经典的核函数可供选用,如:多项式核函数,高斯核函数等。当然你也可以自己构造核函数,但也不是任意一个函数就可以当做核函数的,需要满足Mercer条件(有兴趣的童鞋可以自己研究一下)。
我没专门研究过,我也不知道自己构造的核函数一定能把数据点在高维空间中线性地分开。但是你可以选择上面提到的常用的核函数,选择合适的参数,就能使得原空间中的数据点在高维空间中变得线性可分。至于为什么,我是这样理解的:
常用的核函数把原空间的数据映射到了高维空间中,使得数据变得“更容易”线性可分,考虑下图所示的例子:
二维空间中的点只能用非线性的超平面才能分开,但把数据映射到高维空间中,就可以用一个线性的平面给分开了。虽然更高维的画面无法脑补,但是可以参考我们在文章开始举的椭圆方程的例子。即 空间的维度越高,数据越容易线性可分。
总结一下:
你好,昨天才回答过这个问题你可以再搜搜的Gauss消去法的分析。
其包括两个过程:
消去过程:把方程组系数矩阵A化为同解的上三角矩阵;
回代过程:按相反的顺序,从xn至x1逐个求解上三角方程组。
%高斯消去法的MATLAB程序
function x=gauss(a,b); %编写高斯消去法函数
%a表示方程组的系数矩阵,b表示方程组的值
%X表示最终的输出结果,即方程组的解
n=length(b); %计算方程组的维数
%下面的程序在不断的消去,直到变成a变成上三角矩阵未知
for k=1:n-1
for i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)a(k,j);
end
b(i)=b(i)-a(i,k)b(k);
end
end
%表示高斯消去法的回带过程
x=zeros(n,1);
x(n)=b(n)/a(n,n);
for k=n-1:-1:1
s=b(k);
for j=k+1:n
s=s-a(k,j)x(j);
end
x(k)=s/a(k,k);
end
实例验证: %调用编好的消去法函数
A=[1,2,3;2,2,3;-1,-3,10];B=[0,3,2];gauss(A,B)
ans =
30000
-15517
00345
A=[1,2,3;2,2,3;-1,-3,10];B=[0,3,2];x=gauss(A,B)
x =
30000
-15517
00345
Ax %反代求解进行比较
ans =
00000
30000
20000N(3,9)指的是均值为3,方差为9(标准差为3)的正态分布(也称高斯分布);
N(3,9)分布可以通过N(0,1)分布(标准正态分布)得到
假设X~N(0,1),则3X+3服从N(3,9)分布
注意3X+3中的两个3的含义不同,第一个3表示标准差为3,第二个3表示均值为3!
Matlab中产生正态分布随机数的函数是normrnd(mu,sigma)在MALTAB使用SVM库的方式为:
SVMstruct = svmtrain(data,groups,'Kernel_Function','rbf');
其中data是样本集,groups是组集,Kernel_Function是核函数的字符串,后面的rbf表示选择的是径向基函数(也可以自定义成其他的)
一般说来你需要收集样本集和所需要分的组,然后选择一个合适的核函数,然后使用svmtrain来训练支持向量机。训练完毕后使用svmclassify分类。
详细信息可以在Matlab command window输入doc SVM查看。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)