深入解析SVM支持向量机:从线性可分到核技巧的完整推导

SVM支持向量机的推导(非常详细) SVM的推导(非常详细) 参考自(https://www.zhihu.com/search?q=svm%E6%8E%A8%E5%AF%BC&utm_content=search_suggestion&type=content) 还有李航的统计学习。 支持向量机有三个部分的内容,线性可分支持向量机,软间隔支持向量机,核函数。 目标函数的得出 首先SVM是一个线性分类器,SVM的目标就是找到最大间隔超平面。 我们定义任意的超平面函数为: 看上面的图,最中间的那条线就是(这里的w*就是上面的 阅读详情

1. 从分类器到最大间隔:SVM的核心思想是什么?

大家好,我是老陈,在AI和算法领域摸爬滚打了十几年。今天我想和你聊聊支持向量机(SVM),这个在机器学习历史上留下浓墨重彩一笔的经典算法。很多朋友一听到SVM,尤其是看到那些复杂的数学公式,头就大了。别怕,今天咱们就抛开那些让人望而生畏的符号,用最直白的话,从最根本的想法出发,把SVM里里外外讲清楚。你会发现,它的核心思想其实非常直观和优美。

想象一个最简单的场景:你的桌子上有一堆红球和一堆蓝球,它们被一条线分开了,红球在线的一边,蓝球在线的另一边。你的任务就是找到这条“分界线”。这个问题太简单了,随手一画就能画出无数条线把这两类球分开。那么,哪一条线才是最好的呢?SVM的回答是:找到那条能让两类球都离它最远的那条线。换句话说,这条线不仅要能分开,还要分得“最开”、最“理直气壮”。这条最优的分界线,就是SVM要找的“最大间隔超平面”。

为什么追求“最大间隔”?这背后有很强的鲁棒性考量。你随手画的那条线,可能刚好擦着某个红球的边过去。这时候,如果这个红球的位置测量有点误差,或者未来新来的一个红球稍微偏了一点,它就可能被误判成蓝球。而SVM找到的那条“最宽”的路,就像在两类数据之间挖了一条最宽的“护城河”,即使数据点有些许扰动或噪声,新来的点也不容易掉到河对面去,模型的泛化能力自然就更强。这个“间隔”(Margin)的宽度,就是SVM优化目标的核心。

那么,这个“间隔”具体怎么定义和计算呢?这就引出了两个关键概念:函数间隔和几何间隔。刚开始理解时,你可能会有点晕,我当初也是。咱们慢慢说。首先,一个平面可以用方程 w·x + b = 0 来表示,其中 w 是法向量,决定了平面的方向,b 是位移项。对于一个数据点 x_i 及其标签 y_i(+1或-1),我们定义 函数间隔 为 γ_i = y_i (w·x_i + b)。它的物理意义很直观:如果分类正确,这个值是正的;值越大,说明点离平面越远,分类确信度越高。但函数间隔有个问题:如果我等比例地放大 w 和 b,比如变成 2w 和 2b,平面本身没变,但函数间隔却翻倍了。这显然不合理,因为我们不希望优化目标随着参数的缩放而改变。

所以我们需要 几何间隔。几何间隔才是点到超平面的真实欧氏距离。它的公式是 γ_i = y_i (w·x_i + b) / ||w||,这里除以了法向量 w 的模长 ||w||,从而消除了缩放的影响。这下就踏实了,无论 w 和 b 怎么缩放,几何间隔保持不变。SVM的终极目标,就是找到一组参数 (w, b),使得所有样本点中,离超平面最近的那个点的几何间隔,达到最大。这些离得最近的点,就是鼎鼎大名的 支持向量,它们就像撑起间隔边界的“柱子”,整个模型的结构只由它们决定,其他离得远的点,挪一挪位置并不影响最终的分界线。

2. 线性可分SVM:完美情况下的数学推导

好了,理解了我们要最大化“最小几何间隔”这个目标后,咱们来把它写成数学形式。这是把直觉变成可计算模型的关键一步,我会尽量把每一步的“为什么”都讲明白。

2.1 目标函数的建立

我们的目标是最大化那个最小的几何间隔,设这个最小几何间隔为 γ。那么对于任何一个样本点 (x_i, y_i),都必须满足其几何间隔至少等于 γ,即: y_i (w·x_i + b) / ||w|| >= γ。

为了方便推导,我们做一个巧妙的简化:缩放 w 和 b。因为几何间隔本身对缩放免疫,我们可以总是将参数缩放,使得离超平面最近的那些点(即支持向量)满足 y_i (w·x_i + b) = 1。注意,这里“1”就是函数间隔的值。做了这个缩放后,对于支持向量,其几何间隔就变成了 1 / ||w||;对于其他点,其函数间隔必然大于等于1。于是,约束条件就简化为了: y_i (w·x_i + b) >= 1, 对于所有 i=1,...,N。

而我们的目标“最大化最小几何间隔”,在缩放后就等价于 最大化 1 / ||w||。这又等价于 最小化 ||w||。为了后续求导方便,我们通常再给它加个平方并乘以1/2,这不影响最优解的位置。于是,经典的SVM原始优化问题就诞生了:

最小化: (1/2) * ||w||^2 约束条件: y_i (w·x_i + b) >= 1, 对于所有 i。

看,目标函数 (1/2)||w||^2 是一个漂亮的凸二次函数,约束是线性不等式。这就构成了一个凸二次规划问题,在数学上性质非常好,能保证找到的解是全局最优解。我第一次推到这里时,不禁感叹它的简洁和优雅:用最少的假设(线性可分),建立了一个最健壮(最大间隔)的模型。

2.2 拉格朗日对偶与KKT条件

目标函数和约束都有了,怎么求解这个带约束的优化问题呢?这里就要请出拉格朗日乘子法了。对于每一个不等式约束 y_i (w·x_i + b) - 1 >= 0,我们引入一个非负的拉格朗日乘子 α_i >= 0。然后构造拉格朗日函数: L(w, b, α) = (1/2)||w||^2 - Σ_{i=1}^{N} α_i [y_i (w·x_i + b) - 1]。

原始问题是求 min_{w,b} max_{α>=0} L(w,b,α)。根据优化理论,在满足一定条件(即Slater条件,对于SVM这个凸问题通常是满足的)时,这个问题等价于它的对偶问题:max_{α>=0} min_{w,b} L(w,b,α)。为什么要费劲转换成对偶问题?两个主要原因:1) 对偶问题往往更容易求解,约束更简单;2) 对偶形式自然地引出了核函数,这是SVM处理非线性问题的关键。

