• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: Matlab
  • 标签: svm  

资源简介

这个代码是运行好的,拿来就可用。编写简洁易懂

资源截图

代码片段和文件信息


function [Crate] = SVMK(XYCdelta_kXtestYtest)
%  X  一训练样本
%  Y  一训练样本类别
%  C  一 惩罚系数
% delta_k  一高斯核函数参数
%  Xtest  一 正测试样本
%  Ytest  一负测试样本
[ndim] = size(X);
% H = zeros(nn);
% for i = 1:n
%     for j= 1:n
%         H(ij) = Y(i1)*Y(j1)*kernel(X(i:)X(j:)kerType) ;%X(i:)*X(j:)‘;
%     end
% end  %Dij = YiYjK(XiXj)
H = (Y*Y‘).*exp(-delta_k^2*(dist(XX‘).^2));%kernel(XXkerType);% kerType为linear或rbf
f = -ones(n1);
A = [];
b = [];
Aeq = Y‘;
beq = 0;
lb = zeros(n1); % alphas > = 0
ub = C*ones(n1); % alphas < = C
x0 = zeros(n1); % 赋初值[00...0]
options = optimset;    % Options是用来控制算法的选项参数的向量
options.LargeScale = ‘off‘;
options.Display = ‘off‘;
[xfvalexitflag] = quadprog(HfAbAeqbeqlbubx0options);  % 调用quadprog函数
a = x;
epsilon = 1e-8; 
%display(a);
sv_label = find(abs(a)>epsilon);  %0a = a(sv_label);
Xsv = X(sv_label:);
Ysv = Y(sv_label);
num = length(Ysv);
% %% 求w     
% W = zeros(1dim);
% for i = 1:num
%     W = W+ a(i1)*Ysv(i)*Xsv(i:);
% end
%% 求b 
b=(1/num)*sum(Ysv - sum((Ysv*a‘).*exp(-delta_k^2*(dist(XsvXsv‘).^2))2));
%% 预测
%%正样本预测
Ptest_n = size(Xtest1);
PS = sign(exp(-delta_k^2*(dist(XtestXsv‘).^2))*(a.*Ysv)+b*ones(Ptest_n1));  %计算+b的符号
Pc_num = length(find(PS==1));  %正样本中判断正确的样本个数
Pf_num = length(find(PS==-1));  %正样本中判断错误的样本个数
%%负样本预测
Ntest_n = size(Ytest1);
NS = sign(exp(-delta_k^2*(dist(YtestXsv‘).^2))*(a.*Ysv)+b*ones(Ptest_n1));  %计算+b的符号
Nc_num = length(find(NS==-1));  %正样本中判断正确的样本个数
Nf_num = length(find(NS==1));  %正样本中判断错误的样本个数
%%正确率
Crate = (Pc_num+Nc_num)/(Pc_num+Pf_num+Nc_num+Nf_num);
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1809  2014-11-21 11:56  SVMK.m
     文件        1667  2014-11-21 11:59  SVML.m

评论

共有 条评论