AIML-Engineering-Lab/005_support_vector_machines

GitHub: AIML-Engineering-Lab/005_support_vector_machines

基于scikit-learn的支持向量机工程实践教程,通过无人机电机故障检测和SerDes眼图分类两个工业案例,演示线性SVM、核函数技巧和单类异常检测的完整流程。

Stars: 0 | Forks: 0

# 文章 005 — 支持向量机:核函数技巧与单类 SVM **AI 工程实验室系列** | 时代 1:经典机器学习 ## 概述 本项目展示了三种配置下的 **支持向量机 (SVM)** —— 线性 SVM、核 SVM(RBF 和多项式)以及单类 SVM —— 并将其应用于两个真实的故障检测问题。核心见解:SVM 寻找具有 **最大间隔 (Maximum Margin)** 的决策边界,使其具有鲁棒性和泛化能力。 | 概念 | 描述 | |---|---| | **最大间隔 (Maximum Margin)** | SVM 最大化类别之间的间隙 —— 两个区域之间尽可能宽的“街道” | | **支持向量 (Support Vectors)** | 只有边界点定义模型;所有其他数据都无关紧要 | | **核技巧 (Kernel Trick)** | 隐式地将数据映射到更高维度 —— 不需要显式转换 | | **RBF 核 (RBF Kernel)** | 创建圆形/椭圆形边界;最通用的核函数 | | **C 参数 (C parameter)** | 正则化:C 值小 = 宽间隔,C 值大 = 窄间隔 | | **单类 SVM (One-Class SVM)** | 仅围绕正常数据学习边界 —— 无需故障样本即可检测异常 | ## 数据集 ### 数据集 A:无人机电机故障检测 基于实时传感器信号预测无人机电机是否故障。 | 特征 | 描述 | |---|---| | `vibration_freq_hz` | 主振动频率 (Hz) —— 在轴承共振时发生偏移 | | `vibration_amplitude` | 峰值振动幅度 —— 在轴承磨损时升高 | | `current_draw_a` | 电机电流消耗 (A) —— 在线圈短路故障中出现尖峰 | | `temperature_c` | 电机温度 (°C) —— 在两种故障类型中均升高 | | `acoustic_emission_db` | 声发射水平 (dB) —— 轴承故障中的研磨声 | | `rpm_deviation_pct` | 相对于设定点的 RPM 偏差 (%) | | **`motor_fault`** | **目标:1 = 故障,0 = 健康** | - **行数:** 5,000 | **故障率:** 30% | **两种故障模式:** 轴承磨损 + 线圈短路 ### 数据集 B:SerDes 眼图裕量分类(硅后验证) 将高速串行通道分类为 PASS(张开眼图)或 FAIL(闭合眼图)。 | 特征 | 描述 | |---|---| | `eye_height_mv` | 垂直眼图张开度 (mV) —— 主要质量指标 | | `eye_width_ps` | 水平眼图张开度 —— 时序裕量 | | `jitter_rms_ps` | RMS 抖动 —— 信号时序噪声 | | `ber_exponent` | log₁₀(误码率) —— 例如,-12 表示 BER = 1e-12 | | `pre_emphasis_db` | 发射端预加重 | | `equalization_gain_db` | 接收端均衡增益 | | `channel_loss_db` | 通道插入损耗 | | **`eye_open`** | **目标:1 = 张开/通过,0 = 闭合/失败** | - **行数:** 6,000 | **通过率:** 75% | **用于二分类 SVM 和单类 SVM** ## 项目结构 ``` 005_support_vector_machines/ ├── data/ │ ├── drone_motor_fault.csv │ └── serdes_eye_margin.csv ├── notebooks/ │ ├── 01_svm_drone_motor.ipynb │ └── 02_svm_serdes_eye.ipynb ├── src/ │ ├── data_generator.py │ └── generate_visuals.py ├── assets/ │ ├── fig1_svm_maximum_margin.png │ ├── fig2_kernel_trick_3d.png │ ├── fig3_drone_decision_boundary.png │ ├── fig4_roc_kernel_comparison.png │ └── fig5_oneclass_svm_serdes.png ├── PRD.md ├── requirements.txt ├── .gitignore └── LICENSE ``` ## 关键可视化 | 图表 | 描述 | |---|---| | `fig1` | 最大间隔超平面:C=0.1 与 C=100 的对比 —— 展示偏差-方差权衡 | | `fig2` | 3D 中的核技巧:在 2D 中线性不可分的圆形数据在 3D 中变得可分 | | `fig3` | 无人机电机故障决策边界(RBF 核,2D PCA 投影),高亮显示支持向量 | | `fig4` | 两个数据集上 Linear、RBF 和 Polynomial 核的 ROC 曲线对比 | | `fig5` | 单类 SVM 边界 + nu 敏感性分析(检测率与误报率) | ## 技术栈 | 工具 | 版本 | 用途 | |---|---|---| | Python | 3.11 | 核心语言 | | scikit-learn | ≥1.3 | SVM, One-Class SVM, Pipeline, GridSearchCV | | pandas | ≥2.0 | 数据操作 | | numpy | ≥1.24 | 数值运算 | | matplotlib | ≥3.7 | 所有可视化 | ## 快速开始 ``` git clone https://github.com/AIML-Engineering-Lab/005_support_vector_machines.git cd 005_support_vector_machines pip install -r requirements.txt python src/data_generator.py jupyter notebook notebooks/ ``` ## 系列导航 | 文章 | 主题 | 仓库 | |---|---|---| | 001 | 线性回归引擎 | [001_linear_regression_engine](https://github.com/AIML-Engineering-Lab/001_linear_regression_engine) | | 002 | 分类引擎 | [002_classification_engine](https://github.com/AIML-Engineering-Lab/002_classification_engine) | | 003 | 基于树的学习 | [003_tree_based_learning](https://github.com/AIML-Engineering-Lab/003_tree_based_learning) | | 004 | Boosting 革命 | [004_boosting_revolution](https://github.com/AIML-Engineering-Lab/004_boosting_revolution) | | **005** | **支持向量机** | **本仓库** | | 006 | 无监督发现 | 即将推出 | *属于 [AI 工程实验室](https://github.com/AIML-Engineering-Lab) 系列的一部分 —— 一门从经典机器学习到 Agentic AI 的渐进式课程。*
标签:AI工程实验室, Apex, Python, RBF核, Scikit-learn, SerDes, SVM, 二分类, 人工智能, 传感器数据分析, 信号处理, 半导体测试, 单类SVM, 后硅验证, 工业4.0, 异常检测, 支持向量机, 故障预测, 数据科学, 无人机, 无后门, 无监督学习, 最大间隔, 机器学习, 核函数, 用户模式Hook绕过, 电机故障诊断, 监督学习, 眼图, 线性SVM, 资源验证, 逆向工具, 预测性维护