SVM——核函数

我们知道,SVM相对感知机而言,它可以解决线性不可分的问题,那么它是怎么解决的呢?它的解决思想很简单,就是对原始数据的维度变换,一般是扩维变换,使得原样本空间中的样本点线性不可分,但是在变维之后的空间中样本点是线性可分的,然后再变换后的高维空间中进行分类。

线性可分时:

42bcba47129a4358b8b0f86d622f8bae.png

 求的最终结果:

fd381d14eb4a4fde8594fe09bc195353.png

 其中表示任选的一个支持向量

当然这是线性可分的情况,那么如果问题本身是线性不可分的情况呢,那就是先扩维后再计算,计算形式是一样的:

48facaab3504408395dbdf8b62ab798f.png 其中192c4afa080e45df979930ec4ef51168.png表示原来的样本扩维后的坐标。

  从中可以看出,不管是不扩维的求解还是扩维的求解,在求解对偶问题的过程中都会用到各样本点的内积的结果,那么这时候问题来了,在很多情况下,扩维可能会吧原数据扩

### 支持向量机中的核函数解释与实现 #### 核函数的作用 支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。当数据不是线性可分时,SVM通过引入核函数将输入空间映射到高维特征空间,在该空间中寻找最优分离超平面[^1]。 常见的核函数包括多项式核、径向基函数(RBF)、sigmoid核以及直方图交集核等。这些核函数能够有效地处理不同类型的非线性关系。 #### 常见的核函数及其定义 1. **线性核函数** 线性核是最简单的核函数形式,适用于数据本身已经接近于线性可分的情况。 \[ K(x_i, x_j) = x_i^\top x_j \] 2. **多项式核函数** 多项式核可以捕捉更高阶的关系,其表达式如下所示: \[ K(x_i, x_j) = (\gamma x_i^\top x_j + r)^d \] 其中 \( \gamma > 0 \),\( d \) 是多项式的次数,而 \( r \) 则是一个常数偏移参数。 3. **径向基函数(RBF)** RBF核是实际应用中最常用的核之一,尤其适合解决复杂的非线性问题。它的数学表示为: \[ K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2) \] 这里 \( \gamma > 0 \) 控制着决策边界的平滑程度。 4. **Sigmoid核函数** Sigmoid核类似于神经网络中的激活函数,具有以下形式: \[ K(x_i, x_j) = \tanh(\gamma x_i^\top x_j + r) \] 它有时被用于构建多层感知器模型。 5. **直方图交集核** 对图像识别等领域特别有用的一种特殊核——直方图交集核,计算两个样本之间的相似度基于它们各自属性值重叠部分的比例: \[ K(x_i, x_j) = \sum_{k=1}^{n}\min(x_{ik}, x_{jk}) \] #### 使用 LIBSVM 实现 SVM 的例子 下面展示如何利用 `LIBSVM` 库来训练带有特定核函数的支持向量机: ```python from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split import svmutil as libsvm # 创建模拟数据集 X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=1) # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 转换为libsvm所需的格式 def convert_to_libsvm_format(data, labels): problem = libsvm.svm_problem(labels, data.tolist()) return problem problem = convert_to_libsvm_format(X_train, y_train) # 设置不同的核选项并训练模型 param_rbf = libsvm.svm_parameter('-t 2 -c 1 -g 0.1') # 使用RBF核 model_rbf = libsvm.svm_train(problem, param_rbf) param_poly = libsvm.svm_parameter('-t 1 -c 1 -g 0.1 -r 0 -d 3') # 使用多项式核 model_poly = libsvm.svm_train(problem, param_poly) ``` 上述代码片段展示了两种常见核的选择方式:RBF 和多项式核,并说明了如何调整相应的超参数以优化性能[^3]。 #### 总结 选择合适的核函数对于提升 SVM 模型的表现至关重要。每种核都有自己的适用场景,因此理解各种核的特点有助于更好地应对具体的应用需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值