exercise5

這次習題的目的在最一開始並沒有搞清楚。根據ex5這個函數對所有函數的調用,走一步看一步,

首先就是對只有一維的簡單的X進行建模。在這次建模過程中,又複習了損失函數和梯度的計算式。一切直接拿一個式子就可以計算出來。以後會遇到很多很多不同維度的計算,在計算的時候想一下式子的物理意義就比較容易計算出來了。

theta_temp = [zeros(size(theta,2));theta(2:end)];
J = sum(sum((X*theta - y).^2)) / (2*m) + lambda / (2*m) * sum(sum(theta_temp.^2));
grad = X'* (X*theta - y) / m + lambda / m * theta_temp;


具體進行訓練模型的步驟如下:

initial_theta=zeros(size(X,2),1);
costFunction = @(t) linearRegCostFunction(X,y,t,lambda);
options = optimet('MaxIter',200,'GradObj','on');
theta = fmincg(costFunction, initial_theta, options);
首先初始化theta,然後定義costfunction函數,進行損失和梯度的具體計算。之後設定使用fmincg的具體選項。最大迭代次數爲200,需要自己選定參數。最後將之前設定的三個類似於參數的參數傳入到fmincg函數中進行具體的建模過程。


part5是learningCurve函數,意思就是表示出樣本的個數對訓練效果的影響。很顯然,樣本越多,訓練效果越好。

在一開始使用線性迴歸的時候,效果並不是很好,所以接下來選擇多項式迴歸進行擬合。

首先需要對數據X進行處理。分別變成平方,三次方,……。

之後對得到的值進行正規化。就是減去平均數,然後除以標準差。

代碼是值得學習一下的。

mu = mean(X);%求X的各列均值
X_norm = bsxfun(@minus, X, mu);%X和mu的二值操作,minus代表的意思是減法

sigma = std(X_norm);%計算標準差
X_norm = bsxfun(@rdivide, X_norm, sigma);%X和mu的二值操作,rdivide代表的意思是左除

具體裏面的參數代表的含義:點擊打開鏈接
之後就沒什麼了,就是用處理過的X矩陣重新構建模型,流程一樣,所以忽略。

OK,練習結束。

源代碼鏈接地址:http://download.csdn.net/detail/yinyanting1/9910170












































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