资源简介
中国科学院大学 电子学院 机器学习与应用 作业 序列优化算法改写
代码片段和文件信息
% my_seqminopt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%请使用自己设计的SMO算法替代原Matlab的SMO算法
% [alpha bias] = seqminopt(training groupIndex ...
% boxconstraint tmp_kfun smo_opts);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [alpha bias] = my_seqminopt(training_data Labels boxconstraint kernel_func smo_opts)
N = length(training_data);%计算样本数量
alpha = zeros(N1);%初始话所有的拉格朗日橙子
bias = 0.0;%初始化偏移量
num_changed = 0;%拉格朗日橙子改变的个数
exam_all = 1;%是否检查全部乘子
while num_changed >0 || exam_all
num_changed = 0;
if exam_all==1
for i=1:N
num_changed = num_changed + examineExample(i);
end
else
for i = 1:N
if (alpha(i) ~= 0 && alpha(i)~= boxconstraint(i))
num_changed = num_changed+examineExample(i);
end
end
end
if exam_all == 1
exam_all =0;
elseif num_changed == 0 %当乘子全部检查完后,标志位置1
exam_all = 1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 检查样本。
% 首先判断i2是否满足KKT条件,如果不满足,则根据启发式规则再选择i1样本,
% 然后更新i1和i2的拉格朗日乘子。
function [flag] = examineExample(i2)
y2 = Labels(i2);
alpha2 = alpha(i2);
E2 = wxpb(i2) - y2;
r2 = E2 * y2;
if (r2 < -smo_opts.TolKKT && alpha2 < (i2)) || (r2 > smo_opts.TolKKT && alpha2 > 0)
i1 = selectSecondChoice(i2 E2);
if i1 == -1
i1 = floor(1 + rand() * N); % 随机选一个i1
while i1 == i2
i1 = floor(1 + rand() * N);
end
flag = takeStep(i1i2);
else
flag = takeStep(i1i2);
end
else
flag = 0;
end
end
% 计算当前参数下第idx个样本的函数输出
function [svm_o] = wxpb(idx)
svm_o = 0.0;
for j = 1 : N
svm_o = svm_o + alpha(j) * Labels(j) * kernel_func(training_data(j:)training_data(idx:));
end
svm_o = svm_o + bias;
end
% 选定第二个变量i2后,根据max|E1-E2|的启发式规则,选择i1;
% 如果没有满足条件的i1,返回-1.
function [i1] = selectSecondChoice(i2 E2)
i1 = -1;
maxDelta = -1;
for j = 1 : N
if j ~= i2 && alpha(j) ~= 0 && alpha(j) ~= boxconstraint(j)
Ej = wxpb(j) - Labels(j);
if abs(E2 - Ej) > maxDelta
i1 = j;
maxDelta = abs(E2 - Ej);
end
end
end
end
% 根据选定的两个变量i1i2,代入更新公式计算;
% 最后还更新了偏移量offset,也就是y=wx+b中的b。
function [flag] = takeStep(i1 i2)
alpha1 = alpha(i1);
y1 = Labels(i1);
E1 = wxpb(i1) - y1;
alpha2 = alpha(i2);
y2 = Labels(i2);
E2 = wxpb(i2) - y2;
s = y1 * y2;
if y1 ~= y2
L = max(0 alpha2 - alpha1);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4654 2018-05-07 09:19 my_seqminopt.m
文件 825 2018-05-01 10:39 my_svm.m
文件 10425 2018-05-01 16:29 my_svmtrain.m
相关资源
- 什么是极限学习机
- kNN相关代码和数据
- 机器学习研究现状与发展趋势
- 国科大中科院黄庆明2018级机器学习与
- 人工智能大作业pacman满分代码
- 2018机器学习试题.doc
- 预测波士顿房价
- 机器学习复习资料2
- ESN和CRJ网络
- AdaBoost实战代码
- 支持向量机实战代码全
- 逻辑回归实战代码
- 浅析机器学习的研究与应用
- 2017年最新机器学习与深度学习从基础
- 基于BP神经网络的企业核心竞争力评价
- 机器学习课后习题答案(整理所有版
- Adaboost训练和测试代码
- CMU机器学习讲义
- 李宏毅机器学习中文课程全套视频
- 人工智能-知识图谱-实战.docx
- PRML模式识别与机器学习 习题答案完整
- 人工智能实验报告2份 Prolog语言编程练
- 人工智能及其应用课后答案
- libsvm-3.20.zip
- A*算法实现迷宫问题
- 基于tensorflow的猫狗图片的识别分类
- 智能扫地机器人全覆盖遍历路径规划
- 专家系统的实现代码和实验报告
- 漏洞推断-利用机器学习辅助发现漏洞
- 使用C5.0决策树识别高风险银行贷款
评论
共有 条评论