我们先对内层的 min_{w,b} 求解。分别令 L 对 w 和 b 的偏导数为零: ∂L/∂w = w - Σ α_i y_i x_i = 0 => w = Σ α_i y_i x_i ∂L/∂b = - Σ α_i y_i = 0 => Σ α_i y_i = 0

把这两个关系式代回拉格朗日函数 L,经过一番化简(这个过程需要一点耐心做代数运算),神奇的事情发生了:原始的 w 和 b 被消掉了,我们得到了一个只关于拉格朗日乘子 α 的函数,这就是对偶问题:

最大化: Σ_{i=1}^{N} α_i - (1/2) Σ_{i=1}^{N} Σ_{j=1}^{N} α_i α_j y_i y_j (x_i · x_j) 约束条件: Σ_{i=1}^{N} α_i y_i = 0, 且 α_i >= 0。

求解这个对偶问题得到最优的 α* 后,我们就可以根据 w = Σ α_i y_i x_i 恢复出最优的权重向量。注意看这个式子,w 是所有样本点的线性组合!但组合系数 α_i 只在支持向量处才大于零,非支持向量的 α_i 均为零。这正是SVM“稀疏性”的数学体现:最终模型只依赖于少数支持向量。

那么 b 怎么求呢?这就要用到KKT条件中的互补松弛条件:对于任何一个样本点,要么 α_i = 0,要么它必须恰好满足 y_i (w·x_i + b) = 1(即它是支持向量)。因此,我们可以任意选取一个 α_i > 0 的支持向量,代入这个等式,即可解出 b。为了数值稳定,实践中通常对所有支持向量计算出的 b 取平均值。

注意:KKT条件在这里扮演了关键角色,它不仅是推导对偶问题的桥梁,也给出了最优解必须满足的条件(如互补松弛性),是我们理解支持向量和模型稀疏性的理论基础。

3. 处理现实不完美:软间隔支持向量机

刚才我们讨论的都是“线性可分”的理想国。但现实中,数据哪有那么听话?更多的情况是,两类数据混杂在一起,你中有我,我中有你,或者存在一些噪声点、离群点。如果还硬要用一条直线(或超平面)完美分开所有点,要么根本做不到,要么为了迁就少数“捣乱”的点,把间隔变得非常窄,这就失去了泛化能力,也就是过拟合了。

怎么办呢?SVM的设计者们非常聪明,引入了 软间隔 的概念。核心思想就一句话:允许一些点犯点小错误。具体来说,我们不再要求所有点都严格满足 y_i (w·x_i + b) >= 1,而是允许它们“犯规”一点,但这个犯规要受到惩罚。

