在4.1节中,我们分别使用了核函数为径向基函数(Radial Basis Function,RBF)的支持向量机和线性核函数的支持向量机。那么支持向量机究竟有哪些核函数,它们之间有什么区别呢?我们可以在ChatGPT对话框中输入“支持向量机有哪些核函数”,得到如下答复。
ChatGPT支持向量机有很多种核函数,以下是其中一些常用的核函数。
1.线性核函数(Linear Kernel):将数据映射到原始特征空间。
2.多项式核函数(Polynomial Kernel):将数据映射到多项式特征空间。
3.径向基函数核函数(Radial Basis Function Kernel):将数据映射到无穷维的特征空间。
4.Sigmoid核函数(Sigmoid Kernel):将数据映射到一个非线性特征空间。
5.拉普拉斯核函数(Laplacian Kernel):也称为指数核函数,可以将数据映射到无穷维的特征空间。
6.ANOVA核函数:是一种多项式核函数的扩展,可以将数据映射到更高维的特征空间。
7.非参数核函数:如高斯过程核函数、卡方核函数、直方图交叉核函数等,可以灵活地将数据映射到不同的特征空间。
总之,核函数的选择取决于数据的性质和具体的问题。在实际应用中,需要根据具体情况选择合适的核函数。
从ChatGPT的答复中我们可以看到,支持向量机的核函数非常多,仅常用的核函数就有7个。其中线性核函数是将数据映射到原始特征空间,它的工作原理大致可以参考线性模型的原理,下面我们深入了解一下径向基函数核函数和多项式核函数。
前面我们使用了内核为径向基函数核函数的支持向量机模型,这个核函数的主要作用是将数据映射到高维空间中。为了更好地理解这个核函数的工作原理,我们可以在ChatGPT对话框中输入“用Python代码解释径向基函数核函数如何将数据映射到高维空间,不要Markdown格式”,会得到下面的答复。
ChatGPT以下是一个简单的Python代码示例,用来说明径向基函数核函数如何将数据映射到高维空间。
ChatGPT给出的这段代码定义了一个径向基函数核函数rbf_kernel。该函数可以计算两个数据点之间的径向基函数核函数的值,其中gamma是核函数的参数。接下来,代码使用rbf_kernel函数将数据X映射到高维空间,并将映射后的数据phi_X可视化出来。运行这段代码,可以得到如图4-4所示的映射后的数据可视化结果。
图4-4 经过径向基函数核函数映射后的数据
从图4-4中可以看到,通过径向基函数核函数的映射,数据从原来的二维空间被映射到了一个更高维的空间。在这个高维空间中,数据点之间的距离和位置发生了变化,这使我们可以使用线性分类器处理非线性数据。
为了方便展示,笔者添加了改变图像样式的代码。读者如果直接运行ChatGPT给出的代码,得到的图像样式会与图4-4有所不同。
在了解了径向基函数核函数的基本知识后,我们再来学习一下多项式核函数。同样,我们可以向ChatGPT提问“什么是多项式核函数,不要Markdown格式”,得到的答复如下。
ChatGPT多项式核函数是支持向量机(SVM)中常用的一种核函数,它可以将数据映射到高维特征空间,并且可以处理非线性的分类问题。
多项式核函数的形式为
其中,x和y是两个向量,.表示向量点乘,r是一个常数项,d是多项式的阶数。在多项式核函数中,点乘的结果加上一个常数项后,再取其d次幂。
多项式核函数可以将数据从低维空间映射到高维空间。在高维空间中,原本线性不可分的数据可能变成线性可分的。同时,通过合理选择多项式阶数和常数项r,可以使分类器的性能得到优化。
使用多项式核函数的SVM可以通过调整超参数r和d达到不同的效果。例如,增加r的值会使决策函数更加倾向于选择低阶的多项式,从而避免过拟合;增加d的值会使决策函数更加倾向于选择高阶的多项式,从而使模型更加灵活。
总之,多项式核函数是SVM中一种常用的核函数,它可以将数据映射到高维特征空间,并且可以处理非线性的分类问题。
上面的答复从理论的角度给出了多项式核函数的基本原理。接下来我们还是让ChatGPT用代码对多项式核函数进行演示,以使我们能够更直观地理解。在ChatGPT对话框中输入“用Python代码解释多项式核函数如何将数据映射到高维空间”,得到如下答复。
ChatGPT以下是一个用Python实现多项式核函数的示例代码,演示了如何将数据映射到高维空间。
在上面的代码中,我们使用make_classification函数生成了一个二分类问题的数据集。然后,我们使用SVC模型并指定kernel='poly’来使用多项式核函数。其中,degree参数指定了多项式的阶数,coef0参数指定了常数项r。在训练模型后,我们使用contourf函数绘制了决策边界,并使用scatter函数绘制了数据点。
运行上面的代码,可以得到如图4-5所示的结果。
图4-5 使用多项式核函数的支持向量机
多项式核函数可以将数据映射到高维空间,因此在图4-5中,我们可以看到决策边界不是一条直线,而是一条曲线。这说明多项式核函数可以处理非线性的分类问题,并且可以通过调整阶数和常数项达到不同的效果。
为了让大家能够对不同核函数的支持向量机模型进行对比,我们还可以要求ChatGPT“用Python代码以可视化方式演示线性核函数、多项式核函数、径向基函数核函数的区别”,得到的答复如下。
ChatGPT以下是使用Python代码演示的线性核函数、多项式核函数、径向基函数核函数的区别。
在上面的代码中,我们首先使用make_classification函数生成了一个二分类问题的数据集。然后我们分别使用线性核函数、多项式核函数、径向基函数核函数训练了SVC模型,使用contourf函数绘制了决策边界,并使用scatter函数绘制了数据点。
运行代码,得到如图4-6所示的结果。
图4-6 3种不同核函数的决策边界
从图4-6中,我们可以看到3种不同的核函数对应的决策边界和数据点的可视化结果。线性核函数对应的决策边界是一条直线,多项式核函数对应的决策边界是一条曲线,而径向基函数核函数对应的决策边界则像是椭圆形。这说明不同的核函数可以处理不同类型的分类问题,并且可以通过调整参数达到不同的效果。
看到这里,可能有读者会问:既然3种核函数有很大的区别,那在具体的应用场景中该如何选择呢?这个问题我们可以问问ChatGPT。在ChatGPT对话框中输入“如何选择核函数”,会得到如下答复。
ChatGPT选择核函数的方法取决于具体的问题和数据集。以下是一些选择核函数的经验法则。
1.线性核函数适用于线性可分的问题。如果数据集可以通过一条直线分开,那么线性核函数可能是最好的选择。
2.多项式核函数适用于具有非线性边界的问题。如果数据集不能通过一条直线分开,那么可以考虑使用多项式核函数。
3.径向基函数核函数是一种常用的核函数,它适用于大多数分类问题。如果不确定使用哪种核函数,可以尝试径向基函数核函数。
4.如果数据集包含大量特征,可以使用核函数将数据映射到高维空间进行处理。
5.核函数的选择还可以基于交叉验证等技术进行优化。
总的来说,选择合适的核函数是一个需要结合实际情况进行调整的过程,需要根据具体问题和数据集进行综合考虑。
如果要对ChatGPT的答复进行简单概括,我们可以得出一个不太严谨的结论——“遇事不决径向基”。在实际工作中,我们也会优先使用径向基函数核函数的支持向量机。