資源簡介
中國科學院大學 電子學院 機器學習與應用 作業 序列優化算法改寫

代碼片段和文件信息
%?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
評論
共有 條評論