3.1 引入松弛变量

我们为每一个样本点 i 引入一个 松弛变量 ξ_i >= 0。原来的约束就放松为: y_i (w·x_i + b) >= 1 - ξ_i。 这个 ξ_i 可以理解为第 i 个样本违反间隔约束的程度。如果 ξ_i = 0,说明该点被正确分类且位于间隔边界之外(或之上);如果 0 < ξ_i <= 1,说明该点被正确分类,但闯入了间隔带内部;如果 ξ_i > 1,那就意味着这个点被错误分类了。

当然,不能无限制地允许犯规。我们要在目标函数中对总的“犯规量”进行惩罚。于是,新的优化目标变成了: 最小化: (1/2)||w||^2 + C * Σ_{i=1}^{N} ξ_i 约束条件: y_i (w·x_i + b) >= 1 - ξ_i, 且 ξ_i >= 0。

这里,惩罚参数C 闪亮登场。它是一个大于0的超参数,由我们事先设定。C 的作用是控制“最大化间隔”和“减少分类错误”之间的权衡:

  • C很大时:意味着对分类错误的惩罚非常严厉,模型会倾向于尽可能减少 ξ_i,也就是尽可能去分类所有样本,哪怕因此导致间隔很窄(||w|| 很大)。这容易导致过拟合,模型会变得很复杂去迁就噪声点。
  • C很小时:意味着对错误的容忍度较高,模型会更看重“间隔”的宽度,允许一些点被误分类或落入间隔内。这倾向于选择一个更简单的模型,可能欠拟合,但泛化能力可能更好。

你可以把 (1/2)||w||^2 看作是对模型复杂度的控制(正则化项),把 CΣξ_i 看作是对训练误差的度量。SVM的软间隔形式,本质上就是在实现 结构风险最小化 框架。

3.2 软间隔的对偶问题与支持向量

同样地,我们对软间隔问题构造拉格朗日函数,并转化为对偶问题。推导过程与线性可分情况类似,只是多了对 ξ_i 的约束和乘子。最终得到的对偶问题形式非常相似:

最大化: Σ_{i=1}^{N} α_i - (1/2) Σ_{i=1}^{N} Σ_{j=1}^{N} α_i α_j y_i y_j (x_i · x_j) 约束条件: Σ_{i=1}^{N} α_i y_i = 0, 且 0 <= α_i <= C。

看到了吗?唯一的区别就是,拉格朗日乘子 α_i 多了一个上界 C。这个上界约束至关重要。此时,支持向量的定义也丰富了:

  1. α_i = 0:对应的样本点对模型没有贡献,是容易被分类的点。
  2. 0 < α_i < C:对应的样本点恰好在间隔边界上 (y_i (w·x_i + b) = 1),是标准的支持向量。
  3. α_i = C:对应的样本点就是那些“犯规”的点。它们可能位于间隔内部,甚至可能被误分类。它们也是支持向量,但受到了最大惩罚。

所以,在软间隔SVM中,支持向量包括了所有 α_i > 0 的点,它们要么在边界上,要么是犯规者。模型依然保持稀疏性。调整 C 的值,你可以直观地看到决策边界和支持向量的变化,我强烈建议你用 sklearn 的SVM可视化工具玩一玩,感受一下 C 的影响力。

4. 升维打击:核技巧与非线性SVM

前面说的都是线性情况,但世界是非线性的。比如一个经典的“异或”问题,二维平面上的点根本无法用一条直线分开。SVM如何应对?它的策略非常具有想象力:如果低维空间里线性不可分,那我就把数据映射到高维空间,在高维空间里寻找线性超平面。

4.1 核函数的思想与魔力

假设我们有一个从原始空间(输入空间)到某个高维特征空间的映射函数 φ(x)。我们把数据 x 映射为 φ(x),然后在特征空间里应用线性SVM。此时,对偶问题中的内积 x_i · x_j 就变成了 φ(x_i) · φ(x_j)。

听起来很完美,但有个致命问题:φ(x) 的维度可能非常高,甚至是无穷维(比如高斯核对应的特征空间)。直接计算 φ(x_i) · φ(x_j) 是极其困难甚至不可能的。核技巧的精髓就在于:我们不需要显式地知道映射 φ 是什么,也不需要在高维空间里直接计算内积,而是找到一个函数 K,使得在原始空间就能计算出高维空间的内积结果。即: K(x_i, x_j) = φ(x_i) · φ(x_j)。 这个函数 K 就是 核函数。

