当前位置: 首页 > news >正文

Python 机器学习核心入门与实战进阶 Day 4 - 支持向量机(SVM)原理与分类实战

✅ 今日目标

  • 理解支持向量机(SVM)分类器的基本原理
  • 掌握核函数的作用(线性、RBF 等)
  • 使用 sklearn.svm.SVC 实现 SVM 分类任务
  • 可视化超平面与边界
  • 比较不同核函数下的分类表现

📘 一、SVM 核心概念

概念解释
支持向量离分类边界最近的点
间隔最大化SVM 寻找最大间隔的超平面
核函数用于处理非线性分类任务,将数据映射到高维空间
常见核函数linear、poly、rbf(高斯径向基)、sigmoid

🧪 二、基本用法演示

from sklearn.svm import SVCmodel = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
参数含义
kernel核函数类型
C正则项系数,控制间隔与误差的权衡
gamma核函数系数,控制模型复杂度

🧠 三、训练与可视化思路

  1. 构造二维特征数据(成绩 + 性别)
  2. 使用 SVC 分别训练 linear 和 rbf 模型
  3. 可视化不同核函数下的决策边界(使用 contourf)
  4. 输出分类准确率与报告

📈 四、模型调参建议

方法工具
网格搜索GridSearchCV
交叉验证cross_val_score
可视化比较画出不同模型边界

🧾 今日总结

收获技能
支持向量的思想核函数映射
分类建模能力sklearn.svm.SVC() 使用
参数调优意识gamma 和 C 的权衡

💻 练习脚本

# SVM 实战演示:学生是否及格分类任务import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_reportplt.rcParams['font.family'] = 'Arial Unicode MS'  # Mac 用户可用
plt.rcParams['axes.unicode_minus'] = False
# 1. 构造数据(成绩 + 性别)
np.random.seed(42)
size = 100
scores = np.random.randint(40, 100, size)
genders = np.random.choice([0, 1], size=size)
labels = (scores >= 60).astype(int)X = np.column_stack(((scores - scores.mean()) / scores.std(), genders))
y = labelsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 2. 训练两个 SVM 模型
models = {'Linear SVM': SVC(kernel='linear'),'RBF SVM': SVC(kernel='rbf')
}# 3. 画图准备
def plot_decision_boundary(model, X, y, title):x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5xx, yy = np.meshgrid(np.linspace(x_min, x_max, 300),np.linspace(y_min, y_max, 300))Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.coolwarm)plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm, edgecolors='k')plt.xlabel("标准化成绩")plt.ylabel("性别(0=女,1=男)")plt.title(title)plt.tight_layout()plt.show()# 4. 训练 & 可视化每个模型
for name, model in models.items():model.fit(X_train, y_train)y_pred = model.predict(X_test)print(f"\\n=== {name} ===")print("准确率:", accuracy_score(y_test, y_pred))print(classification_report(y_test, y_pred))plot_decision_boundary(model, X, y, title=name + " 分类边界")

运行输出:
在这里插入图片描述

=== Linear SVM ===
准确率: 1.0precision    recall  f1-score   support0       1.00      1.00      1.00         71       1.00      1.00      1.00        13accuracy                           1.00        20macro avg       1.00      1.00      1.00        20
weighted avg       1.00      1.00      1.00        20
http://www.dtcms.com/a/267846.html

相关文章:

  • 深度学习图像分类数据集—蘑菇识别分类
  • plantuml用法总结
  • Java设计模式之行为型模式(策略模式)介绍与说明
  • 利用低空无人机影像进行树种实例分割
  • 深入解析Vue中v-model的双向绑定实现原理
  • 牛客周赛99
  • 关于 栈帧变化完整流程图(函数嵌套)
  • 大模型面试:RAG与Agent相关
  • 《Redis》集群
  • 【Note】《Kafka: The Definitive Guide》 第二章 Installing Kafka:Kafka 安装与运行
  • Redis--主从复制详解
  • 【Docker基础】Docker容器挂载方式深度解析:--volume与--mount参数对比
  • QT6 源(155)模型视图架构里的列表视图 QListView:接着学习成员函数,信号函数,附上本类的源代码带注释。
  • HCIA-网络地址转换(NAT)
  • CppCon 2018 学习:Woes of Scope Guards and Unique_Resource
  • 抖音小游戏(IAA)巨量引擎投放指南
  • [shadPS4] 内存管理 | 权限管理 |文件系统 | 挂载和句柄
  • 【BTC】数据结构
  • 7,TCP服务器
  • JavaScript基础语法之运算符和控制流
  • 李宏毅NLP-8-语音模型
  • 【管理学】组织纪律性与创新性的失衡导致的问题
  • Redis事务机制
  • [论文阅读]VGGFace2: A dataset for recognising faces across pose and age
  • Linux-磁盘管理
  • 【前端工程化】前端工作中的业务规范有哪些
  • 基于评估方法论评估一个大模型的准确度
  • 文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索
  • Java面试宝典:网络编程
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(五) - 基于随机森林算法预测职位分类