支持向量机核数据分类

Beginner

This tutorial is from open-source community. Access the source code

简介

本实验提供了一份关于如何使用支持向量机核(SVM-Kernels)对数据点进行分类的详细指南。当数据点不是线性可分时,支持向量机核特别有用。我们将使用 Python 的 scikit-learn 来执行此任务。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

在这一步中,我们将导入执行分类任务所需的库。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm

创建数据集和目标

在这一步中,我们将为分类任务创建一个数据集和目标。我们将使用 numpy 库来创建数据集和目标。

X = np.c_[
    (0.4, -0.7),
    (-1.5, -1),
    (-1.4, -0.9),
    (-1.3, -1.2),
    (-1.1, -0.2),
    (-1.2, -0.4),
    (-0.5, 1.2),
    (-1.5, 2.1),
    (1, 1),
    ## --
    (1.3, 0.8),
    (1.2, 0.5),
    (0.2, -2),
    (0.5, -2.4),
    (0.2, -2.3),
    (0, -2.7),
    (1.3, 2.1),
].T
Y = [0] * 8 + [1] * 8

创建模型

在这一步中,我们将使用三种不同的核创建支持向量机核(SVM-Kernel)模型:线性核、多项式核和径向基函数(RBF)核。线性核用于线性可分的数据点,而多项式核和 RBF 核对于非线性可分的数据点很有用。

## fit the model
for kernel in ("linear", "poly", "rbf"):
    clf = svm.SVC(kernel=kernel, gamma=2)
    clf.fit(X, Y)

可视化模型

在这一步中,我们将通过绘制线条、数据点以及到平面的最近向量来可视化支持向量机核(SVM-Kernel)模型。

    ## plot the line, the points, and the nearest vectors to the plane
    plt.figure(fignum, figsize=(4, 3))
    plt.clf()

    plt.scatter(
        clf.support_vectors_[:, 0],
        clf.support_vectors_[:, 1],
        s=80,
        facecolors="none",
        zorder=10,
        edgecolors="k",
    )
    plt.scatter(X[:, 0], X[:, 1], c=Y, zorder=10, cmap=plt.cm.Paired, edgecolors="k")

    plt.axis("tight")
    x_min = -3
    x_max = 3
    y_min = -3
    y_max = 3

    XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]
    Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()])

    ## Put the result into a color plot
    Z = Z.reshape(XX.shape)
    plt.figure(fignum, figsize=(4, 3))
    plt.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired)
    plt.contour(
        XX,
        YY,
        Z,
        colors=["k", "k", "k"],
        linestyles=["--", "-", "--"],
        levels=[-0.5, 0, 0.5],
    )

    plt.xlim(x_min, x_max)
    plt.ylim(y_min, y_max)

    plt.xticks(())
    plt.yticks(())
    fignum = fignum + 1
plt.show()

总结

在这个实验中,我们学习了如何使用支持向量机核(SVM-Kernels)对数据点进行分类。我们创建了一个数据集和目标,使用三种不同的核创建了支持向量机核模型,并对模型进行了可视化。当数据点不是线性可分时,支持向量机核特别有用。