首页
/ 100-Days-Of-ML-Code项目解析:支持向量机(SVM)实战教程

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实战要点总结

  1. 核函数选择:线性核适合线性可分数据,非线性问题可尝试RBF等核函数
  2. 参数调优:C参数控制分类的严格程度,gamma参数影响决策边界形状
  3. 特征缩放:SVM对特征尺度敏感,标准化是必要步骤
  4. 模型评估:混淆矩阵和可视化是评估分类效果的有效手段

通过本教程,读者可以掌握SVM的基本实现流程,并理解其核心原理。实际应用中,可以进一步探索不同核函数的效果,以及使用网格搜索进行超参数优化。