machine learning ex3

本週作業:Multi-class Classification and Neural Networks(多層次分類和神經網絡)

對手寫數字進行辨別、分類

[*] lrCostFunction.m - Logistic regression cost function

[*] oneVsAll.m - Train a one-vs-all multi-class classifier

[*] predictOneVsAll.m - Predict using a one-vs-all multi-class classifier

[*] predict.m - Neural network prediction funct


1.Multi-class Classification

前半部分就是對上一章的複習,在lrCostFunction.m中實現邏輯函數正規化即可

lrCostFunction.m

J = -(1/m*sum(y'*log(sigmoid(X*theta))+(1-y)'*log(1-sigmoid(X*theta))))+lambda/(2*m)*(sum(theta.^2)-theta(1)^2);
grad = 1/m*X'*(sigmoid(X*theta)-y);
temp = theta;
temp(1) = 0;
grad = grad + lambda/m*temp;

oneVsAll.m

initial_theta = zeros(n+1,1);
options = optimset('GradObj','on','MaxIter',50);
for i = 1:num_labels
    theta = fmincg(@(t)(lrCostFunction(t,X,(y==i),lambda)),...
                          initial_theta,options); 
    all_theta(i,:) = theta'; %因爲fmincg函數返回的是一個列向量,而存儲在all_theta中的每一行對應一個分類的theta,因而要轉置
   end

predictOneVsAll.m

[X,p] = max(sigmoid(all_theta * X'));  
p = p';

X是一個5000*400的矩陣,表示的是5000個訓練集,每個訓練集有20*20的表示數字的灰度圖。all_theta是一個10*401的矩陣,每一行表示每個類別的theta值,theta*X’返回一個10*5000的矩陣,表示5000個值中,分別爲十個類別的概率。矩陣的每列的最大值所在行,表示爲該行所代表數字的可能性最大。比如第一列的第三個數所求的數字最大,則第一列的求出的十個數字中,爲3的概率最大。

2.Neural Networks

邏輯迴歸不能完成更加複雜的hypothesis,因爲它只是一個線性的分類器。神經網絡可以用於更加複雜的non-linear hypothesis.

input_layer_size = 400;

hidden_layer_size = 25;

完成前向反饋公式,並像上面一樣,對最後求出的h進行概率最大值處理,最大值所在行數表示爲行數對應的數字概率最大。

predict.m

a1 = [ones(size(X,1),1) X];
z2 = a1*Theta1';
a2 = sigmoid(z2);
a2 = [ones(size(a2,1),1) a2];
z3 = Theta2*a2';
[a3,p] = max(sigmoid(z3));

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