- 用向量化的方式一次性求得了正则化的梯度与代价函数
需要注意的是不要把theta0进行正则化。
grad=X'*(sigmoid(X*theta)-y)/m;
temp = theta;
temp(1) = 0;
J=(-y'*log(sigmoid(X*theta))-(1-y')*log(1-sigmoid(X*theta)))/m+lambda/(2*m)*(temp'*temp);
grad=grad+lambda/m*temp;
- 写“一对比所有”训练过程,利用fmincg(大规模时效率比fminunc高),得到训练结果theta。
for c = 1:num_labels
initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);
[theta, J, exit_flag] = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)),initial_theta, options);
all_theta(c,:)=theta';
end
- 计算结果准确率,用样本乘以theta,最后用p表示预测结果
predict=sigmoid(X*all_theta');
[M,p]=max(predict,[],2);
- 利用训练好的神经网络模型,计算神经网络结果准确率,同样要注意的是在样本中加入值为1的特征。
X=[ones(size(X,1),1) X];
z2=X*Theta1';
a2=sigmoid(z2);
a2=[ones(size(a2,1),1) a2];
z3=a2*Theta2';
predict=sigmoid(z3);
[M,p]=max(predict,[],2);