SVC算法中如何绘制预测决策图?
绘制SVC决策边界可视化图
要实现类似scikit-learn官网的SVC决策图,没有现成的一键函数,但可以通过生成特征空间网格 + 模型预测网格类别 + 可视化渲染的方式手动实现,以下是完整的可运行方案:
完整代码示例
import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC from sklearn.datasets import make_blobs # 1. 生成示例二分类数据(可替换为自己的数据集) X, y = make_blobs(n_samples=100, centers=2, random_state=42, cluster_std=1.0) # 2. 训练SVC模型 svc_model = SVC(kernel='linear', C=1.0) svc_model.fit(X, y) # 3. 生成覆盖特征空间的网格点 h = 0.02 # 网格步长 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) # 4. 用模型预测网格点的类别 Z = svc_model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # 5. 绘制决策图 plt.figure(figsize=(8, 6)) # 绘制决策区域的颜色背景 plt.contourf(xx, yy, Z, alpha=0.8, cmap=plt.cm.Paired) # 绘制原始样本点 plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', cmap=plt.cm.Paired) # 绘制支持向量 plt.scatter(svc_model.support_vectors_[:, 0], svc_model.support_vectors_[:, 1], s=150, facecolors='none', edgecolors='red', label='Support Vectors') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVC Decision Boundary') plt.legend() plt.show()
关键步骤解释
- 数据准备:用
make_blobs生成模拟二分类数据,实际使用时替换为你自己的二维特征矩阵X和标签y即可(高维特征需先通过PCA等方法降维到二维才能可视化)。 - 模型训练:初始化并训练
SVC模型,示例用线性核,可根据需求更换为rbf、poly等核函数。 - 网格生成:通过
meshgrid生成覆盖整个特征范围的密集网格点,确保完整呈现决策边界细节。 - 网格预测:将网格点展平后输入模型预测类别,再还原为网格形状,用于绘制颜色区域。
- 可视化渲染:
contourf绘制决策区域的填充颜色,区分不同类别的预测范围;scatter绘制原始样本点,用颜色区分真实类别;- 标记出支持向量(红色空心点),还原SVC模型的核心特征,和官网示例风格一致。
如果适配多分类场景,只需确保数据集为多分类标签,模型初始化时设置decision_function_shape='ovr'或'ovo',可视化逻辑无需大幅修改。
内容的提问来源于stack exchange,提问作者Jakub Szurlej
相关产品推荐
相关产品推荐

