Hi,我是Johngo~
今儿和大家来了关于支持向量机的一些核心逻辑和精华的理论部分。
首先,支持向量机(Support Vector Machine, SVM)是一种监督学习模型,常用于分类和回归分析。
SVM 的主要思想是通过在特征空间中找到一个最佳的分割超平面,以最大化类间的间隔(即支持向量的间隔),从而实现对数据的分类。
有几个关键的点,大家可以先看看:
其次, 在工作原理方面:
当然,SVM在高维空间中仍然有效,在样本较少的情况下依然能表现良好。而且通过使用不同的核函数,能够处理非线性分类问题。
但是,对于非常大的数据集,计算开销较大,对于噪声较多的数据集(如重叠数据集),效果不佳。而且需要选择合适的核函数和参数,参数调节较为复杂。
上述所有的特点,大家不难看出,支持向量机在许多分类问题中都表现出色,同时也是最常用的算法之一。
支持向量机 的核心逻辑是寻找一个最佳分割超平面,使得两类数据点之间的间隔最大化。
在一个二分类问题中,假设我们有一个训练集 ,其中 是第 个样本的特征向量, 是对应的标签。支持向量机试图找到一个线性分割超平面:
其中, 是权重向量, 是偏置。
定义到超平面的几何间隔为:
我们希望最大化这个间隔。
对于任何一个样本 ,如果它被正确分类,则有:
为了找到最大化间隔的超平面,我们需要解决以下优化问题:
同时满足约束条件:
引入拉格朗日乘子 ,构建拉格朗日函数:
对 和 求偏导数并令其等于零:
对 求导:
从而得到:
对 求导:
从而得到:
将这些结果代入拉格朗日函数,得到对偶问题:
同时满足约束条件:
通过求解这个对偶问题,可以得到最优的 ,从而得到最优的 和 。
对于新的样本 ,分类决策函数为:
对于线性不可分的情况,引入核函数 进行高维空间映射:
对偶问题变为:
约束条件不变。
对于新的样本 ,分类决策函数为:
以上,就是支持向量机实现了最大化间隔的核心逻辑,并通过核方法扩展了其应用范围。
接下来,我们用代码实现一个简单的案例,针对上述的核心部分,进行代码的实现~
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import svm
from sklearn.datasets import make_circles
from sklearn.preprocessing import StandardScaler
# 生成非线性可分的数据集
X, y = make_circles(n_samples=100, factor=0.5, noise=0.1)
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 使用 RBF 核函数的 SVM 分类器
clf = svm.SVC(kernel='rbf', C=1.0, gamma=0.5)
clf.fit(X, y)
# 创建一个网格来绘制决策边界
xx, yy = np.meshgrid(np.linspace(-2, 2, 100), np.linspace(-2, 2, 100))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 绘制数据点
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
# 绘制数据点
ax.scatter(X[y == 0, 0], X[y == 0, 1], 0, c='b', marker='o', label='Class 0')
ax.scatter(X[y == 1, 0], X[y == 1, 1], 0, c='r', marker='^', label='Class 1')
# 绘制决策边界
ax.plot_surface(xx, yy, Z, cmap='coolwarm', alpha=0.3)
ax.set_xlabel('X1')
ax.set_ylabel('X2')
ax.set_zlabel('Decision Function')
ax.set_title('3D Decision Boundary of SVM with RBF Kernel')
plt.legend()
plt.show()
make_circles
函数生成一个非线性可分的数据集,并使用StandardScaler
进行标准化处理。matplotlib
中的Axes3D
绘制三维图形,包括数据点和决策边界。其中:
代码中,展示了SVM如何使用核函数将非线性问题转换为线性问题,并找到最佳的分类超平面。