You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于fitcsvm的SVM分类:超平面、边界方程及新样本判定

基于fitcsvm的高斯核SVM:分离超平面、边界方程及新样本判定

(a) 获取分离超平面的方程

对于采用高斯核(RBF)的SVM,分离超平面是原始特征空间中的非线性曲面,对应的决策函数形式为:
$$f(x) = \sum_{i \in SV} \alpha_i y_i K(x, x_i) + b = 0$$
其中:

  • $SV$ 代表支持向量集合
  • $\alpha_i$ 是支持向量对应的拉格朗日乘子
  • $y_i$ 是支持向量的类别标签(此处为-1或1)
  • $K(x, x_i) = \exp(-\gamma |x - x_i|^2)$ 是高斯核函数,$\gamma$ 为核参数
  • $b$ 是偏置项

在Matlab的fitcsvm训练得到的模型cl中,可直接提取相关参数:

  • 支持向量:cl.SupportVectors
  • 拉格朗日乘子:cl.Alpha
  • 偏置项:cl.Bias
  • 高斯核参数$\gamma$:cl.KernelParameters.Scale

将参数代入即可得到分离超平面的具体方程。

(b) 获取边界(margin)的方程

SVM的边界对应决策函数值为±1的曲面,方程如下:

  1. 正类侧边界:$\sum_{i \in SV} \alpha_i y_i K(x, x_i) + b = 1$
  2. 负类侧边界:$\sum_{i \in SV} \alpha_i y_i K(x, x_i) + b = -1$

同样可通过cl模型中的参数代入得到具体表达式。

(c) 判定新样本是否处于边界范围内

判断新样本是否在边界范围内,本质是检查该样本的决策函数值是否落在$[-1, 1]$区间内。在Matlab中可通过以下两种方法实现:

方法1:利用predict函数直接获取决策得分

在现有代码基础上,添加如下代码即可完成判定:

% 获取新样本的决策得分
[~, scores_new] = predict(cl, data_new);
% 提取类别1的得分(即决策函数值f(x))
decision_values = scores_new(:, 2);
% 判定是否处于边界范围内:决策值在[-1,1]之间
is_in_margin = (decision_values >= -1) & (decision_values <= 1);

% 输出结果
disp('新样本是否处于边界范围内:');
disp(is_in_margin);

方法2:手动计算决策函数值

若需手动验证,可使用以下代码:

gamma = cl.KernelParameters.Scale;
alpha = cl.Alpha;
sv = cl.SupportVectors;
y_sv = theclass(cl.IsSupportVector); % 支持向量的类别标签
b = cl.Bias;

decision_values = zeros(size(data_new, 1), 1);
for i = 1:size(data_new, 1)
    x = data_new(i, :);
    % 计算高斯核值
    kernel_vals = exp(-gamma * sum((x - sv).^2, 2));
    % 计算决策函数值
    decision_values(i) = sum(alpha .* y_sv .* kernel_vals) + b;
end

% 判定是否在边界内
is_in_margin = (decision_values >= -1) & (decision_values <= 1);

执行代码后,is_in_margin为逻辑数组,true表示对应新样本处于边界范围内,false则反之。

内容的提问来源于stack exchange,提问作者ian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:38:27