編程作業(yè)(一)

線性回歸(Linear Regression)

簡(jiǎn)單的Octave/MATLAB函數(shù)(Simple Octave/MATLAB function)

將warmUpExercise.m文件中的warmUpExercise()補(bǔ)充完整,使其能夠返回一個(gè)5*5的單位矩陣奄妨。在函數(shù)相應(yīng)位置鍵入如下代碼即可:

A = eye(5);

然后,我們?cè)贠ctave中的CLI中鍵入如下命令測(cè)試warmUpExercise()是否正確:

% 先用cd命令“前往”warmUpExercise.m所在的文件目錄

octave:2> warmUpExercise()

其輸出結(jié)果為:

ans =

Diagonal Matrix

   1   0   0   0   0
   0   1   0   0   0
   0   0   1   0   0
   0   0   0   1   0
   0   0   0   0   1
單變量線性回歸(Linear regression with one variable)

假設(shè)你是一家連鎖餐廳的CEO世吨,且該連鎖餐廳在各個(gè)城市開(kāi)設(shè)了連鎖店,因此你可以獲得收益和城市人口相關(guān)的數(shù)據(jù)∈姘叮現(xiàn)在希望你借助這些數(shù)據(jù)來(lái)預(yù)測(cè)在不同地方開(kāi)設(shè)連鎖店的收益蕊退。

ex1data1.txt文件為本問(wèn)題的訓(xùn)練集,第一列表示城市人口操刀,第二列為連鎖店的利潤(rùn),其中負(fù)值代表連鎖店的虧損婴洼。在ex1.m文件中已經(jīng)編寫(xiě)了相關(guān)代碼將數(shù)據(jù)導(dǎo)入其中骨坑。

data = load('ex1data1.txt');
X = data(:, 1); 
y = data(:, 2);
m = length(y);          % number of training examples

任務(wù)一 可視化數(shù)據(jù)(Plotting the Data)

因此,我們需在plotData.m文件中將plotData()補(bǔ)充完整柬采。

plot(x, y, 'rx', 'MarkerSize', 10);
xlabel('Population');
ylabel('Revenue');

將上述代碼鍵入函數(shù)相應(yīng)的地方欢唾,然后在Octave中測(cè)試一下。

octave:10> plotData(X, y);

其運(yùn)行結(jié)果為:


在進(jìn)行后兩個(gè)任務(wù)之前粉捻,我們先把要用到的公式全部列一下:

  • 假設(shè)函數(shù)hθ(x):hθ(x) = θ0 + θ1x
  • 代價(jià)函數(shù)J:
  • 梯度下降算法:

注:梯度下降算法是同時(shí)更新θj礁遣。


任務(wù)二 計(jì)算代價(jià)函數(shù)J(θ)(Computing the cost J(θ))

根據(jù)代價(jià)函數(shù)J(θ)的公式,我們不難寫(xiě)出如下代碼:

J = sum((X*theta - y).^2) / (2*m);

好了肩刃,我們?cè)贠ctave中鍵入如下代碼來(lái)測(cè)試一下吧:

octave:7> X = [ones(m, 1), data(:, 1)];
octave:8> theta = zeros(2, 1);
octave:9> iterations = 1500;
octave:10> alpha = 0.01;
octave:11> J = computeCost(X, y, theta);

其輸出結(jié)果為:

octave:12> J
J =  32.073

任務(wù)三 梯度下降算法(Gradient Descent)

我們可以設(shè)置一個(gè)臨時(shí)變量theta_s祟霍,將變量theta的值賦值給這個(gè)臨時(shí)變量theta_s,以保證計(jì)算完畢后θj同時(shí)更新盈包。

在for循環(huán)之前沸呐,我們先將theta的值賦值給theta_s:

theta_s = theta;

然后再在for循環(huán)中添加計(jì)算θj的代碼:

theta(1) = theta(1) - alpha / m * sum(X * theta_s - y);       
theta(2) = theta(2) - alpha / m * sum((X * theta_s - y) .* X(:,2));
theta_s = theta;

注:我們?cè)谑褂锰荻认陆邓惴〞r(shí)在矩陣X中新增了一列1(使其成為了第一列)。

X = [ones(m, 1), data(:,1)];   % Add a column of ones to x

之所以增加這一列是因?yàn)榇鷥r(jià)函數(shù)J中的θ0的系數(shù)為1呢燥,為了方便矩陣的運(yùn)算崭添,故添加此列。

我們?cè)贠ctave中鍵入如下代碼測(cè)試一下:

octave:7> X = [ones(m, 1), data(:, 1)];
octave:8> theta = zeros(2, 1);
octave:9> iterations = 1500;
octave:10> alpha = 0.01;
octave:11> J = computeCost(X, y, theta);
octave:12> J
J =  32.073
octave:13> theta = gradientDescent(X, y, theta, alpha, iterations);

其輸出結(jié)果為:

octave:14> theta
theta =

  -3.6303
   1.1664

任務(wù)四 驗(yàn)證梯度下降算法(Debugging)

