使用自定义核函数的支持向量机分类

Machine LearningMachine LearningBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将学习如何使用支持向量机(Support Vector Machines,SVM)通过自定义核函数对样本进行分类。我们将使用 Python 的 scikit-learn 库来执行带有自定义核函数的 SVM 分类。SVM 是一种用于分类、回归和异常检测的流行机器学习算法。SVM 的工作原理是创建一个边界或一条线(超平面),将数据分为不同的类别。

虚拟机使用提示

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/inspection("Inspection") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/inspection -.-> lab-49097{{"使用自定义核函数的支持向量机分类"}} ml/sklearn -.-> lab-49097{{"使用自定义核函数的支持向量机分类"}} end

导入库

在这一步中,我们将为本实验导入必要的库。我们将使用 numpy、matplotlib、scikit-learn 和 DecisionBoundaryDisplay。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.inspection import DecisionBoundaryDisplay

加载数据

在这一步中,我们将使用 scikit-learn 的 datasets 模块加载鸢尾花数据集。我们将选择数据集的前两个特征并将其赋值给变量 X。我们还将目标变量赋值给 Y。

iris = datasets.load_iris()
X = iris.data[:, :2]
Y = iris.target

创建自定义核函数

在这一步中,我们将创建一个自定义核函数。该自定义核函数将是两个矩阵的点积。我们将创建一个值为 [[2, 0], [0, 1.0]] 的矩阵 M。然后,我们将矩阵 X 和 Y 与 M 相乘,并取它们的点积。

def my_kernel(X, Y):
    """
    我们创建一个自定义核函数:

                 (2  0)
    k(X, Y) = X  (    ) Y.T
                 (0  1)
    """
    M = np.array([[2, 0], [0, 1.0]])
    return np.dot(np.dot(X, M), Y.T)

创建支持向量机分类器

在这一步中,我们将创建一个支持向量机分类器实例并拟合我们的数据。我们将使用上一步中创建的自定义核函数。

clf = svm.SVC(kernel=my_kernel)
clf.fit(X, Y)

绘制决策边界

在这一步中,我们将绘制决策面和支持向量。我们将使用 scikit-learn 的 inspection 模块中的 DecisionBoundaryDisplay 模块来绘制决策边界。我们还将绘制训练点的散点图。

ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    cmap=plt.cm.Paired,
    ax=ax,
    response_method="predict",
    plot_method="pcolormesh",
    shading="auto",
)

plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired, edgecolors="k")
plt.title("3-Class classification using Support Vector Machine with custom kernel")
plt.axis("tight")
plt.show()

总结

在本实验中,我们学习了如何使用支持向量机(SVM)通过自定义核函数对样本进行分类。我们使用 scikit-learn 库来执行带有自定义核函数的 SVM 分类。我们加载了鸢尾花数据集,创建了一个自定义核函数,创建了一个 SVM 分类器实例并拟合我们的数据,然后绘制了决策边界和支持向量。SVM 是一种用于分类、回归和异常值检测的流行机器学习算法。