【问题标题】:Using MATLAB svmtrain使用 MATLAB svmtrain
【发布时间】:2012-11-28 02:17:36
【问题描述】:

这是我的第一个 Matlab 程序。

我正在尝试将 svmtrain 和 svmclassify 与自定义内核一起使用。

假设我的内核是常规的内积。

我应该怎么写?

我做到了:

function [K] = mykernel(U, V)
    for i=size(U,1)
        for j=size(V,1)
            K(i,j) = dot(U(i,:),V(j,:));
        end
    end
    return 
end

然后在命令窗口中:

x=randn(1000,10);
w=rand(1,10);
y=sign(x*w');
a=svmtrain(x,y,'kernel_function',mykernel);

我得到:

Error using mykernel (line 2)
Not enough input arguments.

也许有人有一个不带循环的技巧,比如 U*V',很高兴知道这一点 技巧,但我需要循环执行,因为我要将内积更改为一些更复杂的东西。

我也不是很明白那些 U,V 是什么,我也没有真正明白这个功能是什么 应该返回(是 Gram 矩阵吗?)

感谢您的帮助!!

--- 编辑:

我做了以下事情:

function [K] = mink(U, V)
    for i=1:size(U,1)
        for j=1:size(V,1)
            K(i,j) = min(exp(-dot(U(i,:),U(j,:))),exp(-dot(V(i,:),V(j,:))));
        end
    end
    return 
end

>>x=randn(100,10);
>>w=rand(1,10);
>>y=sign(x*w');
>>a=svmtrain(x,y,'kernel_function',@mink);
>>svmclassify(a, x)
Error using svmclassify (line 114)
An error was encountered during classification.
Attempted to access U(89,:); index out of bounds because size(U)=[88,10].

所以现在 svmtrain 可以工作了,但是 svmclassify 抱怨尺寸错误(它是如何得到 88 的??)

【问题讨论】:

  • 顺便说一句,当我做 svmtrain(x,y,'kernel_function','linear');或任何其他预定义内核,一切正常
  • 检查你的 for 循环。好像你想要i=1:size(....)
  • 正确。这只是一个错字。请看我上次的编辑
  • 你的 y 尺寸是多少?这不是组的向量吗?
  • 你知道那些 u,v 是什么吗?它们具有相同的 x 维度!

标签: matlab svm


【解决方案1】:

为了传递一个函数,你需要使用@ 符号。这显示在the docs 中,引用:

@kfun — 内核函数的函数句柄。核函数必须是以下形式

底线,这会起作用。

a=svmtrain(x,y,'kernel_function',@mykernel);

【讨论】:

  • 你说得对,我也试过了,看到函数被调用,但我仍然无法让它工作。你能解释一下我应该用U,V做什么吗?奇怪的是它们的尺寸与 x 相同。
  • 您很可能只是想要K=U.*V;。但我不确定你真正想要什么功能,所以......
  • 是的,但是 u,v 是什么?他们只是x吗?那么为什么有两个参数呢?当我执行 disp(u),disp(v) 时,我发现它们与一个呼叫不同。这里发生了什么?假设我希望我的 gram 矩阵的 i,j 元素为 min(exp(-||A||),exp(-||B||)),其中 A 是 x 的第 i 行,B 是x 的第 j 行。那我应该怎么写我的函数呢? (忽略它看起来不像一个好的内核,只是为了让我学习如何与那个 matlab 对话)。谢谢!!!
  • 它们是 x 和 y。维基百科在en.wikipedia.org/wiki/Support_vector_machine#Formal_definition 对此进行了讨论
  • 但是当我显示它们的大小时,它们的大小是 x 而不是 y。请看我的编辑
猜你喜欢
  • 2013-04-06
  • 2016-07-07
  • 2012-12-15
  • 1970-01-01
  • 2015-05-24
  • 2012-12-09
  • 2014-08-19
  • 2017-02-13
  • 2012-10-11
相关资源
最近更新 更多