exercise1

一個最簡單的線性擬合

1.單位矩陣,使用eye函數實現

2.繪製曲線,使用plot函數,顏色線條及其使用案例在點擊打開鏈接點擊打開鏈接

3.實現線性分類器。

原理:y = w * x+b。

現在所有的元素都是矩陣,將x增加常數列爲1,表示常數項b

將等式縮減爲 y = w * x

所取得的變量中,x爲97*2,y爲97*1。

調參過程:

參數調整的目的是使得建模更加效果好,就是預測值和實際值的差別越小越好。在線性分類器中,這個是用損失進行衡量的。如何找到最小的損失,就是要使用求導方法。將損失變成一個函數式,求導過程中不斷調整參數。


用這個式子進行調整,含義是在每一次遞歸過程中,每一次參數都下降a倍現在導數的平均。在實際實現的過程中需要注意的是,在每次循環中使用的計算量是上次的不是剛剛得到的。

具體實現如下:

function thetaNew = gradientDescent(X, y, theta, alpha, iterations)
%GRADIENTDESCENT Summary of this function goes here
%   Detailed explanation goes here
m=size(X,1);
thetaOld=theta;
thetaNew=theta;
for i=1:iterations
    for j=1:size(theta,1)
    	thetaNew(j,1)=thetaOld(j,1)-alpha/m*sum((X*thetaOld-y).*X(:,j));
    end
    if (abs(thetaNew-thetaOld)<0.01*thetaOld)
        break;        
    end
    thetaOld=thetaNew;
end
end


在其他的參考資料裏面,theta不是用循環處理的,是展開一個個處理的。我認爲用循環要簡單一些,所以採用的是循環。退出的判斷條件可以改成其他的。

這樣對於一個屬性的計算就結束了。之後我們解決多個屬性的變量建模。

首先接觸一個概念就是“歸一化”。

歸一化用於屬性的數值相差非常大的一種情況。比如,在這裏房子的單價就是面積的成千或者成萬倍,這時候在建模的過程中,面積很可能會被忽略。所以這個時候將所有的數據變成0-1範圍內的值。


使用repmat函數進行簡化運算。函數的含義就是將第一個參數矩陣重複第二個參數行,第三個參數列。這樣就避免了使用循環。

之後進行梯度下降優化參數,並且在每次迭代的過程中打印cost。

最後使用normalEqu方法直接求得導數爲0的地方,也可以得到最優參數。這適用於矩陣規模比較小,容易計算的情況。

剩下的沒有技術含量的就略去不提了。

源代碼地址:http://download.csdn.net/detail/yinyanting1/9905369


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章