【机器学习-支持向量机】(含例子+代码)
文章目录
前言
在机器学习的分类算法体系中,支持向量机(SVM) 是最经典且实用的算法之一。SVM 的核心思想是通过最大化类别间隔寻找最优决策边界,不仅巧妙解决了线性可分场景的分类问题,更通过软间隔、核函数等拓展,成功应对了更复杂的线性不可分数据。基于此,本文将从 SVM 的核心概念出发,系统梳理线性硬间隔、软间隔及非线性 SVM 的原理,结合 MATLAB 数据集,通过 Python 代码实现不同类型 SVM 的构建、评估与可视化,重点探究参数对模型分类效果的影响。
一、支持向量机是什么?
支持向量机(Support Vector Machine,SVM)是一种经典的监督式机器学习算法,主要用于分类任务。核心思想是:在特征空间中找到一个最优超平面,最大化不同类别样本之间的间隔,实现对新的样本的准确分类。
接下来我们介绍一下有关支持向量机的核心概念。
1.超平面
超平面是分隔不同类别样本的决策边界,其可以表达为
w
T
x
+
b
=
0
\bm{w}^{T}\bm{x}+b=0
wTx+b=0
- w \bm{w} w:超平面的法向量,决定超平面的方向$
- b:偏置项,决定超平面的位置
-
x
\bm{x}
x:输入的特征向量
数据有多个维度,对于二维数据来说,超平面是一条直线;对于三维数据来说,超平面是一个平面;而对于高维数据来说,超平面则是一个抽象的高维面。
2.间隔(Margin)
间隔是两类样本中距离超平面最近的点到超平面的距离的两倍。SVM的目标就是要找到最大间隔超平面。
- 样本点到超平面的距离可以表示为:
M = ∣ g ( x ) ∣ ∣ ∣ w ∣ ∣ = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ M=\frac{|g(x)|}{||\bm{w}||}=\frac{|\bm{w}^{T}\bm{x}+b|}{||\bm{w}||} M=∣∣w∣∣∣g(x)∣=∣∣w∣∣∣wTx+b∣
即g(x)的绝对值除以向量 w w w的范数 - 为了简化计算,SVM对样本标签做标准化处理(正类y=+1,负类y=-1),并且所有样本都满足:
y
i
(
w
T
x
i
+
b
)
>
=
1
y_i(w^{T}x_i+b)>=1
yi(wTxi+b)>=1
因此最近点的距离为 d m i n = 1 ∣ ∣ w ∣ ∣ d_{min}=\frac{1}{||w||} dmin=∣∣w∣∣1
则总间隔可以表示为 M = 2 d m i n = 2 ∣ ∣ w ∣ ∣ M=2d_{min}=\frac{2}{||w||} M=2dmin=∣∣w∣∣2
最大化间隔可以等价于最小化 1 2 ∣ ∣ w 2 ∣ ∣ \frac{1}{2}||w^2|| 21∣∣w2∣∣
3.支持向量
距离超平面最近的样本成为支持向量,它们是决定超平面位置的关键。超平面仅由这几个数据点决定,其他样本点对超平面无影响。
4.硬间隔&软间隔
硬间隔要求所有样本必须被完全正确分类,且不能落入间隔区域;而软间隔允许部分样本违反间隔约束。同时,通过"惩罚机制"控制违约程度,从而去平衡"最大间隔"和"分类准确性",可以适应SVM线性不可分数据。
5.对偶问题
利用拉格朗日优化方法可以把最大间隔问题转化为对偶问题。
例如硬间隔SVM的原问题是
m
i
n
w
,
b
1
2
∣
∣
w
∣
∣
2
min_{w,b} \frac{1}{2}||w||^2
minw,b21∣∣w∣∣2
s.t.
y
i
(
w
T
x
i
+
b
)
>
=
1
y_i(w^Tx_i+b)>=1
yi(wTxi+b)>=1
为了将带约束的优化问题转化为无约束的问题,将引入拉格朗日乘子
a
i
>
=
0
a_i>=0
ai>=0,构造拉格朗日函数:
L
p
=
1
2
∣
∣
w
∣
∣
2
−
∑
i
−
1
l
a
i
[
y
i
(
w
T
x
i
+
b
)
−
1
]
L_p=\frac{1}{2}||w||^2-\sum_{i-1}^la_i[y_i(w^Tx_i+b)-1]
Lp=21∣∣w∣∣2−i−1∑lai[yi(wTxi+b)−1]
原问题可等价为"最小化拉格朗日函数L_p",因此对
w
w
w和b求偏导并令其为0;
- 对
w
w
w求偏导:
∂ L p ∂ w = w − ∑ i = 1 l a i y i x i = 0 \frac{\partial L_p}{\partial w}=w-\sum_{i=1}^la_iy_ix_i=0 ∂w∂Lp=w−i=1∑laiyixi=0
w = ∑ i = 1 l a i y i x i w=\sum_{i=1}^la_iy_ix_i w=i=1∑laiyixi - 对b求偏导
∂ L p ∂ b = − ∑ i = 1 l a i y i = 0 \frac{\partial L_p}{\partial b}=-\sum_{i=1}^la_iy_i=0 ∂b∂Lp=−i=1∑laiyi=0
然后将 w = ∑ i = 1 l a i y i x i w=\sum_{i=1}^la_iy_ix_i w=∑i=1laiyixi和 ∑ i = 1 l a i y i = 0 \sum_{i=1}^la_iy_i=0 ∑i=1laiyi=0代入 L p L_p Lp,得到对偶问题:
L D = ∑ i = 1 l a i − 1 2 ∑ i , j = 1 l a i a j y i y j ( x i T x j ) L_D=\sum_{i=1}^la_i-\frac{1}{2}\sum_{i,j=1}^la_ia_jy_iy_j(x_i^Tx_j) LD=i=1∑lai−21i,j=1∑laiajyiyj(xiTxj)
L D = ∑ i = 1 l a i − 1 2 a T H a L_D=\sum_{i=1}^la_i-\frac{1}{2}a^THa LD=i=1∑lai−21aTHa(H为核矩阵, H i j = y i y j x i T x j H_{ij}=y_iy_jx_i^Tx_j Hij=yiyjxiTxj)
对偶问题的约束是 ∑ i = 1 l a i y i = 0 且 a i > = 0 \sum_{i=1}^la_iy_i=0 且 a_i>=0 ∑i=1laiyi=0且ai>=0
通过对偶转化,我们将求解w、b转化为求解 a i a_i ai,且对偶问题只涉及 x i T x j x_i^Tx_j xiTxj,可以直接替换为核函数 K ( x i , x j ) K(x_i,x_j) K(xi,xj),实现非线性SVM
二、SVM的分类
1.硬间隔SVM-线性可分
适用于样本完全线性可分的场景,相关公式为:
求解最大化间隔,等价于
m
i
n
w
,
b
1
2
∣
∣
w
∣
∣
2
min _{w,b} \frac{1}{2}||w||^2
minw,b21∣∣w∣∣2,(约束
y
i
(
w
T
x
i
+
b
)
>
=
1
y_i(w^Tx_i+b)>=1
yi(wTxi+b)>=1)
- 对偶问题:
L
p
=
1
2
∣
∣
w
∣
∣
2
−
∑
i
=
1
l
a
i
y
i
(
w
⋅
x
i
+
b
)
+
∑
i
=
1
l
a
i
L_p=\frac{1}{2}||w||^2-\sum_{i=1}^la_iy_i(w·x_i+b)+\sum_{i=1}^la_i
Lp=21∣∣w∣∣2−i=1∑laiyi(w⋅xi+b)+i=1∑lai
L D = ∑ i = 1 l a i − 1 2 a T H a ( H i j = y i y j x i T x j ) ) L_D=\sum_{i=1}^la_i-\frac{1}{2}a^THa (H_{ij}=y_iy_jx_i^Tx_j)) LD=i=1∑lai−21aTHa(Hij=yiyjxiTxj))
2.软间隔SVM-线性不可分
引入松弛变量
ξ
>
=
0
\xi>=0
ξ>=0,允许少量样本违反分类约束,同时加入惩罚项:
m
i
n
(
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
l
ξ
i
)
min(\frac{1}{2}||w||^2+C\sum_{i=1}^l\xi_i)
min(21∣∣w∣∣2+Ci=1∑lξi)(约束
y
i
(
w
T
x
i
+
b
)
>
=
1
−
ξ
i
,
ξ
i
>
=
0
y_i(w^Tx_i+b)>=1-\xi_i,\xi_i>=0
yi(wTxi+b)>=1−ξi,ξi>=0)
其中C为惩罚系数,是“间隔大小”和“分类准确性”的权衡,C越大,对分类错误的惩罚越重,模型容易过拟合;C越小,对分类错误的惩罚越轻,模型容易欠拟合。
- 对偶问题:
L p = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 l ξ i − ∑ i − 1 l a i [ y i ( w ⋅ x i + b ) − 1 + ξ i ] − ∑ i − 1 l μ i ξ i L_p=\frac{1}{2}||w||^2+C\sum_{i=1}^l\xi_i-\sum_{i-1}^la_i[y_i(w·x_i+b)-1+\xi_i]-\sum_{i-1}^l\mu_i\xi_i Lp=21∣∣w∣∣2+Ci=1∑lξi−i−1∑lai[yi(w⋅xi+b)−1+ξi]−i−1∑lμiξi
L D = ∑ i = 1 l a i − 1 2 a T H a L_D=\sum_{i=1}^la_i-\frac{1}{2}a^THa LD=i=1∑lai−21aTHa(约束0<= a i a_i ai<=C,and ∑ i = 1 l a i y i = 0 \sum_{i=1}^la_iy_i=0 ∑i=1laiyi=0)
3.非线性SVM
对于非线性可分的数据,SVM通过核函数将低维特征空间的样本映射到高维特征空间,使其在高维空间中线性可分。
支持向量机引入核函数后,权重w、偏置b以及分类函数g(x)的求解公式变化为:
w
=
∑
i
=
1
l
a
i
y
i
Φ
(
x
i
)
w=\sum_{i=1}^la_iy_i\Phi(x_i)
w=i=1∑laiyiΦ(xi)
-
Φ
(
x
i
)
\Phi(x_i)
Φ(xi):将样本x_i从低维空间映射到高维空间的特征映射函数
w ⋅ Φ ( x j ) = ∑ i − 1 l a i y i Φ ( x i ) ⋅ Φ ( x j ) = ∑ i = 1 l a i y i K ( x i , x j ) w·\Phi(x_j)=\sum_{i-1}^la_iy_i\Phi(x_i)·\Phi(x_j)=\sum_{i=1}^la_iy_iK(x_i,x_j) w⋅Φ(xj)=i−1∑laiyiΦ(xi)⋅Φ(xj)=i=1∑laiyiK(xi,xj) - 利用核函数
K
(
x
i
,
x
j
)
=
Φ
(
x
i
)
⋅
Φ
(
x
j
)
K(x_i,x_j)=\Phi(x_i)·\Phi(x_j)
K(xi,xj)=Φ(xi)⋅Φ(xj),避免了显式计算高维映射
Φ
(
x
)
\Phi(x)
Φ(x)
b = 1 N s ∑ s ∈ S ( y s − ∑ m ∈ S a m y m Φ ( x m ) ⋅ Φ ( x s ) ) = 1 N ∑ s ∈ S ( y s − ∑ m ∈ S a m y m K ( x m , x s ) b=\frac{1}{N_s}\sum_{s∈S}(y_s-\sum_{m∈S}a_my_m\Phi(x_m)·\Phi(x_s))=\frac{1}{N}\sum_{s∈S}(y_s-\sum_{m∈S}a_my_mK(x_m,x_s) b=Ns1s∈S∑(ys−m∈S∑amymΦ(xm)⋅Φ(xs))=N1s∈S∑(ys−m∈S∑amymK(xm,xs)
g ( x ) = ∑ i = 1 l a i y i K ( x i , x ) + b g(x)=\sum_{i=1}^la_iy_iK(x_i,x)+b g(x)=i=1∑laiyiK(xi,x)+b
以下是三种常见的核函数: - 多项式核: K ( x i , x j ) = ( x i ⋅ x j + 1 ) d K(x_i,x_j)=(x_i·x_j+1)^d K(xi,xj)=(xi⋅xj+1)d
- 高斯核: K ( x i , x j ) = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) K(x_i,x_j)=exp(-\frac{||x_i-x_j||^2}{2\sigma^2}) K(xi,xj)=exp(−2σ2∣∣xi−xj∣∣2)
- 双曲正切核: K ( x i , x j ) = t a n h ( κ x i ⋅ x j + c ) K(x_i,x_j)=tanh(\kappa x_i·x_j+c) K(xi,xj)=tanh(κxi⋅xj+c)
三、Python代码实现
1.实验一
基于经典的SVM算法,以ex6data1.mat数据集为基础,实现线性硬间隔/软间隔SVM的构建、评估与可视化,并进一步对比了不同惩罚系数C对于软间隔SVM分类效果的影响。
1.导入依赖库
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
# 解决中文显示和负号问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
2.读取MAT格式的数据集
mat_path = r"D:\ex6data1.mat"
mat_data = loadmat(mat_path)
X = mat_data['X'] # 特征矩阵 (n_samples, n_features)
y = mat_data['y'].ravel() # 将标签向量转为一维数组
X_vis = X.copy()
3.数据预处理
scaler = StandardScaler() #SVM对特征尺度敏感,先进行标准化,将特征转换为均值为0、方差为1的分布
X_scaled = scaler.fit_transform(X_vis) # 全量数据归一化
4.构建硬/软间隔SVM模型并评估
#线性硬间隔SVM
#设置C=1e10,惩罚系数极大,是硬间隔SVM,模型不允许任何样本被误分
svm_hard = SVC(kernel='linear', C=1e10, random_state=42)
svm_hard.fit(X_scaled, y) # 全量数据训练
#线性软间隔SVM(C=1.0),允许少量样本被误分
svm_soft = SVC(kernel='linear', C=1.0, random_state=42)
svm_soft.fit(X_scaled, y) # 全量数据训练
#模型评估
y_pred_hard = svm_hard.predict(X_scaled) #预测标签
acc_hard = accuracy_score(y, y_pred_hard) #计算分类准确率
y_pred_soft = svm_soft.predict(X_scaled) #预测标签
acc_soft = accuracy_score(y, y_pred_soft) #计算分类准确率
5.定义SVM可视化函数
def plot_svm_boundary(model, X, y, title, ax):
"""绘制SVM分类边界、支持向量和数据点"""
# 生成网格点
h = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
# 预测网格点类别
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 绘制决策边界和背景色
ax.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.Paired)
ax.contour(xx, yy, Z, colors='k', linestyles=['-'], levels=[0])
# 绘制全量数据点
ax.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired, edgecolors='k')
# 标出误分样本(如果有)
y_pred = model.predict(X)
mis_idx = np.where(y_pred != y)[0]
if len(mis_idx) > 0:
ax.scatter(X[mis_idx, 0], X[mis_idx, 1],
s=200, facecolor='none', edgecolor='orange', label='误分样本')
# 绘制支持向量
support_vectors = model.support_vectors_
ax.scatter(support_vectors[:, 0], support_vectors[:, 1],
s=100, facecolors='none', edgecolors='red', label='支持向量')
# 设置图表属性
ax.set_xlabel('特征1(归一化)')
ax.set_ylabel('特征2(归一化)')
ax.set_title(title)
ax.legend(fontsize=8)
6.硬/软间隔SVM可视化
fig_origin, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
plot_svm_boundary(
svm_hard, X_scaled, y,
title=f'线性硬间隔SVM(C=1e10)\n准确率:{acc_hard:.4f}',
ax=ax1
)
plot_svm_boundary(
svm_soft, X_scaled, y,
title=f'线性软间隔SVM(C=1.0)\n准确率:{acc_soft:.4f}',
ax=ax2
)
plt.suptitle('线性硬/软间隔SVM对比(全量数据)', fontsize=14)
plt.tight_layout()
plt.show()
7.不同惩罚系数C的软间隔SVM对比
#不同C值软间隔SVM对比
# 定义指定的4个C
C_list = [0.008, 0.01, 0.5, 1]
svm_multi_c = {}
acc_multi_c = {}
# 批量训练多C值模型(全量数据)
print("\n" + "="*40 + " 多C值模型结果(全量数据) " + "="*40)
for c in C_list:
model = SVC(kernel='linear', C=c, random_state=42)
model.fit(X_scaled, y) # 全量数据训练
y_pred = model.predict(X_scaled)
acc = accuracy_score(y, y_pred)
svm_multi_c[f'C={c}'] = model
acc_multi_c[f'C={c}'] = acc
print(f"软间隔SVM(C={c})准确率:{acc:.4f}")
print("="*90)
8.多C值SVM可视化
#不同C值可视化
fig_multi, axes = plt.subplots(2, 2, figsize=(12, 10))
axes = axes.flatten()
# 遍历绘制4个C值的结果
c_keys = list(svm_multi_c.keys())
for idx, c_key in enumerate(c_keys):
plot_svm_boundary(
svm_multi_c[c_key], X_scaled, y,
title=f'软间隔SVM({c_key})\n准确率:{acc_multi_c[c_key]:.4f}',
ax=axes[idx]
)
plt.suptitle('多C值对比:线性软间隔SVM(全量数据)', fontsize=14)
plt.tight_layout()
plt.show()
结果:

