📄 svmtrn.asv
字号:
function [alpha_s, y_s, x_s, b0] = SVMtrn(X,y,K,K_p)
% Kernel, K = 1 : Polynomial, K = 2 : RBF, K_p : Kernel Parameter
% alpha_s : Support vector
% y_s & x_s : train data according to S.Vs
% b0 : intercept
Q = zeros(length(X), length(X)); % H = Q
if K == 1
for i = 1:length(X)
for j = 1:length(X)
Q(i,j) = y(i)*y(j)*((X(i,:)*X(j,:)'+1).^K_p);
end
end
elseif K == 2
for i = 1:length(X)
for j =1:length(X)
Q(i,j) = y(i)*y(j)*exp(-((norm((X(i,:)-X(j,:))))^2)/(2*K_p^2));
end
end
else
end
f = -(ones(length(X),1));
Aeq = y';
beq = 0;
lb = zeros(length(X),1);
x0 = zeros(length(X),1);
options = optimset('LargeScale', 'off');
alpha = quadprog(Q+1e-10*eye(length(X)), f, [], [], Aeq, beq, lb, [], x0, options);
% select support vectors.
s_idx = find(alpha > 1e-10);
alpha_s = alpha(s_idx);
y_s = y(s_idx);
x_s = X(s_idx,:);
% compute b0 using first support vector
if K == 1
sum = 0;
for i=1:length(s_idx)
sum = sum + alpha_s(i)*y_s(i)*((x_s(i,:)*x_s(1,:)'+1).^K_p);
end
b0 = y_s(1) - sum;
elseif K == 2
sum = 0;
for i=1:length(s_idx)
sum = sum + alpha_s(i)*y_s(i)*exp(-((norm((x_s(i,:)-x_s(1,:))))^2)/(2*K_p^2));
end
b0 = y_s(1) - sum;
else
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -