用adaboost的方法對所給資料點進行分類。
matlab**:
data_train = load('hw2_adaboost_train.dat');
figure(1);
plot(data_train(data_train(:,3)==1,1),data_train(data_train(:,3)==1,2),'r*'); hold on
plot(data_train(data_train(:,3)==-1,1),data_train(data_train(:,3)==-1,2),'bo'); %畫圖
t = 300;
n = size(data_train,1);
feature = size(data_train,2) - 1;
%for iter=1:t %偽**邏輯示意
% for i=1:2
% for j=1:n
% thred遍歷
% end
% 最優(閾值,s)
% end
% 最優(閾值,s,i)
% 更新u
%end
for i = 1:feature
%先對feature進行排序,會比較節約時間,三維陣列存放
sdata_f(:,:,i) = sort(data_train,i,'ascend');
endq16 = ;
theta_iter = ones(t,1); %記錄每次迭代獲得的引數
s_iter = ones(t,1);
i_iter = ones(t,1);
alpha_iter = ones(t,1);
u = ones(n,1)/n; %u權值初始化,原資料,沒有排序前的順序
in_pre = zeros(n,1);
for iter = 1:t
err_iter = 1;
for i = 1:2
sdata = sdata_f(:,:,i);
%初始化,theta負無窮
theta = -inf;
pre = sign(data_train(:,i)-theta); %先預設s=1,之後糾正
errj = sum(u(pre~=data_train(:,3)))/sum(u);
sj = 1;
if errj > 0.5
sj = -1;
errj = 1-errj;
endfor j = 1:n-1
s = 1;
theta_temp = (sdata(j,i)+sdata(j+1,i))/2;
pre = sign(data_train(:,i)-theta_temp);
err_temp = sum(u(pre~=data_train(:,3)))/sum(u);
if err_temp > 0.5
s = -1;
err_temp = 1-err_temp;
endif err_temp < errj
errj = err_temp; %更新errj
theta = theta_temp; %記錄theta,s
sj = s;
endend
if errj < err_iter
err_iter = errj;
theta_iter(iter) = theta; %迭代記錄
s_iter(iter) = sj;
i_iter(iter) = i;
endend
q16 = [q16 err_iter]; %question 16
diamonds_t = sqrt((1-err_iter)/err_iter);
alpha_iter(iter) = log(diamonds_t);
pre = s_iter(iter)*sign(data_train(:,i_iter(iter))-theta_iter(iter));
in_pre = alpha_iter(iter).* pre + in_pre;
u(pre~=data_train(:,3)) = u(pre~=data_train(:,3)) * diamonds_t; %update u.
u(pre==data_train(:,3)) = u(pre==data_train(:,3)) / diamonds_t;
sum(u); %question 15
figure(2)
hold on
if i_iter(iter)==1
plot([theta_iter(iter),theta_iter(iter)],[0,1],'color',[0.8,0.8,0.8]);
else
plot([0,1],[theta_iter(iter),theta_iter(iter)],'color',[0.8,0.8,0.8]);
endend% in_pre = sign(in_pre);
% plot(data_train(in_pre==1,1),data_train(in_pre==1,2),'r*'); %畫圖
% hold on
% plot(data_train(in_pre==-1,1),data_train(in_pre==-1,2),'bo');
%test
data_test = load('hw2_adaboost_test.dat');
plot(data_test(data_test(:,3)==1,1),data_test(data_test(:,3)==1,2),'r*');hold on %畫圖
plot(data_test(data_test(:,3)==-1,1),data_test(data_test(:,3)==-1,2),'bo'); %畫圖
out_pre = zeros(size(data_test,1),1);
for i=1:t
out_pre = s_iter(i).*sign(data_test(:,i_iter(i))-theta_iter(i)) + out_pre;
endout_pre = sign(out_pre);
figure(3)
plot(data_test(out_pre==1,1),data_test(out_pre==1,2),'r*'); hold on %畫圖
plot(data_test(out_pre==-1,1),data_test(out_pre==-1,2),'bo');
sum(out_pre~=data_test(:,3))/size(data_test,1)
**有點亂,不過邏輯大概如此。 機器學習第二次作業
學習心得 轉眼間這門課就結課了,但是每一次上課都會比較印象深刻,因為雖然都是線上學習,但是每門課的教學方式也不同,這門課是當時第一門大家比較集中性討論的課程。這次特殊的時期 特殊的經歷也帶來了不一樣的學習方式。為了適應線上學習,我在原本大學以來的學習習慣上進行了一定的修改。自大學以來,課程種類雜多,...
機器學習第二次作業
導圖 知識點總結歸納 第二節第三節 第四節第五節 第六節課後總結 模式識別是根據已有知識的表達,針對待識別模式,判別決策其所屬的類別或者 其對應回歸值。其數學解釋可以看作為一種函式對映f x 將待識別模式x從輸入空間對映到輸出空間。模型防止過擬合,應該提高其泛化能力,選擇合適的模型 正則化,模型可用...
機器學習第二次作業
模式識別的形式 回歸回歸是分類的基礎,離散的類別值由回歸值做判別決策得到。特徵的特性 特徵向量的相關性 投影殘差向量 歐氏距離 機器學習流程圖 目標函式的作用 引數可能沒有準確解或有無數解,所以要確定近似解 機器學習的方式 無監督式學習 不給定輸出真值 更難 半監督式學習 強化學習 機器自行探索決策...