这样一来,非线性SVM的对偶问题就变成了: 最大化: Σ α_i - (1/2) Σ Σ α_i α_j y_i y_j K(x_i, x_j) 决策函数也变成了:f(x) = sign( Σ α_i y_i K(x_i, x) + b )。

你看,整个求解和预测过程,我们只需要和核函数 K(., .) 打交道,完全绕开了高维特征空间的具体形式。这就像拥有了“升维”的能力,却不用支付“高维计算”的昂贵代价。

4.2 常用核函数与选择

核函数不是随便定义的,它需要满足Mercer定理(即对应某个特征空间的内积)。常用的核函数有这么几种,我结合自己的经验说说它们的脾气:

  1. 线性核:K(x_i, x_j) = x_i · x_j。这就是我们最开始讨论的线性SVM。它参数少、速度快,是首选。当特征维度已经很高,或者数据量很大时,线性核往往效果不错,而且可解释性强。
  2. 多项式核:K(x_i, x_j) = (γ * x_i · x_j + r)^d。其中 d 是多项式次数。它能捕捉特征间的高阶交互关系。但 d 太大容易过拟合,计算复杂度也增长快。我一般从 d=2 或 3 开始尝试。
  3. 径向基函数核:也叫高斯核 K(x_i, x_j) = exp(-γ * ||x_i - x_j||^2)。这是最常用、最强大的核函数之一。它隐含地将数据映射到了无穷维空间。参数 γ 控制着高斯函数的宽度:γ 越大,高斯钟形越窄,模型越复杂,容易过拟合;γ 越小,模型越平滑,容易欠拟合。高斯核非常灵活,但对参数和特征缩放比较敏感。

选择核函数有点像选工具。线性核是“瑞士军刀”,简单可靠;多项式核是“专用扳手”,适合特定结构;高斯核是“万能工具箱”,能力最强但也最需要调校。我的经验是,先尝试线性核,如果效果不行,再上高斯核。使用高斯核时,务必对数据进行标准化,否则不同尺度的特征会严重影响 γ 参数的效果。

4.3 一个核函数的计算示例

为了让你更具体地感受核函数的“魔力”,我们看个例子。假设我们用二次多项式核 K(x, z) = (x·z)^2,原始空间是二维 x=(x1, x2), z=(z1, z2)。 直接计算核函数:(x1*z1 + x2*z2)^2 = x1^2*z1^2 + 2*x1*z1*x2*z2 + x2^2*z2^2。 现在,如果我们设计一个映射 φ(x) = (x1^2, √2 * x1*x2, x2^2),那么计算 φ(x)·φ(z) 正好等于 x1^2*z1^2 + 2*x1*z1*x2*z2 + x2^2*z2^2。看到了吗?我们通过一个简单的平方计算(在二维),等价于在一个三维空间里做了复杂的内积。核函数帮我们省去了显式映射和计算高维内积的步骤。

5. 实战:用Python从头构建与调优SVM

理论说了这么多,不动手试试总是差点意思。咱们用Python和 sklearn 来走一遍完整的流程,重点看看关键参数怎么调。

5.1 数据准备与线性SVM

我们先从一个简单的线性可分数据集开始,比如用 make_classification 生成一些数据。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score
from sklearn.preprocessing import StandardScaler

# 生成线性可分数据
X, y = make_classification(n_samples=100, n_features=2, n_informative=2,
                           n_redundant=0, n_clusters_per_class=1,
                           flip_y=0, random_state=42)
y = np.where(y==0, -1, 1) # 将标签转为SVM常用的-1和1

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建线性SVM模型,C=1.0
linear_svm = SVC(kernel='linear', C=1.0)
linear_svm.fit(X_train, y_train)

# 评估
y_pred = linear_svm.predict(X_test)
print(f"线性SVM准确率:{accuracy_score(y_test, y_pred):.4f}")
print(classification_report(y_test, y_pred))

# 获取支持向量
print(f"支持向量的数量:{len(linear_svm.support_vectors_)}")

运行这段代码,你会得到一个线性分类器。你可以画出决策边界和支持向量,直观感受一下。C 参数在这里可以调整,试试把它改成很大的值(如1000)和很小的值(如0.01),观察决策边界和支持向量的变化。你会发现,C 很大时,支持向量可能变多,边界更努力地贴合所有训练点;C 很小时,间隔变宽,支持向量可能变少,模型更“宽容”。

5.2 非线性SVM与核函数实践

现在我们处理一个非线性问题,比如月亮形数据集。

from sklearn.datasets import make_moons
from sklearn.pipeline import Pipeline