ex1.m文件中已將代碼寫(xiě)好叛氨,我們將其鍵入Octave中觀察輸出結(jié)果:

octave:15> hold on;
octave:16> plot(X(:, 2), X*theta, '-');`

其輸出結(jié)果為:

任務(wù)五 可視化代價(jià)函數(shù)J(θ)(Visualizing J(?))

該部分代碼也在ex1.m文件中寫(xiě)好滥朱,我們將其鍵入Octave中觀察輸出結(jié)果:

octave:18> theta0_vals = linspace(-10, 10, 100);
octave:19> theta1_vals = linspace(-1, 4, 100);
octave:20> J_vals = zeros(length(theta0_vals), length(theta1_vals));
octave:22> for i = 1:length(theta0_vals)
>     for j = 1:length(theta1_vals)
>         t = [theta0_vals(i); theta1_vals(j)];
>         J_vals(i, j) = computeCost(X, y, t);
>     end
> end
octave:23> J_vals = J_vals';
octave:24> figure;
octave:25> surf(theta0_vals, theta1_vals, J_vals);
octave:26> xlabel('\theta_0');
octave:27> ylabel('\theta_1');
octave:28> figure;
octave:29> contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20));
octave:30> xlabel('\theta_0');
octave:31> ylabel('\theta_1');
octave:32> hold on;
octave:33> plot(theta(1), theta(2), 'rx', 'MarkerSize', 10, 'LineWidth', 2);

其輸出結(jié)果為:

選做題

多元線性回歸(Linear regression with multiple variables)

假設(shè)你想要出售你的房子,你想知道現(xiàn)在你的房子在房屋交易中可以賣(mài)到什么價(jià)位力试。對(duì)此,你可以采取收集最近的房屋交易數(shù)據(jù)排嫌,進(jìn)而構(gòu)建房屋價(jià)格模型的方法畸裳。

ex1data2.txt文件中包含了房屋價(jià)格模型的訓(xùn)練集,第一列是房屋的大小淳地,第二列是房間的數(shù)量怖糊,第三列是房屋的交易價(jià)格帅容。

任務(wù)一 特征歸一化(Feature Normalization)

在這個(gè)案例中,由于兩個(gè)特征變量取值范圍差異較大(在實(shí)際操作過(guò)程中伍伤,我們?yōu)榱朔奖憔仃囘\(yùn)算會(huì)添加一個(gè)值為1的特征變量)并徘。如若直接使用梯度下降算法,其迭代次數(shù)較多扰魂。因此麦乞,我們先將特征歸一化,即特征縮放劝评,來(lái)讓特征變量的取值范圍縮小姐直,使得在使用梯度下降算法時(shí)能夠更快地收斂。

我們先把特征縮放的公式列一下:

其中μn表示某一特征的平均值蒋畜,sn表示某一特征的標(biāo)準(zhǔn)差(或最大值與最小值間的差声畏,即max-min)。

因此姻成,我們?cè)趂eatureNormalize.m文件中可以照著公式添加如下代碼:

mu = mean(X);          % 求均值插龄,返回值為1*2的矩陣
sigma = std(X);        % 求標(biāo)準(zhǔn)差
X_norm = (X - mu) ./ sigma;

任務(wù)二 梯度下降(Gradient Descent)

與之前一樣,我們先在X矩陣中添加一列1:

X = [ones(m, 1), X];

在此情況下科展,代價(jià)函數(shù)可以寫(xiě)成如下向量形式:

因此均牢,我們可以在computeCostMulti.m文件中使用computeCost.m的代碼(因?yàn)閏omputeCost.m中的代碼已經(jīng)考慮到了多變量的情況),在gradientDescentMulti.m文件中添加如下代碼:

theta = theta - alpha / m * X' * (X * theta - y);

任務(wù)三 正規(guī)方程(Normal Equations)

正規(guī)方程的公式為:

因此辛润,我們?cè)趎ormalEqn.m文件中不難寫(xiě)出如下代碼:

theta = pinv( X' * X ) * X' * y;

到了這里大家可以submit了膨处,但還有一個(gè)附加作業(yè)——選擇學(xué)習(xí)率α并預(yù)測(cè)1650 平方英尺 3 個(gè)臥室的房子的價(jià)格,我們還沒(méi)有寫(xiě)砂竖。因此真椿,我們現(xiàn)在來(lái)完成它。

我們?cè)趀x1_multi.m文件中修改學(xué)習(xí)率α的值來(lái)找到一個(gè)合適的學(xué)習(xí)率α乎澄。

fprintf('Running gradient descent ...\n');

% Choose some alpha value
alpha = 0.1;
num_iters = 400;

% Init Theta and Run Gradient Descent 
theta = zeros(3, 1);
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);

% Plot the convergence graph
%figure;
%plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
plot(1:numel(J_history), J_history, 'r');
xlabel('Number of iterations');
ylabel('Cost J');

% Display gradient descent's result
fprintf('Theta computed from gradient descent: \n');
fprintf(' %f \n', theta);
fprintf('\n');


fprintf('Running gradient descent ...\n');

% Choose some alpha value
alpha = 0.03;
num_iters = 400;

% Init Theta and Run Gradient Descent 
theta = zeros(3, 1);
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);

% Plot the convergence graph
%figure;
%plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
hold on;
plot(1:numel(J_history), J_history, 'g');

% Display gradient descent's result
fprintf('Theta computed from gradient descent: \n');
fprintf(' %f \n', theta);
fprintf('\n');



fprintf('Running gradient descent ...\n');

% Choose some alpha value
alpha = 0.01;
num_iters = 400;

% Init Theta and Run Gradient Descent 
theta = zeros(3, 1);
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);

% Plot the convergence graph
%figure;
%plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
hold on;
plot(1:numel(J_history), J_history, 'y');

legend('alpha = 0.1', 'alpha = 0.03', 'alpha = 0.01');


% Display gradient descent's result
fprintf('Theta computed from gradient descent: \n');
fprintf(' %f \n', theta);
fprintf('\n');

其輸出結(jié)果為:

根據(jù)此圖突硝,我們大概可以認(rèn)為alpha = 0.1時(shí),其學(xué)習(xí)率α較為合適置济。

最后我們通過(guò)梯度下降算法(alpha = 0.1)和正規(guī)方程法來(lái)預(yù)測(cè)一下房?jī)r(jià)解恰,其中我們?cè)O(shè)置price=2000,即每平方英尺的售價(jià)為2000美元浙于,其結(jié)果如下:

Predicted price of a 1650 sq-ft, 3 br house (using gradient descent):
 $182861695.021679

Predicted price of a 1650 sq-ft, 3 br house (using normal equations):
 $293081.464335

我們發(fā)現(xiàn)兩種算法預(yù)測(cè)出的房?jī)r(jià)相差甚遠(yuǎn)护盈,考慮到此處n=2,所以我們優(yōu)先考慮正規(guī)方程法羞酗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腐宋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胸竞,老刑警劉巖欺嗤,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卫枝,居然都是意外死亡煎饼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)校赤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吆玖,“玉大人,你說(shuō)我怎么就攤上這事痒谴∷ゲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵积蔚,是天一觀的道長(zhǎng)意鲸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)尽爆,這世上最難降的妖魔是什么怎顾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮漱贱,結(jié)果婚禮上槐雾,老公的妹妹穿的比我還像新娘。我一直安慰自己幅狮,他們只是感情好募强,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著崇摄,像睡著了一般擎值。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逐抑,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天鸠儿,我揣著相機(jī)與錄音,去河邊找鬼厕氨。 笑死进每,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的命斧。 我是一名探鬼主播田晚,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼国葬!你這毒婦竟也來(lái)了肉瓦?” 一聲冷哼從身側(cè)響起遭京,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泞莉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體船殉,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲫趁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了利虫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挨厚。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糠惫,靈堂內(nèi)的尸體忽然破棺而出疫剃,到底是詐尸還是另有隱情,我是刑警寧澤硼讽,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布巢价,位于F島的核電站,受9級(jí)特大地震影響固阁,放射性物質(zhì)發(fā)生泄漏壤躲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一备燃、第九天 我趴在偏房一處隱蔽的房頂上張望碉克。 院中可真熱鬧,春花似錦并齐、人聲如沸漏麦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撕贞。三九已至,卻和暖如春窝剖,著一層夾襖步出監(jiān)牢的瞬間麻掸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工赐纱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脊奋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓疙描,卻偏偏與公主長(zhǎng)得像诚隙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子起胰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 久又!~~~終于開(kāi)始了在Coursera上的第一個(gè)編程練習(xí) 巫延。。地消。 下面就是這次作業(yè)的介紹了~: Introducti...
    東皇Amrzs閱讀 9,629評(píng)論 9 7
  • 代價(jià)函數(shù)(Cost Function) 對(duì)于線性回歸模型炉峰,我們定義的代價(jià)函數(shù)J(θ)為: 現(xiàn)在對(duì)于邏輯回歸模型我們...
    SmallRookie閱讀 1,009評(píng)論 3 1
  • 題目:一個(gè)整數(shù)集 , 該整數(shù)集可以有重復(fù)元素, 初始為空集合 ÷鲋矗可以指定如下指令: add x 將x加入整數(shù)集 d...
    故事狗閱讀 340評(píng)論 0 0
  • 邏輯回歸 邏輯回歸 任務(wù)一 可視化數(shù)據(jù)(選擇) 在ex2.m文件中已經(jīng)導(dǎo)入了ex2data1.txt中的數(shù)據(jù)疼阔,其代...
    SmallRookie閱讀 698評(píng)論 0 0
  • 這幾天因?yàn)楣ぷ鞯脑颍恢彼缓冒胍模砩夏鲂┴瑝?mèng)婆廊。 這幾天漸漸有了眉目。我知道巫橄,我做不了行政淘邻,也不愿做這些繁瑣的...
    三日的小幸福閱讀 369評(píng)論 0 0