返回
机器学习入门指南:支持向量机 (SVM) 的奥秘揭晓
人工智能
2023-11-26 09:51:56
支持向量机 (SVM) 简介
支持向量机 (SVM) 是一种监督机器学习算法,特别擅长处理分类和回归问题。SVM 的目标是找到一条最佳超平面,将数据点分隔成不同的类别。
SVM 的数学推导
SVM 的核心在于构造拉格朗日函数并利用 KKT 条件进行求解。
拉格朗日函数
拉格朗日函数为:
L(w, b, \alpha) = \frac{1}{2}w^Tw + C\sum_{i=1}^n\xi_i - \sum_{i=1}^n\alpha_i(y_i(w^Tx_i + b) - 1 + \xi_i)
其中:
- w 和 b 为超平面的权重和偏置
- C 为正则化参数
- \xi_i 为松弛变量
- \alpha_i 为拉格朗日乘子
KKT 条件
求解极值条件的 KKT 条件为:
-
\frac{\partial L}{\partial w} = 0
-
\frac{\partial L}{\partial b} = 0
-
\alpha_i \ge 0
-
\xi_i \ge 0
-
\alpha_i\xi_i = 0
SMO 算法
SMO (Sequential Minimal Optimization) 算法是一种求解 SVM 中二次规划问题的有效算法。它通过将大规模优化问题分解成一系列较小的小型优化问题来提升效率。
关键代码示例
import numpy as np
import cvxopt
# 定义数据
X = np.array([[1, 1], [1, 2], [2, 1]])
y = np.array([1, 1, -1])
# 构造二次规划问题
P = cvxopt.matrix(np.dot(X, X.T) * np.outer(y, y))
q = cvxopt.matrix(np.ones(X.shape[0]) * -1)
G = cvxopt.matrix(np.diag(np.ones(X.shape[0]) * -1))
h = cvxopt.matrix(np.zeros(X.shape[0]))
# 使用 SMO 求解
sol = cvxopt.solvers.qp(P, q, G, h)
# 获取权重和偏置
w = np.array(sol['x'])[:X.shape[1]]
b = np.array(sol['x'])[X.shape[1]]
# 打印结果
print("权重:", w)
print("偏置:", b)
总结
SVM 是一种强大的机器学习算法,其数学基础和 SMO 算法为其提供了出色的性能。通过本文的深入讲解和示例代码,初学者可以掌握 SVM 的核心概念和实现方法。