支持向量机SVM(4)——核函数

支持向量机SVM——核函数

接前面所讲博客,我们知道了当数据理想线性可分的话我们可以用硬间隔的方式解决,即使出现了噪声,软间隔依旧能够处理,但是这些的前提都是数据是线性可分的,但是在现实任务中,原始样本空间可能并不是线性可分的。
对于这类非线性分类问题的一种解决方法是:首先使用一个变换将原始空间中的数据映射到新空间;然后在新空间里用线性分类学习方法学习分类模型。这也是核函数的做法。

首先回顾一下我们的优化问题:
{ m a x λ    ( − 1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j y i y j x i T x j + ∑ i = 1 N λ i ) s . t . 0 ≤ λ i ≤ C ∑ i = 1 N λ i y i = 0 \begin{cases}max_{\lambda}\;(-\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jy_iy_jx^T_ix_j+\sum_{i=1}^N\lambda_i)\\ s.t. \quad 0\leq\lambda_i\leq C\\\qquad\sum_{i=1}^N\lambda_iy_i=0\end{cases} maxλ(21i=1Nj=1NλiλjyiyjxiTxj+i=1Nλi)s.t.0λiCi=1Nλiyi=0
ϕ ( x ) \phi(x) ϕ(x)表示找到的一种变换(映射),于是我们的问题可以写成:
m a x λ    ( − 1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j y i y j ϕ ( x i ) T ϕ ( x j ) + ∑ i = 1 N λ i ) max_{\lambda}\;(-\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jy_iy_j\phi(x_i)^T\phi(x_j)+\sum_{i=1}^N\lambda_i) maxλ(21i=1Nj=1Nλiλjyiyjϕ(xi)Tϕ(xj)+i=1Nλi)
因为 x i , x j x_i,x_j xixj映射后的样本空间维数可能很高,甚至可能是无穷维,因此直接计算 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T\phi(x_j) ϕ(xi)Tϕ(xj)通常是困难的。为了解决这个问题,我们可以先设:
k ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) k(x_i,x_j)=\phi(x_i)^T\phi(x_j) k(xi,xj)=ϕ(xi)Tϕ(xj)
即我们希望把映射后的特征空间的内积 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T\phi(x_j) ϕ(xi)Tϕ(xj)转换为在原始样本空间中通过函数 k ( x i , x j ) k(x_i,x_j) k(xi,xj)来计算,相当于达到了降维计算的目的。并且 k ( x i , x j ) k(x_i,x_j) k(xi,xj)也称为核函数(kernel function)。

常见的核函数如下:
在这里插入图片描述

### Python 函数解析及相示例 #### 定义函数 在 Python 中,可以通过 `def` 键字来定义一个函数。其基本语法格式如下[^1]: ```python def 函数名([参数列表]): """文档字符串""" 函数体 return 返回值 # 可选 ``` #### 函数的第一类对象特性 Python 的函数具有第一类对象的性质,意味着它可以像其他任何对象一样被操作。具体来说,它能够被赋值给变量、作为参数传递给其他函数、从其他函数返回,甚至可以存储在数据结构中[^2]。 #### 参数错误处理 如果调用函数时未提供足够的位置参数,则会引发 `TypeError` 错误。例如,在下面的例子中,由于缺少三个必需的位置参数 (`b`, `c`, 和 `d`),程序将抛出异常[^3]: ```python def fun(a, b, c, d): return a + b * c ** d try: result = fun(1) # 缺少 b, c, d 参数 except TypeError as e: print(e) ``` 运行上述代码将会输出: `fun() missing 3 required positional arguments: 'b', 'c' and 'd'`. #### Excel 数据处理函数 对于涉及 Excel 文件的操作,通常会使用 Pandas 库中的两个核心函数——`read_excel()` 和 `to_excel()`。以下是这两个函数的基础介绍及其应用场景[^4]: - **`read_excel()`**: 用于从 Excel 文件加载数据到 DataFrame 对象。 - 基本语法: ```python pd.read_excel(io, sheet_name=0, header=0, skiprows=None, skipfooter=0, index_col=None, names=None) ``` - **`to_excel()`**: 将 DataFrame 数据保存至 Excel 文件。 - 基本语法: ```python df.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', columns=None, header=True, index=True) ``` ##### 示例代码:读取并写入 Excel 文件 以下是一个完整的例子,展示如何利用这些函数完成简单的 Excel 数据处理任务: ```python import pandas as pd # 读取 Excel 文件的第一个工作表 df = pd.read_excel('example.xlsx', sheet_name=0) # 处理数据 (假设我们想增加一列计算结果) df['new_column'] = df['column_a'] + df['column_b'] # 将修改后的数据写回新的 Excel 文件 with pd.ExcelWriter('output.xlsx') as writer: df.to_excel(writer, sheet_name='Processed Data') ``` #### 数学逻辑运算实例 考虑一段基于条件判断和循环累加的简单算法实现[^5]: - 当输入整数 n=10 并满足偶数条件时,执行特定表达式 `(n // 2 * n + 5)` 计算最终结果为 55; - 若初始值设为 1,并通过迭代方式逐步更新数值直到达到指定范围上限(如 i 范围为 2 到 5),则可得到一系列中间状态变化轨迹,最后得出总和等于 15。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值