机器学习——支持向量机

前言:学习记录

一、简述

svm(支持向量机)是经典有监督分类算法,核心目标:寻找最优分隔超平面,最大化不同类别样本之间的几何间隔;依靠少数关键样本(支持向量)完成决策,泛化能力优秀,适合中小规模数据集。

线性可分数据:线性核直接划分;

线性不可分数据:通过核函数将数据映射至高维空间,实现非线性分割。 SVM 对特征数值尺度极度敏感,训练前必须做标准化处理

二、核心参数

class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, random_state=1)

1.C惩罚因子(软间隔)

C 越大:对错分样本惩罚更强,追求训练集全部分类正确,易过拟合,泛化差;

C 越小:允许样本错分,容错噪声,泛化能力更强;

调优方式:搭配交叉验证选取最优值。

2.kernel 核函数(默认 rbf 高斯核)

linear:线性核,用于线性可分数据,速度快;

poly:多项式核,degree 参数控制多项式次数;

rbf:径向基高斯核,处理非线性数据,日常实验首选;

sigmoid:sigmoid 核,类似神经网络激活函数。

3.degree:仅 poly 多项式核生效,代表多项式次数,默认 3;使用 rbf/linear 时自动忽略。

4.gamma: rbf/poly/sigmoid 核系数

scale:新版默认,gamma=1/(特征数×数据方差);

gamma 越大:决策边界细碎,过拟合风险高;gamma 越小:边界平滑,降低过拟合。

**5.coef0:**多项式、sigmoid 核的偏置常数,一般默认 0 无需修改。

**6.probability:**是否输出类别预测概率,开启会大幅降低训练速度,实验默认关闭。

【训练后内置属性】

1.support_vectors_:所有支持向量样本;

2.n_support_:每一类对应的支持向量数量;

3.coef_:超平面权重 w(仅 linear 线性核可用);

4.intercept_:超平面偏置 b(仅 linear 线性核可用)。

三、代码

1、库导导入与绘图设置

导入 matplotlib 用于可视化,设置绘图后端规避画布报错,配置中文字体防止图表中文方框;导入鸢尾花数据集、数据集划分工具、交叉验证工具、SVC 模型、标准化器、分类评估指标。

2. 数据加载与划分

加载 sklearn 内置鸢尾花数据集,分离特征矩阵 X 与分类标签 y;通过train_test_split划分 80% 训练集、20% 独立测试集,random_state 固定随机种子保证实验可复现。

3. 特征标准化

SVM 依靠距离计算分类边界,不同特征数值量级差异会扭曲距离结果;使用 StandardScaler 对训练集拟合标准化规则,再同步转换测试集,避免测试集数据泄露。

4.SVC 模型实例化

参照 API 文档设置核心超参数:惩罚系数 C=1,高斯核 rbf,gamma 采用新版默认 scale,固定随机种子;次要参数全部使用默认值,不额外开启 probability 概率输出。

5.5 折交叉验证

使用cross_val_score在训练集上做 5 折交叉验证:将训练集均分 5 份,轮流 4 份训练、1 份验证,循环 5 次;输出每组准确率、平均准确率、标准差,消除单次数据划分带来的偶然性,客观衡量模型泛化能力。

6. 模型训练 fit ()(SVM 核心学习流程)

若选用 rbf 非线性核,自动将低维特征映射至高维特征空间;

遍历全部训练样本,筛选出距离分类超平面最近的样本(支持向量);

求解最优化方程,生成最大化类别间隔的分割超平面;

根据参数 C 控制软间隔,平衡训练集准确率与模型容错能力。

7. 预测与模型评估

调用 predict 对从未参与训练的测试集预测类别;score 计算整体准确率;classification_report 输出每一类的精确率、召回率、F1 分数,全方位评价分类效果。

8. 输出模型内置属性

打印每一类支持向量数量、支持向量样本;区分线性核与高斯核,线性核额外输出超平面权重 w 和偏置项 b,对应 API 文档属性说明。

python 复制代码
# 绘图环境配置,解决画布、中文乱码问题
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report

# 1.加载鸢尾花数据集
iris = load_iris()
X = iris.data  # 特征:花萼、花瓣长宽4个数值特征
y = iris.target # 真实分类标签(3种鸢尾花)

# 2.划分训练集80%、独立测试集20%
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=1
)

# 3.特征标准化(SVM必须步骤,消除量纲影响)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 4.实例化SVC模型,严格按照API核心参数配置
svc = SVC(
    C=1.0,
    kernel="rbf",
    gamma="scale",
    random_state=1
)

# 5.5折交叉验证(仅在训练集上执行,评估模型泛化性能)
cv_scores = cross_val_score(svc, X_train, y_train, cv=5, scoring="accuracy")
print("=====5折交叉验证结果=====")
print("每折准确率:", cv_scores)
print(f"交叉验证平均准确率:{cv_scores.mean():.4f}")
print(f"准确率标准差:{cv_scores.std():.4f}")

# 6.模型核心训练fit():SVM学习过程
# ①使用rbf核将低维特征映射到高维空间
# ②筛选距离分割平面最近的样本:支持向量
# ③求解最优间隔超平面,通过C控制对错分样本的惩罚力度
svc.fit(X_train, y_train)

# 7.测试集预测与评估
y_pred = svc.predict(X_test)
test_acc = svc.score(X_test, y_test)
print("\n=====独立测试集评估=====")
print(f"测试集整体准确率:{test_acc}")
print("=====分类详细报告=====")
print(classification_report(y_test, y_pred))

# 8.输出API文档规定的模型属性
print("\n=====SVM模型内置属性=====")
print("每类支持向量数量:", svc.n_support_)
print("支持向量样本数组形状:", svc.support_vectors_.shape)
# rbf核无coef_、intercept_,仅线性核可输出
if svc.kernel == "linear":
    print("超平面权重w:", svc.coef_)
    print("超平面偏置b:", svc.intercept_)

1.使用 RBF 高斯核 SVM 对鸢尾花数据集分类,5 折交叉验证平均准确率95.83%,独立测试集准确率96.67%,模型泛化能力强。

2.仅有少数样本预测错误,主要发生在类别 1、类别 2 之间,这两类鸢尾花特征本身比较接近,存在特征重叠。

3.模型一共选出 48 个支持向量,SVM 算法的决策边界完全由这些边界附近样本决定,体现支持向量机算法特点。

4.本次实验做了标准化处理,如果去掉标准化,SVM 分类效果会出现明显下降,证明 SVM 对特征量纲十分敏感。

相关推荐
l0001091 小时前
康养地产适老化智能改造:安全防护体系构建路径与方案选型
人工智能·物联网·安全
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-08-05
人工智能·深度学习·神经网络·搜索引擎·百度
梦想三三1 小时前
Python从零实现AI Agent电商客服(Qwen/Ollama+SQLite源码解析)
人工智能·python·sqlite
Canace1 小时前
Harness Engineering 到底在做什么
前端·人工智能·ai编程
zzm6281 小时前
KSD测试:线性时间的分布异同检验方法
人工智能·机器学习·论文笔记·nips·ksd·分布检验
笨鸟先飞,勤能补拙1 小时前
密码学深度指南 — SecOps 工程师实战手册
人工智能·vscode·python·安全·github·密码学·visual studio
美团技术团队1 小时前
Agent评测漫谈 —— 由浅入深讲解Agent评测
人工智能
前端 贾公子1 小时前
Tavily Search:一个专为 AI Agent 打造的专属搜索引擎 API
人工智能
V哥AI增长1 小时前
企业知识库的AI可见性工程:基于生成式引擎检索机制的实体画像构建与实证分析
人工智能