# 生成非线性数据
X_moon, y_moon = make_moons(n_samples=100, noise=0.15, random_state=42)
y_moon = np.where(y_moon==0, -1, 1)
X_train_m, X_test_m, y_train_m, y_test_m = train_test_split(X_moon, y_moon, test_size=0.3, random_state=42)

# 标准化对于高斯核SVM非常重要!
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train_m)
X_test_scaled = scaler.transform(X_test_m)

# 尝试不同的核函数和参数
kernels = ['linear', 'poly', 'rbf']
params = [{'C': 1}, {'C': 1, 'degree': 3}, {'C': 1, 'gamma': 'scale'}]

for kernel, param in zip(kernels, params):
    svm_model = SVC(kernel=kernel, **param, random_state=42)
    svm_model.fit(X_train_scaled, y_train_m)
    acc = svm_model.score(X_test_scaled, y_test_m)
    print(f"核函数 '{kernel}' 的测试准确率:{acc:.4f}")
    print(f"  支持向量数:{len(svm_model.support_vectors_)}")

你会看到,线性核在这里可能表现不佳,而多项式核和高斯核(RBF)能很好地捕捉非线性边界。特别是高斯核,通常效果最好。

5.3 关键参数调优指南

SVM,尤其是RBF核的SVM,调参是关键。两个核心参数是 C 和 gamma。

  • C:惩罚系数。如前所述,控制间隔宽度与分类错误的权衡。常用对数尺度搜索,如 [0.001, 0.01, 0.1, 1, 10, 100, 1000]。
  • gamma:RBF核的参数。定义了单个训练样本的影响范围。gamma 小,影响范围大,决策边界平滑;gamma 大,影响范围小,模型更复杂,可能过拟合。同样常用对数尺度搜索,如 [0.001, 0.01, 0.1, 1, 10, 100]。sklearn 中 gamma='scale' 是默认好选择,它使用 1 / (n_features * X.var()) 作为值。

我常用的调参策略是使用 GridSearchCV 进行网格搜索:

from sklearn.model_selection import GridSearchCV

param_grid = {
    'C': [0.1, 1, 10, 100],
    'gamma': ['scale', 'auto', 0.001, 0.01, 0.1, 1],
    'kernel': ['rbf'] # 也可以加入 'poly'
}

svc = SVC()
grid_search = GridSearchCV(svc, param_grid, cv=5, scoring='accuracy', n_jobs=-1, verbose=1)
grid_search.fit(X_train_scaled, y_train_m)

print(f"最佳参数:{grid_search.best_params_}")
print(f"最佳交叉验证分数:{grid_search.best_score_:.4f}")
best_model = grid_search.best_estimator_
test_acc = best_model.score(X_test_scaled, y_test_m)
print(f"测试集准确率:{test_acc:.4f}")

这个过程可能会比较耗时,但找到合适的 (C, gamma) 组合对模型性能提升巨大。记住,数据标准化是使用RBF核SVM前的必须步骤,否则不同特征的大小会严重影响 gamma 的意义。

6. SVM的优缺点与实战心得

用了这么多年SVM,我对它的脾气算是比较了解了。最后聊聊它的长处、短处,以及一些实战中踩过的坑。

优点非常突出:

  1. 理论基础扎实:基于结构风险最小化和统计学习理论,有很强的数学背景,不像一些黑箱模型。
  2. 泛化能力强:通过最大化间隔,本质上是在控制模型复杂度,不容易过拟合,尤其在中小规模数据集上表现稳健。
  3. 稀疏解:最终模型只由支持向量决定,预测时计算快,存储开销小。这对于部署到资源受限的环境很有优势。
  4. 核技巧威力大:通过核函数隐式处理非线性,思路巧妙,效果也好。高斯核在实际中解决非线性问题非常给力。

缺点也得心里有数:

  1. 对大规模训练样本效率低:当样本量巨大(比如几十万、上百万)时,训练二次规划问题会非常慢,内存消耗也大。相比之下,随机森林、梯度提升树甚至线性模型+随机梯度下降可能更高效。
  2. 对缺失数据和参数敏感:SVM本身对缺失数据不太友好。另外,RBF核的性能非常依赖于 C 和 gamma 的选择,调参是门艺术也是体力活。
  3. 概率输出不直接:SVM输出的是决策函数值(到超平面的符号距离),而不是天然的概率。虽然可以通过 Platt Scaling(如 sklearn 的 SVC 设置 probability=True)来校准得到概率,但这增加了计算量且是事后校准。
  4. 可解释性一般:对于线性核,我们可以通过权重向量 w 来解释特征重要性。但对于非线性核(如RBF),模型成了一个复杂的函数组合,可解释性就变得很差,我们很难说清为什么一个样本被这样分类。

