【问题标题】:Matlab libsvm - couldn't find the vector coefficients wMatlab libsvm - 找不到向量系数w
【发布时间】:2014-05-09 05:43:03
【问题描述】:

我的数据矩阵是一个 1000x65K 的矩阵,其中包含 500 个正例和 500 个负例。我的标签是 [ones(500,1); -ones(500,1)];

我正在使用以下代码训练线性支持向量机:

cost = 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);

我google了一下,发现系数向量w可以用下面的代码找到:

w = model.SVs' * model.sv_coef;

但这给了我一个标量,而不是系数向量。

我也试过了:

w = (SVRModel.sv_coef' * full(SVRModel.SVs));

有人可以澄清我如何找到向量系数 w 吗?

谢谢,

吉尔。

【问题讨论】:

    标签: matlab machine-learning


    【解决方案1】:

    我认为您在尝试将其作为 Matlab 中的一个内衬来完成时已经溺水了。你需要实现这个等式:

    所以 w 是这样的

    w = zeros(1,65000);
    for i=1:1000,
        w = w + model.sv_coef(i)*model.SVs(i,:)
    end
    

    Matlab 会很好地让您知道尺寸不匹配。一旦你明白了,写一个单行就不难了,但重要的是理解计算,而不是单行。

    【讨论】:

    • 感谢您的回答 (+1)。我得到向量 w 中的所有值都是相同的。这个怎么可能?我应该补充说我的功能是 0 或 1。谢谢。编辑:另外,系数都是 10 或 -10,支持向量只是 848 个特征向量。
    猜你喜欢
    • 2012-04-25
    • 2014-05-12
    • 2013-04-04
    • 2012-12-17
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多