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));

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值