📅  最后修改于: 2023-12-03 15:10:13.376000             🧑  作者: Mango
支持向量机 (Support Vector Machine, SVM) 是一种广泛应用于分类和回归分析的机器学习算法。在 SVM 中,核函数 (Kernel Function) 起着重要的作用,能够将非线性问题转化为线性问题,从而更好地进行分类。本文将介绍 SVM 中的主要核函数。
线性核函数是 SVM 最简单的核函数之一,它的形式可以表示为:
$$K(x_1, x_2) = x_1^T x_2$$
其中 $x_1$ 和 $x_2$ 是输入特征向量。线性核函数可以用于处理线性可分的问题,它有一个很好的性质,即计算速度非常快。但它对于非线性可分的问题无能为力。
多项式核函数可以用于处理一些非线性可分的问题,它的形式可以表示为:
$$K(x_1, x_2) = (x_1^T x_2 + c)^d$$
其中 $d$ 是多项式的次数,$c$ 是一个常数。当 $d=1$ 时,多项式核函数等效于线性核函数。当 $d>1$ 时,多项式核函数能够捕获特征之间更复杂的交互关系。
径向基核函数 (Radial Basis Function, RBF) 是 SVM 常用的核函数之一,它的形式可以表示为:
$$K(x_1, x_2) = \exp\left(-\gamma\ \left|x_1 - x_2\right|^2\right)$$
其中 $\gamma$ 是正的常数。RBF 核函数的理论基础是Mercer 定理,它能够将任意特征空间映射为一个无限维的特征空间,从而能够处理非线性可分的问题。
Sigmoid 核函数的形式可以表示为:
$$K(x_1, x_2) = \tanh(\alpha x_1^T x_2 + c)$$
其中 $\alpha$ 和 $c$ 是正的常数。Sigmoid 核函数可以处理一些非线性问题,但它容易出现过拟合的问题。
下面是 Python 中使用 SVM 进行分类的示例代码:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 划分训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
# 使用径向基核函数进行分类
rbf_svc = SVC(kernel='rbf', C=1, gamma=0.1).fit(X_train, y_train)
# 在测试数据上进行预测
print('Accuracy: {:.2f}'.format(rbf_svc.score(X_test, y_test)))
输出:
Accuracy: 0.97
代码中采用了鸢尾花数据集作为样本数据,使用了径向基核函数进行分类,并输出了分类准确率。