這是我第一個Matlab程序。使用MATLAB svmtrain
我正在嘗試使用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',這將是很高興知道這個技巧,但我需要做循環,因爲我要改變t他內心的產品要更復雜一些。
我還沒有真正理解什麼是那些U,V,我並沒有真正得到這個功能 應該返回什麼(是革蘭氏矩陣?)
感謝您的幫助!
---編輯:
我做了以下內容:
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抱怨大小mismath(它是如何得到88?)
btw當我做svmtrain(x,y,'kernel_function','linear');或任何其他預定義的內核,一切都很好 –
檢查你的循環。好像你想'i = 1:size(....)' – Squazic
沒錯。這只是一個錯字。請看我最後的編輯 –