基于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的曲面,方程如下:
- 正类侧边界:$\sum_{i \in SV} \alpha_i y_i K(x, x_i) + b = 1$
- 负类侧边界:$\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
相关产品推荐
相关产品推荐

