機器學習-筆記4

開學第一週,感受很累,課程進展不大,下午有點空,抽時間完成了exercise 3,上來作作筆記
 
可能個人筆記會比較頻繁吧,由於沒有具體的課本,並且有些重要的東西確實須要記下來,不然很容易忘,今天quiz就沒全對。。
 
主要是regularization 的一個應用和neural Network的一點東西
 
exercise 3主要是手寫數字的識別算法,很基礎,但很神奇,僅僅靠lineral regression就能夠作到如此高的識別率
 
固然第二部分也用neural Network淺實現了這個應用(即給出的參數是由老師準備的,具體的求參可能會在下一個exercise給出)
 
仍是先說說exercise吧
 
大概就是給出了相似下圖的手寫數字的訓練數據,而後用很單純的線性迴歸算法進行識別,效果驚人(圖示爲100個樣例,實際有5000個之多)
 
 
下面是核心代碼
 
//oneVsAll.m
 
for k=1:num_labels
initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);
 [theta] = fmincg (@(t)(lrCostFunction(t, X, (y == k), lambda)), ...
                 initial_theta, options);
all_theta(k,:)=theta(:);
end
//lrCostFunction.m
h = sigmoid(X*theta);
 
grad=(h-y)'*X/m;
theta_temp = theta;
theta_temp (1)=0;
J = sum(-y'*log(h)-(1.-y)'*log(1.-h))/m+lambda/2/m*theta_temp'*theta_temp;
grad =grad.+lambda/m*theta_temp';
//predictOneVsAll.m
temp=sigmoid((X*all_theta'));
[p,lp]=max(temp, [], 2);
p=lp;
其實和上一個exercise差不了多少,只是目標從0,1變成了數字0-9,所以會加上一個loop來操做,爲何說很奇怪呢
由於按照pdf的說法,用該樣例訓練出來的hypothesis 識別率爲94.9%,(用來識別的目標也是這個樣例)
但我獲得的比他的高。。。。。。。我也不知道哪裏有問題,但。。。確實很高,即便是用4000個數據來預測後面的1000個數據,識別率也高達88%
二用neural network獲得的hypothesis 獲得的識別率達到了97.5%,讓人不得不感嘆一句數學的強大(應該考慮到這還不是應用級別的算法,據羣裏討論說有些識別已經作到99.7幾了)
下面是比較正規的筆記:
(neural network的表達式)
向量化以後。。
還有Octave的一些代碼,真是靈活得吐血,還有python也是,學得有些鬱悶(python2和python3不兼容這是最鬱悶的)
randperm(m)  生成1-m的亂序向量
reshape(X(curr_ex,  , example_height, example_width)  從新調整矩陣的行數、列數、維數
p_w_picpathsc(A)   將矩陣A中的元素數值按大小轉化爲不一樣顏色,實際上是用來展現圖片的(樣例的每一個數字是20*20大小的圖片)
[p,lp]=max(A, [], 2);p是A每行最大值組成的集合,lp是最大值標號組成的集合,若是換成max(A)就是每列
theta(:)  will return a column vector theta.
 大概就是這麼多吧,好累。。。。。。