在机器学习领域,支持向量机(SVM)是一种强大的分类算法,广泛应用于各种数据挖掘任务中。李航的《统计学习方法》是学习SVM的权威教材,本书将带领你从零开始,深入理解SVM的原理,并使用Python代码实现一个简单的SVM模型。
第一章:SVM基础
1.1 SVM简介
支持向量机(Support Vector Machine,SVM)是一种二分类模型,其基本思想是找到最优的超平面,使得两类数据点尽可能分开。SVM的核心是寻找一个最优的超平面,使得两类数据点到超平面的距离最大。
1.2 SVM原理
SVM的核心是求解一个凸二次规划问题,其目标函数为:
[ \min_{\boldsymbol{w}, b} \frac{1}{2} |\boldsymbol{w}|^2 ]
约束条件为:
[ y_i (\boldsymbol{w} \cdot \boldsymbol{x}_i + b) \geq 1 ]
其中,( \boldsymbol{w} ) 是权重向量,( b ) 是偏置项,( \boldsymbol{x}_i ) 是输入特征,( y_i ) 是标签。
1.3 SVM分类器
根据核函数的不同,SVM可以分为线性SVM和非线性SVM。线性SVM适用于线性可分的数据,而非线性SVM则通过核技巧将数据映射到高维空间,从而实现非线性分类。
第二章:Python实现SVM
2.1 Python环境搭建
在开始编写SVM代码之前,需要安装Python和必要的库。以下是安装步骤:
- 下载并安装Python:https://www.python.org/
- 安装NumPy:
pip install numpy - 安装SciPy:
pip install scipy - 安装Matplotlib:
pip install matplotlib
2.2 线性SVM实现
以下是一个简单的线性SVM实现:
import numpy as np
def svm_train(X, y, C=1.0):
# 初始化权重和偏置项
w = np.zeros(X.shape[1])
b = 0
# 迭代更新权重和偏置项
for i in range(len(y)):
if y[i] * (np.dot(X[i], w) + b) < 1:
w += C * y[i] * X[i]
b += C * y[i]
return w, b
# 测试数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.array([1, 1, -1, -1])
# 训练SVM
w, b = svm_train(X, y)
# 预测
def svm_predict(X, w, b):
return np.sign(np.dot(X, w) + b)
# 测试预测
print(svm_predict(X, w, b))
2.3 非线性SVM实现
非线性SVM可以通过核技巧实现。以下是一个使用高斯核函数的SVM实现:
import numpy as np
def gaussian_kernel(x1, x2, sigma=1.0):
return np.exp(-np.linalg.norm(x1 - x2) ** 2 / (2 * sigma ** 2))
def svm_train(X, y, C=1.0, sigma=1.0):
# 初始化权重和偏置项
w = np.zeros(X.shape[1])
b = 0
# 迭代更新权重和偏置项
for i in range(len(y)):
for j in range(len(y)):
if y[i] * y[j] * gaussian_kernel(X[i], X[j], sigma) < 1:
w += C * y[i] * y[j] * (X[i] - X[j])
b += C * y[i] * y[j]
return w, b
# 测试数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.array([1, 1, -1, -1])
# 训练SVM
w, b = svm_train(X, y, sigma=0.5)
# 预测
def svm_predict(X, w, b, sigma=1.0):
return np.sign(np.dot(gaussian_kernel(X, X, sigma), w) + b)
# 测试预测
print(svm_predict(X, w, b, sigma=0.5))
第三章:实战案例
3.1 乳腺癌数据集
使用SVM对乳腺癌数据集进行分类,验证SVM在真实数据上的效果。
3.2 手写数字数据集
使用SVM对手写数字数据集进行分类,比较SVM与其他分类算法的性能。
第四章:总结
通过本章的学习,你将掌握SVM的基本原理和Python实现方法。在实际应用中,SVM可以解决各种分类问题,具有较高的准确率和泛化能力。希望你能将所学知识应用到实际项目中,为机器学习领域贡献自己的力量。