我的几点实战心得:

  • 数据预处理是关键:SVM,特别是基于RBF核的,对特征尺度非常敏感。务必进行标准化(StandardScaler)或归一化。我见过太多因为没做标准化而效果奇差的案例。
  • 先从线性核开始:不要一上来就用RBF核。先用线性核跑一个baseline,如果效果接近或已经不错,就优先用线性模型,因为它更快、更简单、更容易解释。
  • 理解支持向量:训练完成后,看看支持向量是哪些点。它们往往是边界附近最难分的点,或者是噪声点。如果支持向量数量几乎等于训练样本数,那很可能 C 太大了(过拟合),或者 gamma 太大了(RBF核过拟合)。
  • 类别不平衡问题:如果正负样本数量悬殊,SVM可能会偏向多数类。sklearn 的 SVC 有 class_weight 参数,可以设置为 'balanced',它会自动根据类别频率调整 C 的权重,这个功能很实用。
  • 与树模型对比:对于表格数据,我常常会在SVM和梯度提升树(如XGBoost、LightGBM)之间做比较。SVM在小规模、清晰的数据集上可能更有优势,而树模型在大规模、特征关系复杂的数据上往往表现更鲁棒,且训练更快。

SVM就像一把精密的瑞士军刀,在合适的场景下(中小规模、特征维度不太高、需要强泛化能力),它依然锋利无比。理解其从线性可分到软间隔,再到核技巧的完整推导,不仅能帮你更好地使用它,更能让你领略到机器学习中优化与泛化思想的精髓。希望这篇长文能帮你拨开SVM的迷雾,在实际项目中多一件得心应手的武器。

