100-Days-Of-ML-Code项目解析:支持向量机(SVM)实战教程
2025-07-05 01:43:39作者:羿妍玫Ivan
一、SVM算法简介
支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,主要用于分类问题,也可用于回归分析。其核心思想是通过寻找最优超平面来实现数据分类,这个超平面能够最大化不同类别之间的边界距离。
SVM的主要特点包括:
- 在高维空间中表现优异
- 适用于小样本数据集
- 通过核技巧可以处理非线性分类问题
- 对异常值不敏感
二、项目环境准备
在开始SVM实战前,我们需要导入必要的Python库:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
这三个库构成了机器学习项目的基础工具集:
- NumPy:提供高效的数值计算功能
- Matplotlib:用于数据可视化
- Pandas:简化数据加载和处理
三、数据加载与预处理
1. 加载数据集
项目中使用的是社交网络广告数据集,包含用户年龄、估计薪资等特征,以及是否购买产品的标签。
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values # 特征矩阵:年龄和估计薪资
y = dataset.iloc[:, 4].values # 目标变量:是否购买
2. 数据集划分
将数据划分为训练集和测试集是评估模型性能的关键步骤:
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=0)
这里使用25%的数据作为测试集,random_state参数确保每次划分结果一致。
3. 特征缩放
SVM对特征的尺度敏感,因此需要进行标准化处理:
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test) # 注意这里使用transform而非fit_transform
四、SVM模型构建与训练
1. 模型初始化
from sklearn.svm import SVC
classifier = SVC(kernel='linear', random_state=0)
这里选择了线性核函数,这是SVM最简单的形式。其他常见核函数包括:
- 'rbf':径向基函数(高斯核)
- 'poly':多项式核
- 'sigmoid':Sigmoid核
2. 模型训练
classifier.fit(X_train, y_train)
五、模型评估
1. 预测测试集结果
y_pred = classifier.predict(X_test)
2. 混淆矩阵分析
混淆矩阵是评估分类模型性能的重要工具:
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
混淆矩阵可以直观展示:
- 真正例(True Positive)
- 真负例(True Negative)
- 假正例(False Positive)
- 假负例(False Negative)
六、结果可视化
1. 训练集结果可视化
# 代码略,详见原项目
可视化结果展示了SVM如何在特征空间中划分决策边界,将不同类别的数据点分开。
2. 测试集结果可视化
# 代码略,详见原项目
测试集可视化帮助我们评估模型在未见数据上的表现,检查是否存在过拟合或欠拟合问题。
七、SVM实战要点总结
- 核函数选择:线性核适合线性可分数据,非线性问题可尝试RBF等核函数
- 参数调优:C参数控制分类的严格程度,gamma参数影响决策边界形状
- 特征缩放:SVM对特征尺度敏感,标准化是必要步骤
- 模型评估:混淆矩阵和可视化是评估分类效果的有效手段
通过本教程,读者可以掌握SVM的基本实现流程,并理解其核心原理。实际应用中,可以进一步探索不同核函数的效果,以及使用网格搜索进行超参数优化。