Machine Learning流水帳筆記-第二周:Linear Regression with Multiple Variables

沒錯啦,就是Coursera上吳恩達的課。什么,第一篇筆記為啥從第二周開始?不好意思啦,第一周都在筆記本上呢,還沒開簡書哈哈哈~

多變量回歸

第二周V1-V2首先講了Multiple feature的線性回歸梯度下降方法,其實就是多變量函數,大概用到求偏導之類的簡單推導即可得到通式,和單變量是一致的。

V3則是說明多feature的情況下,scaling類似非常重要,feature之間相對一致的scaling可以加快梯度下降的迭代速度。實現這一點只要做些normalization之類的統計處理即可,與氣象上的變量標準化的思路是一樣的,距平除以數據的range或者標準差。

V4首先介紹如何檢測正在執行的梯度下降是有效的,很簡單,把cost function的值在每輪iteration后拿出來看看就可以啦,在一定迭代次數后cost function收斂到某值即可。當然也可以使用automatic convergence test,就是看每輪梯度下降對cost function的減少是否低于某閾值。之后則是介紹如果發現cost function出現了隨著迭代次數增加而發散或周期性振蕩的情況,則需要調小learning rate(傳說中的調參民工干的事情么)。這和氣象模式積分不穩定的時候需要調小積分步長類似,有著一致的出發點和處理思路。當然,隨之帶來的則是計算量的顯著提升。Andrew隨后給出了實際應用中他所采取的方法,給一個等比數列的alpha,大概按3x增加,然后都來train一遍,最后選個收斂相對快且足夠小的alpha即可。

V5講了多feature的選擇問題,這對建模是非常重要的,也說明背景領域知識的重要性。Andrew舉了個具體的例子,比如在有了house長和寬兩個指標的情況下,預測房價顯然用長寬的乘積,也就是面積,作為新的feature是更合理的。同時,若feature和房價的關系更可能是多項式關系,三次回歸顯然比二次回歸合理,因為二次回歸拋物線性質會使得feature大的時候price反而減小,這是不合常識的。當然更合理的假設可能是下面的形式:

當然形式本身并不反映mechanism,我們的目標是湊出最有效的預測嘛。

多項式回歸依然采用梯度下降處理(體現出梯度下降相比最小二乘的優勢了吧),只是要注意scaling非常重要,因為feature的高次冪值域會顯著擴大。

Normal Equation

好吧剛剛懟了最小二乘這里就介紹了。以一階線性回歸為例,求導,set=0,得到解析解。一般化的,對于theta0-n共n+1個feature,構建design matrix X,轉置觀測列向量并依觀測放入X的每一行即可,即m觀測行乘以n特征列矩陣:


y則是對應label的列向量。

然后Andrew直接給出了求theta的Normal Equation:

視頻中沒有給出推導過程,自己試著推導了一下,對cost function求導并set為0向量。還是需要用到一些矩陣運算的性質(好了,不要吐槽我autodraw的清奇畫風):

用Normal equation的話不需要考慮scaling的問題, which is nice。Andrew對梯度下降和NE的優缺點做了個很好的對比:

劃重點,由于NE的時間復雜度是O(n^3),n如果很大,也就是說feature很多的話,NE會很慢,n~10^6必然要使用GD啦,Andrew建議10^4以上采用GD。另外對于clustering類的問題,NE是無效的,GD無敵。

V2介紹NE的noninvertibility的問題。如果X'X是不可逆的話,比如是singular或者degenerate矩陣。Andrew沒有講具體數學細節,而是給出實際應用中出現這樣情況的可能情形:

1. redundant features 存在冗余特征。

2. 觀測樣本太少,而feature太多。

Octave/Matlab Tutorial

來來來,一起復習下matlab語法與交互式操作

2==4?

3~=4 注意不是!=

1 && 0 ?; 3 || 3; xor (1,0)=1

預定義常量 pi

disp(sprintf('2 decimals: %0.2f', a))

v=1:0.1:2 % from 1 to 2, step 0.1

ones(2,3) % 2x3

zeros(); rand(); randn() % normalized distribution

生成高斯樣本:

對角矩陣 eye(n)

size(ones(2,3))

2 ?3

A=[1 2; 3 4; 5 6]

load('xxx.dat')

who %返回目前內存中的變量

whos %列表化變量

clear A %刪除變量

save hello.mat v; %保存目前的交互中使用的內存變量v


subset就不記錄了。

append操作

A=[A, [22,33,44] %列向量append

[A B] %行拼接(橫向)

[A B] %列拼接(縱向)

A' % transpose A

[val, ind] = max(A)

find(a<3)

sum(a); prod(a)

max(A,[],1) %max among each col

max(A,[],2) %max among each row

flipud(A) %上下翻轉

pinv(A) %pseudo求逆

print -dpng 'test.png'

clf %clear all figures

imagesc(A) % gridfilling show the matrix

Vectorization:


當然要向量化操作啦~?

所以update假設的向量化非常簡單


quiz里注意一下,矩陣按位取平方與矩陣平方是不同概念

A^2 ~= A.^2

編程大作業就實現梯度下降求線性回歸啦。submission system還是很牛的,提供郵箱和coursera的token就可以自動上傳評分,沒想到我這個audit還可以交作業,不錯不錯。

當然additional也要做得啦


不是總結的總結

第二周感覺還不算難,基本概念還是夠用的,只是線性代數不少忘記了,matlab的函數也不太熟悉,向量化操作還要腦補半天矩陣圖景。視頻1.25x播放速度基本可以接受,講程序的時候不需要subtitle,慢慢試著講課也去掉subtitle吧,其實主要是一些符號的名詞不熟悉,比如semicolon 什么的要反應半天。toggl記錄的總用時如下:


五小時17分,基本都是在今天完成的啦。視頻+筆記+編程作業,這個時間還算滿意,再接再厲。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容