AI学习指南数学工具篇-支持向量机(SVM)中的核方法

AI学习指南数学工具篇-支持向量机(SVM)中的核方法

在机器学习领域,支持向量机(SVM)是一个经典且强大的分类算法。它不仅可以处理线性可分情况下的数据,还能应用于非线性可分的情况,这得益于SVM中的核方法。本文将重点介绍SVM中的核方法,包括线性可分支持向量机(Linearly Separable SVM)和软间隔支持向量机(Soft Margin SVM),并给出详细的示例。

线性可分支持向量机(Linearly Separable SVM)

当数据是线性可分的时候,我们可以使用线性核来构建支持向量机模型。线性核可以将数据映射到高维空间中,使得数据变得线性可分。下面我们通过一个简单的示例来说明在线性可分情况下如何应用线性核。

假设我们有一个二维的数据集,其中包含两类数据,分别用红色圆点和蓝色三角形表示。我们希望构建一个支持向量机模型来对这些数据进行分类。首先,我们可以通过绘制数据集的散点图来观察数据的分布情况。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [-1] * 20 + [1] * 20

# 绘制散点图
plt.scatter(X[:20, 0], X[:20, 1], color="r", marker="o", label="Class -1")
plt.scatter(X[20:, 0], X[20:, 1], color="b", marker="^", label="Class 1")
plt.xlabel("X1")
plt.ylabel("X2")
plt.legend()
plt.show()

从散点图中可以看出,这些数据是线性可分的。接下来,我们可以使用sklearn库来构建支持向量机模型,并通过线性核进行训练。

python 复制代码
from sklearn.svm import SVC

# 构建支持向量机模型
model = SVC(kernel="linear")
model.fit(X, Y)

通过构建SVM模型,并使用线性核进行训练,我们得到了一个线性可分支持向量机模型。接下来,我们可以绘制决策边界和支持向量来可视化模型的效果。

python 复制代码
# 绘制决策边界和支持向量
def plot_decision_boundary(X, y, model, title):
    plt.scatter(X[y==-1][:, 0], X[y==-1][:, 1], color="r", marker="o", label="Class -1")
    plt.scatter(X[y==1][:, 0], X[y==1][:, 1], color="b", marker="^", label="Class 1")
    plt.xlabel("X1")
    plt.ylabel("X2")

    # 绘制决策边界
    ax = plt.gca()
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()

    xx, yy = np.meshgrid(np.linspace(*xlim, num=50),
                         np.linspace(*ylim, num=50))
    Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    plt.contour(xx, yy, Z, colors="k", levels=[-1, 0, 1], alpha=0.5,
                linestyles=["--", "-", "--"])

    # 绘制支持向量
    plt.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1], s=100,
                linewidth=1, facecolors="none", edgecolors="k")
    plt.legend()
    plt.title(title)
    plt.show()

# 可视化决策边界和支持向量
plot_decision_boundary(X, Y, model, "Linearly Separable SVM with Linear Kernel")

从可视化结果中可以看出,我们得到了一个线性可分支持向量机模型,并且它能够很好地将两类数据分开。

软间隔支持向量机(Soft Margin SVM)

在现实的数据集中,很多情况下数据并不是完全线性可分的,这时就需要使用软间隔支持向量机来处理。软间隔支持向量机允许一定程度上的分类错误,这通过引入惩罚参数C来实现。在非线性可分情况下,我们可以通过使用非线性核函数来将数据映射到更高维的空间中,以实现更好的分类效果。下面我们通过一个示例来介绍在非线性可分情况下如何应用非线性核函数。

假设我们有一个二维的数据集,其中包含两类数据,我们希望构建一个软间隔支持向量机模型来对这些数据进行分类。首先,我们可以通过绘制数据集的散点图来观察数据的分布情况。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [-1] * 20 + [1] * 20

# 绘制散点图
plt.scatter(X[:20, 0], X[:20, 1], color="r", marker="o", label="Class -1")
plt.scatter(X[20:, 0], X[20:, 1], color="b", marker="^", label="Class 1")
plt.xlabel("X1")
plt.ylabel("X2")
plt.legend()
plt.show()

从散点图中可以看出,这些数据在二维空间中并不是线性可分的。接下来,我们可以使用sklearn库来构建软间隔支持向量机模型,并通过非线性核进行训练。

python 复制代码
from sklearn.svm import SVC

# 构建支持向量机模型
model = SVC(kernel="rbf", C=1, gamma=1)
model.fit(X, Y)

通过构建SVM模型,并使用径向基核进行训练,我们得到了一个软间隔支持向量机模型。下面我们通过可视化决策边界和支持向量来观察模型的效果。

python 复制代码
# 可视化决策边界和支持向量
plot_decision_boundary(X, Y, model, "Soft Margin SVM with RBF Kernel")

通过引入非线性核函数和惩罚参数C,我们得到了一个在非线性可分情况下效果良好的软间隔支持向量机模型。

以上是关于SVM中的核方法的详细介绍。通过使用线性核和非线性核,SVM能够处理不同类型的数据,并在分类问题中取得良好的效果。希望本文能够帮助读者更加深入地理解SVM中的核方法,并在实际问题中应用它们。

相关推荐
前沿在线12 分钟前
广交会上的人机乒乓:一颗小球,量出具身智能的落地深浅 | 前沿在线
人工智能·ai·前沿在线
Solange__29 分钟前
城市更新方案怎么用AI生成3D街区预演?从底图、体块到公众网页展示
人工智能·游戏·3d·ai·自然语言处理·1024程序员节·关卡设计
在世修行33 分钟前
智学文枢:理科分析引擎
python·ai·pyside·理科教学
ShiMetaPi41 分钟前
182X 模型转换详解:从 PC 模型到板端 NPU 运行全流程
ai·边缘计算·rk3588·rk1820·rk1828
物联网老王1 小时前
第05篇-Agent 连不上工具?MCP 就是那根“USB-C”
开发语言·人工智能·ai·aigc·ai编程
Maydaycxc2 小时前
gentic RPA 深度解析|AI Agent 与 RPA 混合架构、落地痛点、选型要点
人工智能·ai·自动化·rpa
znnnk2 小时前
【AI技术】从 Vibe Coding 到 Harness:以 DeepSeek Harness 为例看 AI 项目的工程化维护
人工智能·ai·deepseek·ai工程化·harness·项目维护
特别关注外国供应商13 小时前
Qualys TotalAI:AI 安全治理的四大支柱
ai·大模型安全·ai数据安全·qualys·ai安全治理·ai saas 治理·ai代码安全
天外飞雨道沧桑15 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
漫步的猪15 小时前
# 告别混乱与付费墙!Linkit:完全免费、本地优先的开源 AI 智能书签与收藏夹管理神器
人工智能·ai·开源·react·免费·书签·收藏夹