Matlab高斯核回归SVM手动实现预测结果错误问题排查咨询
问题排查结果
核心错误1:向量运算维度不匹配
你代码中SV(n,:)'是列向量,而input是1×3的行向量,二者做减法时Matlab会触发自动广播生成3×3的矩阵,norm()函数计算的是矩阵的F范数而非两个向量的欧氏距离,导致范数结果严重偏大,最终G值极小。
核心错误2:RBF核函数缺少缩放参数
Matlab训练的高斯核SVM默认引入了核缩放系数,你实现的核函数没有加入该系数项,不符合训练时的核函数定义。Matlab RBF核的完整公式为:
$G(x,y) = \exp\left(-\frac{|x-y|2}{2\sigma2}\right)$
其中$\sigma$为核缩放参数,可从trainedModel.RegressionSVM.KernelParameters.Scale中读取。
其他注意点
不要使用sum作为变量名,sum是Matlab内置函数,覆盖后可能引发未知问题。
修正后的代码
bias = trainedModel.RegressionSVM.Bias; alpha = trainedModel.RegressionSVM.Alpha; SV = trainedModel.RegressionSVM.SupportVectors; Mu = trainedModel.RegressionSVM.Mu; Sg = trainedModel.RegressionSVM.Sigma; kernel_scale = trainedModel.RegressionSVM.KernelParameters.Scale; % 读取核缩放系数 input = ([0.5 1 50] - Mu) ./ Sg; pred = bias; % 替换sum变量名避免冲突 for n=1:length(alpha) % 修正维度匹配,直接计算两个行向量的欧氏距离平方 dist_sq = sum((SV(n,:) - input).^2); % 完整RBF核计算 G = exp(-dist_sq/(2*kernel_scale^2)); pred = pred + alpha(n) * G; end disp(pred)
内容的提问来源于stack exchange,提问作者ocirocir
相关产品推荐
相关产品推荐

