资源简介
中国科学院大学 电子学院 机器学习与应用 作业 序列优化算法改写

代码片段和文件信息
% 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
相关资源
- 推箱子及人工智能寻路C 源代码
- 北航人工智能原理课大作业源代码,
- ppt 机器学习.ppt
- Logistic回归总结非常好的机器学习总结
- Convex Analysis and Optimization (Bertsekas
- 机器学习个人笔记完整版v5.2-A4打印版
- AI人工智能学习资料全套
- JUNIOR:粒子物理学中无监督机器学习
- 语料库.zip
- 中国科学技术大学 研究生课程 机器学
- 遗传算法越野小车unity5.5
- 用户网络行为画像 大数据中的用户网
- 吴恩达机器学习编程题
- shape_predictor_68_face_landmarks.dat.bz2 68个标
- 机器学习实战高清pdf,中文版+英文版
- 李宏毅-机器学习(视频2017完整)
- 机器学习深度学习 PPT
- 麻省理工:深度学习介绍PPT-1
- 中科院自动化所历年模式识别博士题
- Wikipedia机器学习迷你电子书之四《D
- 华南理工大学人工智能期末考试卷
- Learning From Data Yaser S. Abu-Mostafa
- LabVIEW实现Fuzzy_PID的补充资源
- 微信小程序Demo/---欧拉蜜自然语言理解
- 微信小程序完整Demo--支持人工智能对
- 艾媒-2017年中国人工智能产业专题研究
- 工信部人工智能产业人才岗位能力标
- AMiner:2018年人工智能之自动驾驶研究
- 艾瑞咨询:2018年中国人工智能+金融行
- 北大林宙辰:机器学习一阶算法的优
评论
共有 条评论