概念
在某些情况下,数据可能不适合通过线性决策边界来分割。对于这种情况,我们可以使用非线性决策边界,这通常需要使用更复杂的模型来捕捉数据的复杂关系。
一种常见的方法是使用核函数,例如径向基函数(Radial Basis Function,RBF)核,来将数据映射到一个高维空间中,从而使其在高维空间中变得线性可分。这允许我们在原始特征空间中使用一个非线性决策边界。
代码实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
from sklearn.svm import SVC
# 生成虚拟数据集
X, y = make_circles(n_samples=200, noise=0.1, factor=0.5, random_state=42)
# 创建SVM模型(使用径向基函数核)
model = SVC(kernel='rbf', gamma=1)
# 在训练集上训练模型
model.fit(X, y)
# 可视化决策边界
plt.figure(figsize=(10, 6))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
# 绘制决策边界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 100),
np.linspace(ylim[0], ylim[1], 100))
Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, colors=['blue', 'red'], alpha=0.2)
plt.title("Nonlinear Decision Boundary (RBF Kernel)")
plt.show()