Multi-class Classification
lrCostFunction.m
n=size(theta,1);
z=X*theta;
J=-(1/m)*sum(y.*log(sigmoid(z))+(1-y).*log(1-sigmoid(z)))+lambda/(2*m)*(theta(2:n)'*theta(2:n));
grad(1)=(1/m)*X(:,1)'*(sigmoid(z)-y);
grad(2:n)=(1/m)*X(:,2:n)'*(sigmoid(z)-y)+(lambda/m)*theta(2:n);
oneVsAll.m
initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);
for k=1:num_labels
[theta]=fmincg (@(t)(lrCostFunction(t, X, (y == k), lambda)),initial_theta, options);
all_theta(k,:)=theta';
end
返回的是一个k*(n+1)的矩阵,代表每一类最优化后的theta参数
predicOneVsAll.m
prediction=X*all_theta';
[max_prediction,p]=max(prediction,[],2);
prediction是一个m*k的矩阵,每一行代表这一个x实例属于各个k分类的概率(k=10)
[max_val, max_position]=max(A,[],2) 找到矩阵A每一行最大值返回最大值及其位置
这里的位置就是我们要的分类
Neural Networks
已经训练好神经网络模型(参数Theta1 Theta2)只需要前向预测
predict.m
a1=[ones(m,1) X];
z2=a1*(Theta1');
a2=[ones(m,1) sigmoid(z2)];
z3=a2*(Theta2');
a3=sigmoid(z3);
[max_prediction,p]=max(a3,[],2);
其中:
a1=m*401 (包括a10=1)
Theta1=25*401
a2=m*26 (包括a20=1)
Theta2=10*26
h(x)=a3=m*10 类似于OneVsAll里的prediction,每一行代表这一个x实例属于各个k分类的概率(k=10)