機器學習技法第二次作業程式設計題1

2021-07-08 21:56:12 字數 3430 閱讀 5115

用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從輸入空間對映到輸出空間。模型防止過擬合,應該提高其泛化能力,選擇合適的模型 正則化,模型可用...

機器學習第二次作業

模式識別的形式 回歸回歸是分類的基礎,離散的類別值由回歸值做判別決策得到。特徵的特性 特徵向量的相關性 投影殘差向量 歐氏距離 機器學習流程圖 目標函式的作用 引數可能沒有準確解或有無數解,所以要確定近似解 機器學習的方式 無監督式學習 不給定輸出真值 更難 半監督式學習 強化學習 機器自行探索決策...