简介
在本实验中,我们将学习如何使用支持向量机(Support Vector Machines,SVM)通过自定义核函数对样本进行分类。我们将使用 Python 的 scikit-learn 库来执行带有自定义核函数的 SVM 分类。SVM 是一种用于分类、回归和异常检测的流行机器学习算法。SVM 的工作原理是创建一个边界或一条线(超平面),将数据分为不同的类别。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入库
在这一步中,我们将为本实验导入必要的库。我们将使用 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 是一种用于分类、回归和异常值检测的流行机器学习算法。