我的数据矩阵是一个1000x65K的矩阵,包含500个正样本和500个负样本。我的特征是二进制的(0或1)。我的标签是[ones(500,1); -ones(500,1)];
我使用以下代码训练线性SVM:
ost = 0.1;epsilon = 2;gamma = 0.1;degree = 3;coef0 = 0;options_string = ['-s 0 -t 0 ' ' -c ' num2str(cost) ' -p ' num2str(epsilon) ' -g ' num2str(gamma) ' -d ' num2str(degree) ' -r ' num2str(coef0) ' -b 1'];SVRModel = svm_train(data, labels , options_string);
我使用以下代码计算系数向量w:
w = zeros(1,M);for i=1:length(SVRModel.sv_coef) w = w + SVRModel.sv_coef(i)*SVRModel.SVs(i,:);end
然而,结果向量w的所有值都是相同的。此外,我得到了484个支持向量,前424个SVM系数都是0.1,其余的(也是424个)都是-0.1。
这是怎么回事?谁能帮我解答这个问题?
谢谢,
Gil.
回答:
首先,在线性SVM中,你不需要gamma
和coef0
。
其次,我认为在你的训练过程中应该是
SVRModel = svm_train(labels, data, options_string);
你可以将权重和偏置项向量化。
w = model.SVs' * model.sv_coef;b = -model.rho;