【Python】支持向量机SVM

示例代码:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report

# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'KaiTi', 'SimSun']  # 使用系统自带字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
# 1. 生成模拟数据
X, y = make_blobs(n_samples=100, centers=2,
                  random_state=6, cluster_std=1.2)
print("这是X")
print(X)
print("这是y")
print(y)
# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42)

# 3. 创建SVM分类器(使用线性核)
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(X_train, y_train)

# 4. 预测测试集
y_pred = clf.predict(X_test)

print(y_pred)
print(y_test)

# 5. 评估模型性能
print(f"测试集准确率: {accuracy_score(y_test, y_pred):.2f}")
print("\n分类报告:")
print(classification_report(y_test, y_pred))

# 6. 可视化结果
plt.figure(figsize=(10, 6))

# 绘制训练数据
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train,
            cmap='coolwarm', edgecolors='k', label='训练数据')

# 绘制测试数据
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test,
            cmap='coolwarm', marker='s', s=100,
            edgecolors='k', alpha=0.7, label='测试数据')

# 绘制决策边界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# 创建网格评估模型
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)

# 绘制决策边界和间隔
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1],
           alpha=0.5, linestyles=['--', '-', '--'])
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],
           s=100, linewidth=1, facecolors='none',
           edgecolors='k', label='支持向量')

plt.title('SVM分类结果可视化')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()

可视化结果:

资料来源于:周志华-机器学习,如有侵权请联系删除

相关推荐
Coding茶水间14 分钟前
基于深度学习的安检危险品检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
爱笑的眼睛1126 分钟前
超越 `cross_val_score`:深度解析Scikit-learn交叉验证API的架构、技巧与陷阱
java·人工智能·python·ai
jianfeng_zhu1 小时前
整数数组匹配
数据结构·c++·算法
smj2302_796826521 小时前
解决leetcode第3782题交替删除操作后最后剩下的整数
python·算法·leetcode
dulu~dulu2 小时前
机器学习题目总结(一)
人工智能·神经网络·决策树·机器学习·学习笔记·线性模型·模型评估与选择
gCode Teacher 格码致知2 小时前
Python基础教学:Python 3中的字符串在解释运行时的内存编码表示-由Deepseek产生
python·内存编码
翔云 OCR API2 小时前
承兑汇票识别接口技术解析与应用实践
开发语言·人工智能·python·计算机视觉·ocr
LYFlied2 小时前
【每日算法】LeetCode 136. 只出现一次的数字
前端·算法·leetcode·面试·职场和发展
Niuguangshuo3 小时前
自编码器与变分自编码器:【2】自编码器的局限性
pytorch·深度学习·机器学习
唯唯qwe-3 小时前
Day23:动态规划 | 爬楼梯,不同路径,拆分
算法·leetcode·动态规划