一文彻底理解机器学习高斯核函数和基函数

本文介绍了高斯核函数的感性理解,以及从线性代数角度求解、推导高斯核函数、基函数的公式,并用pyhon实现了其函数以及图像绘制。

如何理解高斯核函数呢?我建议从用途入手。

作为机器学习中的一种算法,在解决分类问题中,高斯核函数便可发挥用途,当数据集不是线性可分的时候,需要利用核函数将数据集映射到高维空间,使其线性可分。

举个简单的例子:

在一维的线上,类似一条绳子上,有 红 红 蓝 蓝  红 红 串了六个小球,怎样才能用切一刀把原本的绳子切的只剩蓝色小球?

显然一刀是无法完成,我们需要用二维的思想来解决一维的问题,就需要把绳子映射到二维平面。此时再横着切一刀,就可以分类出蓝色小球。这就是高斯核函数解决问题的思想。

深入理解首先看定义

高斯核函数 (Gaussian kernel),也称 径向基 (RBF) 函数,是某种沿径向对称的标量函数,用于 将有限维数据映射到高维空间。形式如下:

  PRML教材公式(6.23)

简而言之x’为核函数中心,||x-x'||为任意一点x到某一中心点x'之间的欧式距离(L2范数),我们选中一个中心点,假设蓝色小球之间的点,就会发现蓝色小球到中心的距离与红色小球到中心的距离是不同的,这可以在一定程度上解释径向基函数构建L2范数的原因。

上面的例子仅仅是一维到二维上的展示,那么样本的特征如果有n个,高斯核函数能不能解决呢?为了进行映射,我们要证明高斯核函数可以在无穷维度上应用:

如果样本点总共有P个,就要进行p次处理,如果x有m个特征,则Φ(x)基函数要展开到m维度。

各基函数形式为如下,参数为L2范数:

由于距离是径向同性的,因此称为径向基函数。由基函数表示的高斯核函数为:

或者写成我们教材定义的形式

画图结果和代码如下:(下图分别为基函数和核函数)


基函数、核函数以及画图的python代码如下

from re import X
import matplotlib.pyplot as plt
import numpy as np
import numpy.linalg as la
def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return (n*factorial(n-1))

def gaussiankernel(sigma,x,x0):
    y=[]
    for i in x:
        y0=np.exp(-(la.norm(i-x0)**2) / (2 * sigma ** 2))
        y.append(y0)
    return y
def gaussianji(sigma,x,n,x_di):
    y=[]
    for i in range(0,n):
        x_new=(x-x_di[i])
        y0=(np.exp(-(x_new**2)))#*((x_new/sigma)**i)*np.sqrt((2**i)/factorial(i))
        y.append(y0)
    y=np.array(y)
    return y

N=11
x_di=np.linspace(-1,1,N)
x=np.linspace(-1,1,N)
j=-10
color=['red', 'black', 'blue', 'brown', 'green','red', 'black', 'blue', 'brown', 'green','red', 'black', 'blue', 'brown', 'green']
plt.subplot(2,3,2)
for k in x:
    y=gaussianji(1,k,N,x_di)
    plt.plot(x_di,y,linewidth=0.5,color=color[abs(j)])
    j=j+1
plt.subplot(2,3,5)
y=gaussiankernel(1,x,0)
plt.plot(x,y,linewidth=0.5,color='blue')

plt.show()

参考资源链接:[Halcon实现图像斯模糊操作实战](https://wenku.csdn.net/doc/ddh7372ija?utm_source=wenku_answer2doc_content) 在Halcon机器视觉软件中,进行图像斯模糊处理是一个常见的图像预处理步骤,它能够平滑图像,减少噪声,并为后续的图像分析工作提供帮助。要使用convol_imagegauss_image函数实现斯模糊,我们首先需要了解这两个函数的基本用法它们之间的区别。 convol_image函数通过卷积运算来应用斯模糊。卷积核定义了模糊效果的强度,而边界处理方式(如'mirrored')则确保了处理过程中边缘的连续性。以下是一个使用convol_image进行斯模糊的示例代码: ```halcon dev_update_off () dev_close_window () read_image(Image, 'C:/Users/Administrator/Desktop/图像.bmp') rgb1_to_gray(Image, GrayImage) convol_image(GrayImage, ConvolvedImage1, 'gauss', 3, 'mirrored', 16) write_image(ConvolvedImage1, 'C:/Users/Administrator/Desktop/京津模糊1.bmp') ... ``` 在这个例子中,我们首先将RGB图像转换为灰度图像,然后应用了一个3x3的卷积核16个权重值来生成不同级别的模糊图像。 gauss_image函数提供了一种更直接的方式来应用斯模糊。通过指定不同的标准差,我们可以得到不同程度的模糊效果。以下是使用gauss_image函数的示例代码: ```halcon dev_update_off () dev_close_window () read_image(Image, 'C:/Users/Administrator/Desktop/图像.bmp') rgb1_to_gray(Image, GrayImage) gauss_image(GrayImage, GaussImage1, 3) write_image(GaussImage1, 'C:/Users/Administrator/Desktop/京津模糊1.bmp') ... ``` 在这个过程中,标准差的值决定了模糊的程度,较小的值保留了更多的细节,而较大的值则产生了更平滑的效果。 总结来说,convol_image函数通过卷积核进行模糊处理,而gauss_image函数直接应用斯核。convol_image在细节上提供了更多的自定义选项,比如卷积核大小权重值,而gauss_image则通过标准差参数来控制模糊程度。两种方法各有优劣,选择哪一种取决于具体的应用场景需求。要深入学习这两种函数在实际图像处理中的应用,可以参考《Halcon实现图像斯模糊操作实战》一文,它将为你提供更详细的实战操作技巧。 参考资源链接:[Halcon实现图像斯模糊操作实战](https://wenku.csdn.net/doc/ddh7372ija?utm_source=wenku_answer2doc_content)
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积极向上的11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值