没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1
人工智能和机器学习之分类算法:支持向量机(SVM):线
性可分 SVM 详解
1 支持向量机基础
1.1 1 什么是支持向量机
支持向量机(Support Vector Machine, SVM)是一种监督学习模型,主要用
于分类和回归分析。SVM 的基本思想是找到一个超平面,使得两类样本在该超
平面上的投影间隔最大化。这个超平面被称为最大间隔超平面,而位于间隔边
界上的样本点被称为支持向量。
1.2 2 SVM 的目标与原理
SVM 的目标是最大化分类间隔,即找到一个决策边界,使得正负样本到该
边界的距离尽可能大。原理上,SVM 通过构建一个最优分类超平面来实现这一
目标,该超平面不仅能够正确分类训练数据,而且具有最大的分类间隔,从而
提高模型的泛化能力。
1.2.1 示例代码:使用 Python 的 scikit-learn 库实现 SVM 分类
#
导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
#
加载数据集
iris = datasets.load_iris()
X = iris.data[:, [2, 3]] #
只使用花瓣长度和宽度作为特征
y = iris.target
#
划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)
#
数据预处理
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
2
#
创建
SVM
分类器
svm = SVC(kernel='linear', C=1.0, random_state=1)
svm.fit(X_train_std, y_train)
#
预测
y_pred = svm.predict(X_test_std)
#
计算准确率
print('Accuracy: %.2f' % accuracy_score(y_test, y_pred))
1.3 3 最大间隔分类器概念
最大间隔分类器是 SVM 的核心概念。在二维空间中,这个间隔可以被理解
为分类边界到最近的正负样本点的距离之和。在高维空间中,间隔是超平面到
最近样本点的欧几里得距离的两倍。SVM 通过优化一个凸二次规划问题来找到
这个最大间隔超平面。
1.3.1 示例代码:可视化 SVM 的决策边界
import numpy as np
import matplotlib.pyplot as plt
#
创建数据点
X = np.array([[3, 3], [4, 3], [1, 1]])
y = np.array([1, 1, -1])
#
训练
SVM
clf = SVC(kernel='linear', C=1000)
clf.fit(X, y)
#
绘制决策边界
def plot_decision_boundary(clf, X, y):
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
#
画出决策边界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
#
创建网格来评估模型
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
3
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)
#
画出决策边界
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],
s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.show()
plot_decision_boundary(clf, X, y)
1.4 4 支持向量的定义
支持向量是那些最接近决策边界的样本点,它们决定了分类间隔的大小。
在 SVM 中,只有支持向量对模型的构建有直接影响,其余的样本点对模型的最
终决策边界没有贡献。因此,SVM 是一种稀疏模型,其复杂度主要由支持向量
的数量决定,而不是由样本点的总数决定。
1.4.1 示例代码:识别支持向量
#
使用之前的
SVM
分类器
print('Support vectors:')
print(clf.support_vectors_)
通过上述代码,我们可以看到 SVM 模型训练后识别出的支持向量,这些点
是决定分类间隔的关键样本点。
2 线性可分 SVM 数学模型
2.1 1 线性可分 SVM 的数学形式
在讨论支持向量机(SVM)时,我们首先关注线性可分的情况。假设我们
有一组数据点,每个点都可以用一个向量
x
i
表示,并且每个点都有一个类别标
签
y
i
,其中
y
i
∈
{
−
1
,
+
1
}
。我们的目标是找到一个超平面,能够将不同类别的数
据点完全分开。
2.1.1 目标函数
SVM 寻找的超平面由以下方程定义:
w
⋅
x
+
b
=
0
其中,
w
是权重向量,
b
是偏置项。对于线性可分 SVM,我们希望找到的
超平面能够最大化两类数据点之间的间隔。这个间隔被称为“最大间隔”,它由
以下公式给出:
4
2
|
|
w
|
|
因此,我们的目标函数可以表示为最小化
1
2
|
|
w
|
|
2
,同时满足以下约束条件:
y
i
(
w
⋅
x
i
+
b
)
≥
1
,
∀
i
2.1.2 约束条件
约束条件确保了所有数据点都在决策边界的一侧,并且与决策边界保持至
少单位距离。这保证了分类的准确性。
2.2 2 拉格朗日乘子法引入
直接求解上述优化问题可能较为复杂,因此我们引入拉格朗日乘子法来转
换问题。拉格朗日函数定义为:
L
(
w
,
b
,
α
)
=
1
2
|
|
w
|
|
2
−
n
i
=
1
α
i
[
y
i
(
w
⋅
x
i
+
b
)
−
1
]
其中,
α
i
是拉格朗日乘子,
n
是数据点的数量。我们的目标是最大化
L
关
于
α
,同时最小化关于
w
和
b
。
2.2.1 KKT 条件
通过拉格朗日乘子法,我们应用 KKT 条件来求解优化问题。KKT 条件包括:
1. Primal Feasibility(原问题可行性):满足原始的约束条件。
2. Dual Feasibility(对偶问题可行性):
α
i
≥
0
。
3. Complementary Slackness(互补松弛性):
α
i
[
y
i
(
w
⋅
x
i
+
b
)
−
1
]
=
0
。
4. Stationarity(驻点性):
∇
w
,
b
L
=
0
。
2.3 3 对偶问题的求解
原问题的对偶问题是最大化以下函数:
W
(
α
)
=
n
i
=
1
α
i
−
1
2
n
i
=
1
n
j
=
1
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
同时满足
α
i
≥
0
和
∑
n
i
=
1
α
i
y
i
=
0
。通过求解对偶问题,我们可以得到
α
i
的值,
进而计算出
w
和
b
。
2.3.1 示例代码
下面是一个使用 Python 和 scikit-learn 库实现线性可分 SVM 的示例:
#
导入必要的库
from sklearn import svm
from sklearn.datasets import make_blobs
剩余16页未读,继续阅读
资源评论
kkchenjj
- 粉丝: 2w+
- 资源: 5499
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- dnSpy-net-win32-222.zip
- mongoose-free-6.9
- 德普微一级代理 DP100N06MGL PDFN3.3*3.3 TRMOS N-MOSFET 60V, 8mΩ, 45A
- 【java毕业设计】SpringBoot+Vue幼儿园管理系统 源码+sql脚本+论文 完整版
- 德普微一级代理 DP021N03FGLI DFN5*6 DPMOS N-MOSFET 30V 180A 1.8mΩ
- 巨潮资讯网5000只股票orgId-dict加密字典
- 基于java实现的快速排序代码
- 德普微一级代理 DP3145D SOT23-6 USB PD 协议单口控制器
- 【一文搞懂:什么是集成学习-原理+python代码】
- 国际象棋检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功