机器学习——支持向量机

前言:学习记录

一、简述

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 对特征量纲十分敏感。

相关推荐
深圳市益普科技有限公司19 小时前
半导体智造升级大势所趋!深圳益普科技:以自研工业软件,助力制造业国产化转型
人工智能
Zzz 小生19 小时前
Lazy Theta*:把昂贵的视线检测留到“真正需要”时再做
人工智能·算法·贪心算法·推荐算法
阿图灵19 小时前
OpenCV 绘图五件套:画圆、文本、线段、矩形与椭圆
图像处理·人工智能·python·opencv·计算机视觉·绘图
水如烟19 小时前
孤能子视角:EIS下的宏观、微观时空,以及光速常数与虚空背景
人工智能
slacker-kian19 小时前
HuggingFace API加载模型超时:用 ModelScopeAPI 替代
人工智能·python·transformer·huggingface·blip·modelscope·blipprocessor
mmsx19 小时前
用正则把数百个文件抽成知识图谱:三版迭代,从“能用“到“可移植“
人工智能·知识图谱
罗西的思考20 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(1)— 总体
人工智能·笔记·深度学习·机器学习
cuguanren20 小时前
Agent 框架的会话记忆管理机制
人工智能·ai·大模型·llm·agent·上下文管理·会话记忆管理
高工智能汽车20 小时前
从“借船”到“造船”,汽车芯片出海迎历史性一跃
人工智能·汽车
l12586520 小时前
# LangGraph Deep Research Agent 全流程设计:多轮研究、人机协同与真实来源管理
数据库·人工智能·python·算法·自然语言处理·oracle·langchain