支持向量机(SVM) 综述支持向量机(Support Vector Machines), 是一种二分类模型.也可以通过技巧,转化为多分类模型.比如说libSVM中就使用了one-against-one的策略使得SVM能够扩展到多分类.而libLiner则使用了one-against-rest的策略来扩展SVM. 支持向量机的基本模型: 定义在特征空间上的间隔最大化的线性分类器(间隔最大化也使得SVM区别于感知机 阅读详情

相关推荐

【机器学习基础详解01】——支持向量机(SVM)算法原理与实践

那么的形式是怎么样的呢?这一小节研究的形式。对任意两个向量和,有,那么仍然能够通过一些技巧获得测试样本X的类别信息,从而完成对测试样本类别的预测。定义为核函数,是实数。下面举例说明核函数K以及低维到高维的映射的关系。例子1:已知求假设是一个将二维向量映射到三维向量映射,如下所示:我们来看下核函数的形式,假设有两个二维向量:,根据前边得:,那么有如下式子:上述就是一个已知求的例子。例子2:已知求假设X是一个二维向量,。有如下式子:(为什么这么表示呢,这是一种。

zhejie666的博客 2113

SVM支持向量机+实例展示

一、SVM简介 SVM定义:支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独...

Snippers的博客 3万+

支持向量机SVM算法原理

SVM 的英文叫 Support Vector Machine,中文名为支持向量机。它是常见的一种分类方法,在机器学习中,SVM 是有监督的学习模型。 什么是有监督的学习模型呢?它指的是我们需要事先对数据打上分类标签,这样机器就知道这个数据属于哪个分类。同样无监督学习,就是数据没有被打上分类标签,这可能是因为我们不具备先验的知识,或者打标签的成本很高。所以我们需要机器代我们部分完成这个工作,比...

qiu_zhi_liao的博客 1767

什么是支持向量机【SVM,详细理论推导】

支持向量机(support vector machines, SVM)是一种二分类模型。本文详细介绍线性可分支持向量机和线性支持向量机的原理、算法推导,同时有不少图帮助理解。

v20000727的博客 1万+

机器学习算法实战系列:支持向量机(SVM)完全指南

掌握SVM不仅让你拥有一个强大的分类工具,更能深入理解机器学习的数学之美!支持向量机将优化理论、核方法和统计学习完美结合,是机器学习发展史上的里程碑。尝试在不同数据集上应用不同核函数深入研究SMO优化算法探索SVM在自然语言处理中的应用在下一篇文章中,我们将深入神经网络的世界,从感知机到深度学习,揭示AI革命背后的核心算法!

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 1362

详解支持向量机SVM

详解支持向量机SVM详解支持向量机 SVM支持向量机预备知识 深入理解超平面间隔最大化 间隔最大化最优值求解方法 拉格朗日乘数法 拉格朗日乘数法与KKT条件 拉格朗日对偶性间隔最大化最优值求解

Avery123123的博客 1054

支持向量机(SVM)—— 详细推导及案例应用可视化

支持向量机

qq_51471471的博客 5867

产品必备技能(十):如何绘制原型图?先要绘制页面流程图+页面原型图!附实操原型图、流程图实例(抖音)

文章目录目标题目实操步骤模板实操【抖音】APP的视频发布功能页面流程绘制页面流程图合格标准绘制页面原型图合格标准 目标 新入行的产品经理都对原型抱有向往的心境,但是有经验的产品经理不会一上来就画原型,而是先画页面流程再来画原型。通过学习,你将学会如何用页面流程图规划用户行为路径、如何借助原型识别问题、减少风险、有效沟通。 题目 任意选择一款你喜欢的产品,体验某个功能,下载并梳理此功能至少5个以上的页面流程跳转点(后面会解释),还原2 - 3个主要界面的低保真原型图。 实操步骤 可使用手绘以及Process

汪雯琦的博客 4842

SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】

SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】 1.SVM简介2. SVM 逻辑推导2.1 Part1 化简限制条件2.2 Part2 SVM拉格朗日乘子法求解2.3 Part3 求解超平面3.核函数4. 软间隔支持向量机5. 支持向量回归 SVR6.python实现支持向量机6.1 方法详解6.2 案例展示...

侯小啾技术博客 4594

M2DGR数据集在一些SLAM框架上的配置与运行:ORB-SLAM系列、VINS-Mono、LOAM系列、FAST-LIO系列、hdl_graph_slam

为了说明以上这些SLAM框架的测试与数据集适配,以M2DGR数据集为例进行各自的配置与运行,方便我以后适配自己的数据集,运行的SLAM框架包括:ORB-SLAM2、ORB-SLAM3、VINS-Mono、A-LOAM、LeGO-LOAM、LIO-SAM、LVI-SAM、FAST-LIO2、FAST-LIVO、Faster-LIO、hdl_graph_slam。实验基于Ubuntu20.04,其中ORB、VINS-Mono、和LOAM系列的安装参考我以前的博客,有详细的安装方法,其他的框架在后面会简单介绍一下

zardforever123的博客 1万+

ExcelVBA批量添加PDF文件

如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也可以打开N列的文件。 图1 根据B列的图号在N列嵌入对应的PDF文件 图2 PDF文件 图3 文件格式 Sub 导入文件() Ap...

qq389445046的博客 5575

svm原理详细推导

笔者在查阅了大量资料和阅读大佬的讲解之后,终于对svm有了比较深一点的认识,先将理解的推导过程分享如下: 本文主要从如下五个方面进行介绍:基本推导,松弛因子,核函数,SMO算法,小结五个方面以%%为分隔,同时有些地方需要解释或者注意一下即在画有---------符号的部分内。 本文主要介绍的是理论,并没有涉及到代码,关于代码的具体实现,可以在阅读完本文,掌握了SVM算法的核心内容后去看一下笔者...

爱吃火锅的博客 1万+

LSTM+Transformer混合模型时间序列预测实战教学

LSTM+Transformer混合模型时间序列预测实战教学 毕业设计

8218

机器学习之支持向量机之线性可分型原理介绍及代码实现(SVM)

支持向量机(Sport Vector Machine,SVM)是经典的机器学习方法之一,其核心思想主要是找到一个超平面,使得它能够尽可能多地将两类数据点正确分开,同时使分开地两类数据点距离分类平面最远。 如图 ...

学习笔记 5218

危废焚烧优化控制系统设计与实现:基于数据驱动的控制参数预测

本文提出了一种基于数据驱动的危险废物焚烧过程优化控制方法。系统利用历史运行数据和实时监测数据,通过深度学习模型预测关键控制参数,实现焚烧过程的智能化控制。系统采用Python开发,结合TensorFlow/PyTorch框架,构建了完整的数据采集、预处理、特征工程、模型训练和实时预测闭环系统。该系统能够处理多变量非线性关系,适应工况变化,从历史数据中学习最优控制策略,相比传统PID控制方法具有显著优势。论文详细介绍了系统架构、算法设计和实现细节,为危废焚烧过程的优化控制提供了有效解决方案。

huanghm88的专栏 206

14、多层螺旋 CT 技术详解

本文详细解析了多层螺旋CT(MSCT)技术的原理与应用,涵盖其相对于单层螺旋CT的优势,包括图像采集速度提升、分辨率提高和噪声降低。文章深入探讨了扫描仪的几何结构、离散投影模型以及关键参数如切片宽度和螺距的影响,并重点介绍了z-滤波重建算法及其离散实现流程。通过流程图和公式推导,系统梳理了从投影获取到图像重建的全过程。同时分析了MSCT在临床中的实际应用案例及未来发展趋势,如更高分辨率、更低辐射剂量和智能化算法等方向,全面展示了MSCT在现代医学影像中的核心价值。

f0g1h2的博客 194

第9篇:支持向量机(SVM):从线性可分到核技巧

摘要:本文系统阐述了支持向量机(SVM)的核心原理与应用。从最大间隔分类思想出发,详细推导了硬间隔/软间隔SVM的优化问题及对偶形式,重点解析了核技巧处理非线性分类的方法。通过Python代码演示了线性SVM的简化实现,并基于Scikit-learn展示了RBF核SVM的实际应用。文章还涵盖SVM回归、参数调优等实用内容,为理解这一经典机器学习算法提供了完整框架。

to do , to be . 778

动网格-网格重构之铺层(三)

运动区域可以是边界区域 (Boundary Zone),也可以是单元区域 ( Cell Zone)。指定了体网格再生方法后,FLUENT自动地根据运动区域(dynamic zones)的运动来调整内部节点以再生体网格。必须保留至少一层网格。(4)如果边面的法向和运动方向偏角较大,生成的网格扭斜度会比较大铺层算法不适用于边界形状变化较大的情况。(1)体网格再生方法的选择(Smoothing,Layering,Remeshing);(2)适用网格种类:四边形、六面体、三棱柱(网格的分布要服从一定的规则)。

weixin_44386973的博客 2095

支持向量机(SVM):从线性可分到核技巧——原理推导与实战解析

SVM是一种基于结构风险最小化的监督学习算法,其核心是通过构建最大间隔超平面实现分类。与感知机不同,SVM不仅要求分类正确,还追求间隔最大化以提高泛化能力。

weixin_69882801的博客 884

随机森林遥感反演详细教程

通过这篇文章,我们展示了如何使用Python对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。

热爱分享,热爱记录 2952

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

机器学习笔记(六) ---- 支持向量机(SVM)

支持向量机(SVM)可以说是一个完全由数学理论和公式进行应用的一种机器学习算法,在小批量数据分类上准确度高、性能好,在二分类问题上有广泛的应用。 同样是二分类算法,支持向量机和逻辑回归有很多相似性,都是二分类问题的判决模型,主要的差异在于损失函数的不同,支持向量机相比于逻辑回归,更倾向于找到样本空间中最优的划分超平面。 首先说一下超平面的概念:超平面是一个数...

华为云官方博客 6479

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

通俗讲解支持向量机SVM(一)面试官:什么?线性模型你不会不清楚吧?

大佬从摆摊开始,经典的SVM算法我想从吃透线性模型开始。 千里之行,积于跬步。

试问道几许 5904

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM

说来惭愧,断更快半个月了,本打算是一周一篇的。感觉SVM瞬间难了不少,推导耗费了很多时间,同时身边的事情也不少,忙了许久。本篇文章参考了诸多大牛的文章写成的,对于什么是SVM做出了生动的阐述,同时也进行了线性SVM的理论推导,以及最后的编程实践,公式较多,还需静下心来一点一点推导。

Jack-Cui 9万+

机器学习——支持向量机

优点:支持向量机算法可以解决小样本情况下的机器学习问题,简化了通常的分类和回归等问题。由于采用核函数方法克服了维数灾难和非线性可分的问题,所以向高维空间映射时没有增加计算的复杂性。换句话说,由于支持向量计算法的最终决策函数只由少数的支持向量所确定,所以计算的复杂性取决于支持向量的数目,而不是样本空间的维数。支持向量机算法利用松弛变量可以允许一些点到分类平面的距离不满足原先要求,从而避免这些点对模型学习的影响。缺点:支持向量机算法对大规模训练样本难以实施。

m0_74864756的博客 2410

SVM模型

(一)简介 1.SVM(support vector machine)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,利用间隔最大化求最优分离超平面: 2.SVM分类器的模型为: 3.函数间隔与几何间隔的概念 (1)函数间隔 关于样本点的函数间隔: 关于样本集的函数间隔: (2)几何间隔 关于样本点的几何间隔: 关于样本

zakexu的专栏 2万+
上一篇: Everything高效搜索技巧与常用设置详解
下一篇: MacOS M2芯片用户必看:5分钟搞定Typora导出Word文档(附Pandoc路径设置避坑指南)
ruby5
博客等级 码龄15年 29粉丝 893原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值