ML- 核函数(Kernel) 的 SVM
Why 核函数
目的是为了解决线性不可分问题.
核心思想是升维. 当样本点在低维空间不能很好地分开的时候, 可以考虑将样本通过某种映射(就是左乘一个矩阵) 到高维空间中, 然后在高维空间就容易求解一个平面 将其分开了.
想法是很美滋滋, 但立马就有一个问题,计算量大, 升到几百几千维, 内存怕是受不了. 这就立马联想到PCA 降维. 我在上大学的时候, 做客户细分,和用户画像(ps, 我是市场营销专业嘛), 通常是会用到降维技术, 然后提取主成分或做因子分析, 目的都是为了降维和使数据具有可解释性. 结果核函数却要升维度, 感觉是费力费力搞了半天, 又回去了.
低高维
- 维度的理解应从向量空间去理解(构成该空间的基是几个),要从数学概念上理解. 这个什么"三维空间, 四维时间" 的物理概念是不一样的. 千万不要混淆什么时间,空间, 还有举个栗子, 如果连基本的抽象思维都没有, 那确实有些尴尬
映射(变换)
- 数据的值大小肯定跟原来的是不一样了呀. 在形式上就是左乘一个矩阵, , 可理解矩阵本质是一个特殊的函数, 特殊在于它更像是咱们写代码时 自定义函数 可以完成咱自定义的功能, 如对样本进行 旋转, 拉伸(特征分解), 或拉伸旋转(SVD 分解) 等. 这些内部代码, 就封装在你定义的矩阵中.
PCA降维
- 就是对原输入样本X(矩阵) 左乘一个旋转矩阵P, 是的 PX 的方差尽可能逼近 X, 即丢掉一些方差贡献小的维度,这样就降维了呀( 注: PX 是对原X 进行线性组合了呀(加和数乘) 数据也改变了, 已经不是原来的狗子哦
真的要在高维度中进行计算?
不存在的. 天才的人类哦, 想出了所谓的 kernel trick, 核心思想是大致这样的:
在低维和高维的关系上, 构造出一一个函数, 这个函数满足, 在低维空间下对样本进行计算的结果 跟在高维中计算的结果是相近的, 果然是小小的核(壳), 大大的梦想!
这简直不要太美, 真的是事半功倍呀. 能满足这样的函数, 就是我们平时谈的核函数, 过然很 trick 呀.
进入正题, 根据之前推导出的 SVM 的dual 形式:
我们引入一个函数 k, 用 代替
于是原来的dual变为了:
这就叫做带核函数的SVM, 跟之前的区别在于,样本在做点积的时候经过了一个函数去映射, 当然, 其实对应的a_i 跟原来不带核的也是变化了的.
将原始特征映射到更高维
假设升维的映射是:
则:
这样就升高维度了哦.
Kernel Function
支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间。特征空间的维数可能非常高。如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高维空间中这个内积,即K( x, x′) =<φ( x) ⋅φ( x′) > 。那么支持向量机就不用计算复杂的非线性变换,而由这个函数 K(x, x′) 直接得到非线性变换的内积,使大大简化了计算。这样的函数 K(x, x′) 称为核函数。
Kernel 的 Mercer's Theorem
一个函数(矩阵) 要能成为核函数, 在数学上已经证明, 必须满足 Mercer 定理(后面再证吧)
Mercer 定理
如果函数是 上的映射 , 该函数是核函数,当且仅当, 对于训练样本点 经过映射后的,值构成的矩阵是半正定的.
半正定
对于一个对称矩阵A, , 有很多优良的性质, 嗯,这里先空着吧, 后面专门来整整.
接着上面svm讨论:
需要计算一波称为 Gram 矩阵的东西:
即样本 做了K映射后的值,作为矩阵 G 的第 i 行, 第 j 列元素值 , 必须满足:
- G 是对称矩阵
- G 是 半正定矩阵, 即( )
这样的话, K 就是一个核函数了.
常用的Kernel
就是为了方调 API提高工作效率, 当然是在前人的基础之上的. 不可能每个都去自己造轮子. 我也是, 基本上从不生产代码, 只是API的搬运工.
Polynomial Kernel (多项式核)
- 当 c = 0, d=1 时, 就成为线性核, 即无核SVM
c 用来控制低阶项的长度
case1:
原来样本:
kernel:
其中, 样本的变换为:
从本例,也就是说, 该 kernel 函数实现了等价的高维映射计算 & 包含的升维 是从 2维 -> 3维
高斯核(rbf)
Gaussian Kernel 也被称为 Radial Basis Function Kernel. (咋翻译呢? 嗯, 椭圆图?) 就是在调包时候的参数 'rbf'.
-
可以用样本方差估计总体得出哦
-
时, 值为1
-
随着 距离增加, 值倾向于0 (因为 变大了嘛, 钟图平缓了)
-
使用高斯核之前需要先将特征标准化
case 高斯核svm
假设通过之前svm 的dual形式下训练出的 a 为:
工作的原理就是, 通过新输入的一个样本x', 与其余样本看相似度
的正负号
假设 x' 距离x1 特别近(近1, 远0), 里其他相对远,则:
则x'被分为 正类
Sigmoid Kernel
激活函数核
此时的SVM就相等于一个没有隐含层(Hidden Layer) 的简单神经网络哦
Cosine Similarity Kernel
余弦相似度核
常用于衡量两段文字的相似性. 文本处理嘛 ,首先就是要词向量化. "相似" 的计算, 其实就是计算两个词向量的向量夹角的余弦值, 越靠近,值越接近1嘛.
Chi-squared Kernel
卡方检验核 (哎呀, 是在是不知道怎么翻译, 就是统计里的 卡方检验嘛), 跟上面差不多的
这个在图像处理可能会用, 用于衡量概率分布的相似性,ML我倒是没有用. 卡方检验 嗯, 在我上大三的时候, 就是市场调研的数据分析, 因为要经常做假设检验 会用得多一点, 在分类样本的相关性方面.
卡方检验
统计样本的实际观测值与理论推断值之间的偏离程度.
实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;
二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。
前面推导了这么多, 就是为了得到这么一个东西:
因此, 怎么理论落地, 用写代码的方式求解, 这就有点东西了, 其实, 写为上面的形式, 个人感觉就是为了写代码求解 a 做准备哦.
小结(svm)理论
-
convex (KKT)
-
max margin
-
svm primal
-
svm dual (lagrange)
-
slack svm
-
kernel svm
还有就是求解 smo , 多分类应用这些了.主要理论其实到这里感觉就差不多了.对于来说.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通