W4编程作业——Multi-class Classification&Neural Networks

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值