- 硬间隔SVM不允许任何误分,准确率达到1.0,支持向量仅3个,决策边界紧贴样本,模型对数据分布的容错性极低
- 软间隔允许存在误分样本,准确率为0.9804,支持向量数量较多,决策边界较宽松,允许少量误分

- C越小:对于误分的容忍度越高,边界越宽松,准确地越低,容易欠拟合
- C越大:对于误分的惩罚越重,边界越严格,准确率越高,容易过拟合
2.实验二
本实验聚焦非显现SVM的核心应用,以ex6data2.mat为数据集,实现以下:
- 探究高斯核关键参数 γ \gamma γ对分类边界的影响
- 对比线性核SVM与最优
γ
\gamma
γ高斯核SVM的分类效果
1.导入依赖库
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
# 解决中文显示和负号问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
2.读取MAT格式的数据集
mat_path = r"D:\ex6data2.mat"
mat_data = loadmat(mat_path)
# 提取特征和标签
X = mat_data['X']
y = mat_data['y'].ravel()
X_vis = X.copy()
X_vis = X.copy()
3.数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_vis) # 全量数据归一化
4.定义对比的 γ \gamma γ值,训练高斯核SVM
#定义待对比的gamma值
#gamma值选择:0.1、1、10、100
gamma_list = [0.1, 1.0, 10.0, 100.0]
# 存储不同gamma的模型和准确率
svm_rbf = {}
acc_rbf = {}
#训练高斯核SVM
print("=" * 40 + " 高斯核SVM(多gamma值)结果 " + "=" * 40)
for gamma in gamma_list:
# 构建RBF核SVM(C=1.0固定,仅调整gamma)
model = SVC(kernel='rbf', gamma=gamma, C=1.0, random_state=42)
model.fit(X_scaled, y) # 全量数据训练
y_pred = model.predict(X_scaled)
acc = accuracy_score(y, y_pred)
svm_rbf[f'gamma={gamma}'] = model
acc_rbf[f'gamma={gamma}'] = acc
print(f"gamma={gamma}:准确率={acc:.4f}")
print("=" * 90)
5.定义高斯核SVM可视化函数
#可视化高斯核分类边界
def plot_rbf_boundary(model, X, y, title, ax):
"""绘制高斯核SVM的非线性分类边界"""
# 生成高密度网格
h = 0.01
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
# 预测网格点类别(非线性边界)
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 绘制非线性决策边界和背景色
ax.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.Paired)
ax.contour(xx, yy, Z, colors='k', linestyles=['-'], levels=[0])
# 绘制全量数据点
ax.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired, edgecolors='k')
# 设置图表属性
ax.set_xlabel('特征1(归一化)')
ax.set_ylabel('特征2(归一化)')
ax.set_title(title)
ax.legend(fontsize=8)
6.不同 γ \gamma γ值高斯核SVM可视化
# 创建子图展示不同gamma值对比
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes = axes.flatten()
# 遍历绘制4个gamma值的结果
gamma_keys = list(svm_rbf.keys())
for idx, gamma_key in enumerate(gamma_keys):
plot_rbf_boundary(
svm_rbf[gamma_key], X_scaled, y,
title=f'高斯核SVM({gamma_key})\n准确率:{acc_rbf[gamma_key]:.4f}',
ax=axes[idx]
)
plt.suptitle('高斯核SVM不同gamma值的非线性分类效果', fontsize=14)
plt.tight_layout()
plt.show()
7.线性核和高斯核SVM对比
#对比线性核vs高斯核
# 训练线性核SVM作为对照
svm_linear = SVC(kernel='linear', C=1.0, random_state=42)
svm_linear.fit(X_scaled, y)
acc_linear = accuracy_score(y, svm_linear.predict(X_scaled))
# 绘制线性核vs最优gamma高斯核对比图
fig_compare, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# 线性核
plot_rbf_boundary(svm_linear, X_scaled, y,
title=f'线性核SVM\n准确率:{acc_linear:.4f}', ax=ax1)
# 最优gamma高斯核(取准确率最高的gamma)
best_gamma = max(acc_rbf, key=acc_rbf.get)
plot_rbf_boundary(svm_rbf[best_gamma], X_scaled, y,
title=f'高斯核SVM({best_gamma})\n准确率:{acc_rbf[best_gamma]:.4f}', ax=ax2)
plt.suptitle('线性核 vs 高斯核分类效果对比', fontsize=14)
plt.tight_layout()
plt.show()
结果:

