coursera上的Marchine Learning課程進展到了VII:Regullarization,目前一切輕鬆正常,學習羣竟然達到了80人,這個Group應該算是這個課程最大的Study Group了吧,九月就要開學了,可能就不會有像暑假那樣充足的時間,何況另外一門Statistics One也立刻就要開課了,固然我之後的自我學習重心會偏向機器學習,書也基本到貨,加油了!算法
最近幾節課主要是關於 Logistic Regression的,便是對於y是離散的點的狀況,好比說y只會等於0或者1,這是更多狀況的基礎,課程進而介紹了Regularization來使這個算法更有效果,同以往同樣,課程內容在exercise 2裏面獲得了充分的體現。頗有意思數組
另外值得注意的是Andrew提到的fminunc函數,對於應用級別的算法,這個函數應該會經常使用得多。I guessapp
costFunction主要是對下面兩個公式的具體實現,根據以往的學習經驗,對計算進行數組化有事半功倍的效果機器學習
h = sigmoid(X*theta); J=sum(-y'*log(h)-(1.-y)'*log(1.-h))/m; grad=(h-y)'*X/m;
其中sigmoid是一個S形的函數,其實好像就是高中生物裏的那個生物的S型生長曲線,具體的表達式是
這應該會在大二的《機率》裏面學,並且在Statistics One也應該有討論,到時候應該須要更加深刻地瞭解
執行效果大概就是下面這個樣子(這是pdf裏面的圖片,由於某種不可抗地緣由,我Octave畫出來的圖不如pdf上的漂亮,
可是趨勢徹底相同。。。。。matlab卻是一切正常)
接下來是Regularization,Regularization地好處就是算法會自動判斷哪些feature是主要的feature,從而可以使預測結果更準確
實現方法很巧妙,但Andrew沒講why,說是須要本身揣摩,準備有時間看一下,下面是兩個不一樣於上面的公式
以及實現代碼:
h = sigmoid(X*theta); theta_temp = theta(2:size(theta)); J = sum(-y'*log(h)-(1.-y)'*log(1.-h))/m+lambda/2/m*theta_temp'*theta_temp; grad =(h-y)'*X/m+lambda/m*theta'; gradd=(h-y)'*X/m; grad(1)=gradd(1);
由於對於grad來講,j=0和j!=0是不一樣的狀況,因此爲了寫起來方便我用了一個gradd來算grad(1),固然這拖慢了速度
確定會有更好的寫法,我就算是獻醜了吧。
下面是結果
總的來講,越學習,越對ML感興趣,大愛之!