機器學習上機作業(yè)_第1頁
機器學習上機作業(yè)_第2頁
機器學習上機作業(yè)_第3頁
機器學習上機作業(yè)_第4頁
機器學習上機作業(yè)_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Gradient Descent1.題目描述: 用梯度下降法對所給數(shù)據進行一元線性回歸。2.算法描述及步驟:回歸在數(shù)學上來說是給定一個點集,能夠用一條曲線去擬合之,如果這個曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸,回歸還有很多的變種,如locally weighted回歸,logistic回歸,等等。對于梯度下降法來說,可以先對數(shù)據作出一個估計函數(shù):在這兒稱為參數(shù),表示每個特征的重要性。為了如果我們令X0 = 1,就可以用向量的方式來表示了:然后需要一個機制去評估是否比較好,所以說需要對我們做出的h函數(shù)進行評估,一般這個函數(shù)稱為損失函數(shù)(loss funct

2、ion)或者錯誤函數(shù)(error function),描述h函數(shù)不好的程度,在下面,我們稱這個函數(shù)為J函數(shù)。在這兒我們可以做出下面的一個錯誤函數(shù):梯度下降法是按下面的流程進行的:(1)首先對賦值,這個值可以是隨機的,也可以讓是一個全零的向量。(2)改變的值,使得J()按梯度下降的方向進行減少。對于函數(shù)J()求偏導:下面是更新的過程,也就是i會向著梯度最小的方向進行減少。i表示更新之前的值,-后面的部分表示按梯度方向減少的量,表示步長,也就是每次按照梯度減少的方向變化多少。3.程序代碼及解釋:clear all;load shujusizeshuju=size(shuju);x=shuju(:,

3、1)'y=shuju(:,2)'plot(x,y,'+');hold on;syms theta0 theta1theta00=1;%初始化值theta11=1; alpha=0.005;%設定迭代步長n=0;J=0;while 1 n=n+1; J=0; for i=1:sizeshuju(1) J=J+(theta0+theta1.*x(i)-y(i).2; end J=J/(2*sizeshuju(1); gJ=diff(J,theta0) diff(J,theta1); gJ=subs(gJ,theta1,theta11); gJ=subs(gJ,the

4、ta0,theta00); if norm(gJ)<0.3 break; end theta00=theta00-alpha*gJ(1);%根據公式,更新值。 theta11=theta11-alpha*gJ(2);endh=theta11.*x+theta00; J=0; for i=1:sizeshuju(1) J=J+(h(i)-y(i).2; endx2=1:0.01:5;%畫擬合直線和點數(shù)據分布y2=theta00+theta11.*x2;plot(x2,y2,'r');theta00 %顯示最終theta11J=J/(2*sizeshuju(1) ;%計算損失

5、函數(shù)值n %顯示算法迭代次數(shù)4.實驗結果:由結果可知,算法迭代63次才得以收斂,theta 的值為1.2463,1.9055。擬合直線:損失函數(shù)J隨n的變化曲線:Logistic Regression1.題目描述:You are offered a Yale and ORL dataset (Facial datasets). You are asked to write a program in MATLAB, to use logistic regression to do a binary classification task and test your method. The cla

6、sses (two classes)、the number of training samples and test samples are decided by yourself . Please compute the recognition accuracy.2.算法描述:對于目標值是離散變量的兩分類問題,假設目標值是0,1,所以先改變模型使其預測值在0,1之間,選擇這樣一個函數(shù):有了這個函數(shù),對于對于一個樣例,就可以得到它分類的概率值:將上述公式組合起來,就可以得到公式如下:而在logistic回歸問題中的損失函數(shù)與線性回歸中的損失函數(shù)不同,這里定義的為:對上式求最大似然估計并用梯度下

7、降法求解極值,得到參數(shù)的更新迭代公式:根據上式,將預測得到的數(shù)據的分類,標準分類帶入上式并迭代,直至算法收斂,就可以得到最終的參數(shù)。3.編程實現(xiàn)步驟:(1)初始化參數(shù),迭代步長;(2)導入數(shù)據;(3)計算損失函數(shù);(4)梯度下降法求解;(5)參數(shù)更新;(6)測試數(shù)據,得到準確率。4.程序代碼及解釋:clear all;%因為logistic只能進行2分類,而Yale and ORL數(shù)據中卻有很多類,從中選擇兩類的話難免數(shù)據兩太少,所以,本程序用到了weather數(shù)據,同樣可以進行正確的練習A=load('C:UserslisaiDesktopweather.mat');data

8、=A.Data;label=A.Label;%原始數(shù)據有多類,但是由于logistic regression只能進行兩分類的任務,所以,把數(shù)據的第二、三類挑出來,作為要處理數(shù)據的第0、1類。select=find(label>1);data=data(select,:);label=label(select,:);label(label=2)=0;label(label=3)=1;dsize=size(data);ran=randperm(dsize(1);data=data(ran,:);label=label(ran,:);onesColum=ones(dsize(1),1);dat

9、a=data,onesColum;train_data=data(1:300,:);%隨機選擇測試樣本和訓練樣本。test_data=data(301:dsize(1),:);test_label=label(301:dsize(1),:);train_label=label(1:300,:);thetasize=dsize(2)+1;theta=zeros(thetasize,1);%初始化theta的值。esp=0.00001;%loss=inf;iter=0;maxiter=10000;%定義最大迭代次數(shù),防止算法不收斂alpha=0.1;%初始化J,alphaJ=0;flag=1;wh

10、ile flag && iter<maxiter hypothesis=-(train_data*theta);% for i=1:300 hypothesis(i)=1/(1+exp(hypothesis(i); end loss=0;%更新theta值 for j=1:thetasize updata=(hypothesis-train_label)'*train_data(:,j)*alpha; theta(j)=theta(j)-updata; end J_old=J; for i=1:300%計算損失函數(shù) J=J+(hypothesis(i)-train

11、_label(i)2; end if abs(J-J_old)<esp %判斷損失函數(shù)值是否收斂 flag=0; end iter=iter+1;enditerright=0;for i=1:60 %對測試樣本進行測試,計算準確率 hypo=1/(1+exp(-test_data(i,:)*theta); if hypo>=0.5 if test_label(i)=1 right=right+1; end else if test_label(i)=0 right=right+1; end endendacc=right/605.運行結果:6.反思總結:老師給的數(shù)據有好多種類,不適

12、合用logistic進行分類,所以從中選擇了兩類數(shù)據進行分類。在數(shù)據處理上不是很熟練,本道題需要隨機在原始數(shù)據中選擇訓練樣本和測試樣本,才能得到較好的結果。算法原理很簡單,就是不停的迭代,更新系數(shù),但logistic容易產生過擬合的現(xiàn)象,這對分類結果顯然是很不利的。Perceptron1.題目描述:Train the designed network using the training samples provided below,and test the effectiveness of the network using the test samples.The training exa

13、mples are:P_train=-1 1 0 3 2 2 1 -1 -2 -1;0 1 2 1 -1 0 -2 2 1 1;T_train=0 0 0 0 0 0 0 1 1 1; 0 0 0 0 1 1 1 0 0 0;The testing examples are:P_test= -2,0,3;2,1,-1;T_test=1,0,0;0,0,1;After the above process, draw the learned classification line and the corresponding samples in the 2D space.2.算法描述: (1)本題

14、中感知器有兩個輸出,有三個類別,所以應該設計兩個感知器進行判別;(2)初始化增廣權向量w和b,迭代次數(shù)time=100;(3)輸入訓練數(shù)據p_train,計算判別函數(shù)值(4)設數(shù)據正確輸出為t,令,則下次迭代的(5)重復上述步驟,直至達到最大迭代次數(shù)100。3.程序代碼及解釋:clear all;p_train=-1 1 0 3 2 2 1 -1 -2 -1; 0 1 2 1 -1 0 -2 2 1 1;t_train=0 0 0 0 0 0 0 1 1 1; 0 0 0 0 1 1 1 0 0 0;P_test= -2,0,3; 2,1,-1;'T_test=zeros(2,3);p

15、=p_train'x=p(:,1);P_test(:,1)y=p(:,2);P_test(:,2)plot(x,y,'*');hold ont=t_train'psize=size(p);theta=0 0;0 0; %初始化thetab(1)=0;for time=1:100 for i=1:psize(1) e=t_train(1,i)-hardlim(theta(1,:)*p(i,:)'+b(1);%e=t-a theta(1,:)=theta(1,:)+e*p(i,:);%theta=theta+e*p b(1)=b(1)+e;%b=b+e,以下

16、同上 endendb(2)=0;for time=1:100 for i=1:psize(1) e=t_train(2,i)-hardlim(theta(2,:)*p(i,:)'+b(2); theta(2,:)=theta(2,:)+e*p(i,:); b(2)=b(2)+e; endendthetabx2=-2:0.1:3;y2=(-b(1)-theta(1,1).*x2)/theta(1,2);%畫兩條判別線,將數(shù)據分類plot(x2,y2,'r');hold onx3=-2:0.1:3;y2=(-b(2)-theta(2,1).*x2)/theta(2,2);p

17、lot(x2,y2,'g')for i=1:2 for j=1:3 T_test(i,j)=hardlim(theta(i,:)*P_test(j,:)'+b(i); endendT_test4.運行結果:(1)數(shù)據點及分界線:(2)theta、b、測試數(shù)據輸出結果:與題目給出結果對比,完全相同!5.反思總結: 在課堂上學的感知器學習算法都是多個輸入,單個輸出,但是這道題卻是多個輸入多個輸出的形式,剛開始做的時候有點丈二和尚摸不著頭腦,后來思考了一會兒才想出來可以把每個輸出都進行一次感知器學習,每一端都輸出一個0,1,這樣最后再一組合,就可以把數(shù)據進行多分類了。Soft

18、max regression1.問題描述: 用Softmax分類器 實現(xiàn)對IndianPines 遙感數(shù)據的分類:實驗要求:1. 統(tǒng)計分類正確率(AA,OA即:每一類的正確率的平均,和整體正確率)2. 訓練時間。3. 參數(shù)分析2.算法原理:在之前的softmax學習中,我們知道logistic regression很適合做一些非線性方面的分類問題,不過它只適合處理二分類的問題,且在給出分類結果時還會給出結果的概率。但是如果要進行多分類的問題,我們就需要用到另外一種算法,softmax regression.在Logistic regression中,所學習的系統(tǒng)的假設為:其對應的損失函數(shù)為:可

19、以看出,給定一個樣本,就輸出一個概率值,該概率值表示的含義是這個樣本屬于類別1的概率,因為總共才有2個類別,所以另一個類別的概率直接用1減掉剛剛的結果即可。如果現(xiàn)在的假設是多分類問題,比如說總共有k個類別。在softmax regression中這時候的系統(tǒng)的假設為:其中的參數(shù)不再是列向量,而是一個矩陣,矩陣的每一行可以看做是一個類別所對應分類器的參數(shù),總共有k行。所以矩陣可以寫成下面的形式:此時,系統(tǒng)損失函數(shù)的方程為:其中的1.是一個指示性函數(shù),即當大括號中的值為真時,該函數(shù)的結果就為1,否則其結果就為0。當然了,如果要用梯度下降法,牛頓法,或者L-BFGS法求得系統(tǒng)的參數(shù)的話,就必須求出損

20、失函數(shù)的偏導函數(shù),softmax regression中損失函數(shù)的偏導函數(shù)如下所示: 注意公式中的是一個向量,表示的是針對第i個類別而求得的。所以上面的公式還只是一個類別的偏導公式,我們需要求出所有類別的偏導公式。表示的是損失函數(shù)對第j個類別的第l個參數(shù)的偏導。比較有趣的時,softmax regression中對參數(shù)的最優(yōu)化求解不只一個,每當求得一個優(yōu)化參數(shù)時,如果將這個參數(shù)的每一項都減掉同一個數(shù),其得到的損失函數(shù)值也是一樣的。這說明這個參數(shù)不是唯一解。為了解決這個問題,可以加入規(guī)則項,加入規(guī)則項后的損失函數(shù)表達式如下:這個時候的偏導函數(shù)表達式如下所示:接下來就是用數(shù)學優(yōu)化的方法來求解了,顯

21、而易見,softmax regression 是logistic regression的擴展。3.編程實現(xiàn)步驟:Step 0: 初始化常數(shù)和參數(shù);Step 1: 導入數(shù)據;Step 2: 計算softmaxCost;Step 3: 梯度下降法求解;Step 4: 參數(shù)學習;Step 5: 數(shù)據測試。4.程序代碼及解釋:clear all;A=load('C:UserslisaiDesktopIndianaPines.mat');alpha=1e-10;data=A.pixels;data=data'label=A.Label;label(label=0)=17;%將類標

22、為0的數(shù)據類標換位17dsize=size(data);column=ones(dsize(1),1);data=column,data;dsize=size(data);lsize=size(label);ran=randperm(dsize(1);data=data(ran,:);label=label(ran,:);train_data=data(1:15000,:);%選擇訓練樣本和測試樣本train_label=label(1:15000,:);test_data=data(15001:end,:);test_label=label(15001:end,:);trsize=size(

23、train_data);tesize=size(test_data);theta=0.005*randn(17*dsize(2),1);theta=reshape(theta,17,dsize(2);lambda=1e-4;cost=0;cost_old=0;%初始化各個參數(shù)iter=0;sign=0;thetagrad=zeros(17,dsize(2);h=zeros(trsize(1),17);while abs(cost_old-cost)<0.000000001 %更新theta cost_old=cost; m=train_data*theta' m=exp(m);

24、for j=1:17 for i=1:trsize(1) h(i,j)=m(i,j)/sum(m(i,:); if train_label(i)=j sign=1; %指示變量 else sign=0; end %此處theta是一個二維向量,所以更新公式和logistic不太一樣thetagrad(j,:)=thetagrad(j,:)-1/trsize(1)*(sign-h(i,j)*train_data(i)+lambda*theta(j,:); end end theta=theta+thetagrad*alpha; %theta更新公式 for i=1:trsize(1) for j

25、=1:17 if train_label(i)=j sign=1; else sign=0; end cost=cost-1/trsize(1)*sign*log(h(i,j);%+lambda/2*sum(theta(:) . 2); end end cost=cost+lambda/2*sum(theta(:) . 2); iter=iter+1;endsoft=theta*test_data'M,I=max(soft);right=0;esch_right=zeros(1,17); for i=1:size(test_data,1)%統(tǒng)計準確率 for j=1:17 if I(i

26、)=test_label(i) right=right+1; if I(i)=j-1 esch_right(j)=esch_right(j)+1; end end end endfor i=1:17 each_acc(i)=esch_right(i)/size(find(test_label=i)endacc=right/6025each_accitertheta5.實現(xiàn)結果:(1)整體準確率:每一類的準確率:其均值為0.4366。(2)訓練時間:可以發(fā)現(xiàn),迭代次數(shù)為2344次。(3)參數(shù)分析: Theta數(shù)據太大,不能全部展示,只截一部分進行說明:6.實驗總結: Softmax regres

27、sion就是對logistic regression的擴展,它可以進行多分類,有了logistic regression的基礎,在實現(xiàn)Softmax regression的時候就容易了許多,只需要把原來的一列的變?yōu)橐粋€二維的值即可,在思維和數(shù)據處理上都增加了一定的難度。Svm1.問題描述: 用svm分類器 實現(xiàn)對IndianPines 遙感數(shù)據的分類:2.算法描述及基本流程:SVM的主要思想可以概括為兩點:它是針對線性可分情況進行分析,對于線性不可分的情況,通過使用非線性映射算法將低維輸入空間線性不可分的樣本轉化為高維特征空間使其線性可分,從而 使得高維特征空間采用線性算法對樣本的非線性特征進

28、行線性分析成為可能;它基于結構風險最小化理論之上在特征空間中建構最優(yōu)分割超平面,使得學習器得到全局最優(yōu)化,并且在整個樣本空間的期望風險以某個概率滿足一定上界。 先把svm算法的基本流程說明一下。首先是函數(shù)間隔與幾何間隔,由它們引出最優(yōu)間隔分類器;為了多快好的解決最優(yōu)間隔分類器問題,使用了拉格朗日對偶性性質,于是,先要理解原始優(yōu)化問題與對偶問題及它們在什么條件(KKT 條件)下最優(yōu)解等價,然后寫出最優(yōu)間隔分類器的對偶形式;通過對最有間隔分類器對偶問題求解,發(fā)現(xiàn)求解時目標函數(shù)中存在內積形式的計算,據此引入了核技法;引入核技法后就得到了完完全全的svm求解問題,使用序列最小化算法(SMO)進行求解,

29、svm算法很復雜,這只是對其作出的一個很抽象的解釋。 聲明一下,svm算法講原來的類標0,1變?yōu)榱?1,1,假設函數(shù)變?yōu)椋菏褂脭?shù)學語言對最優(yōu)間隔分類器進行表示:該問題不易解決,因為約束是非凸性約束,最優(yōu)解容易達到局部最優(yōu)。于是,我們對該問題進行轉換該問題對應的拉格朗日方程是:然后再求解其對偶問題:再利用核技法等對其進行求解即可。3.程序代碼及解釋:clear all;load('IndianaPines.mat');%導入數(shù)據maxnum = 21025 ;classnum=16;traintestnum=0;fivenum=0 ; k=1;everynum=30;eachnu

30、m =zeros(classnum,1);thenum=0 ; for i=1:maxnum if(Label(i)=0) eachnum(Label(i)=eachnum(Label(i)+1; traintestnum = traintestnum+1; train_test(:,traintestnum) = pixels(:,i); train_test_label(traintestnum) = Label(i); endendtraineachnum=zeros(classnum,1);for i=1:16 for j=1:traintestnum if( train_test_label(j) = i ) pixel_train(:,k) = train_test( :,j ); traineachnum(i) = traineachnum(i)+1; label_train(k) = i ; k=k+1; thenum=thenum+1; if( thenum

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論