- γ \gamma γ是高斯核的核心参数, γ \gamma γ越小,核函数作用范围越广,边界越平滑,对于局部数据特征不敏感,易欠拟合,准确率较低
-
γ
\gamma
γ越大,核函数作用范围越窄,模型更容易过度拟合训练数据的细节,边界越复杂,泛化能力会下降,易过拟合

- 体现了非线性核对复杂数据的适配性。高斯核通过核函数将数据映射到高维空间,在高维空间实现线性可分,在原空间呈现非线性决策边界
总结
通过对支持向量机(SVM)的理论梳理与实验验证,对这一经典分类算法的原理、应用场景及超参数调优有了更全面的认识。
从理论层面来看,SVM 以 “最大化间隔” 为目标,通过支持向量确定最优超平面,而对偶问题的转化简化了优化求解,核函数使 SVM 能够通过映射到高维空间解决非线性分类问题。
从实验部分来看,通过两个具体案例验证了理论的实用性:在 ex6data1.mat 的线性数据实验中,硬间隔 SVM(C=1e10)对异常值容错性极低,而软间隔 SVM 通过调整惩罚系数 C,实现了 “间隔大小” 与 “分类准确性” 的平衡。在 ex6data2.mat 的非线性数据实验中,高斯核 SVM 展现了对复杂数据的适配能力,而参数 γ 的调整直接影响核函数的作用范围,其分类效果显著优于线性核 SVM。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)