吴恩达机器学习练习三

练习中的一些注意事项:

1)dat文件里面其实包含了变量X与y信息。而且把这个变量名字也包含在文件中的。

2)多分类时,预测结果要转成与Y可以比较的,需要在每一行找到最大值的索引(代表数字),然后与y进行比较

[all_theta] = oneVsAll(X, y, num_labels,lambda);

由于从dat文件中分解出来的y是数字1,2,3…并不能直接用于代价函数的计算,因此在

oneVsAll(X, y, num_labels, lambda)中调用代价函数时采用

[all_theta(c,:)] = fmincg(@(t)(lrCostFunction(t, X, (y == c), lambda)),initial_theta, options);

其中提交给lrCostFunction代价函数的y的是0或者1。0或者1由(y == c)决定。

 

1.     代价函数的计算

可以直接给出带正则化的计算,验证非正则化时,lambda代入0就可以了。

正则化时的代价函数计算公式:

 

向量化的计算如下:

gz=sigmoid(X*theta); % calc g(z)

J1=y'*log(gz);       %calc J cost function first part ,changeto vector calc

J0=(1-y)'*log(1-gz); %calc J cost functionsecond part, change to vector calc

theta_reg=theta(2:n);

reg=theta_reg'*theta_reg;

J=-(J1+J0)/m+lambda*reg/(2*m);

 

梯度计算的公式

向量化计算如下:

beta=gz-y;

grad(1)=beta'*X(:,1)./m;   %calc gradient ,vector calc

grad(2:n)=(beta'*X(:,[2:n])./m)'+lambda/m.*theta(2:n);   %calc gradient ,vectorcalc

当然以上也可以优化,改成先计算没有正则化时的梯度,然后(2:n)再加上正则化的theta。

beta=gz-y;

grad(1)=beta'*X./m;   %calc gradient ,vector calc

grad(2:n)= grad(2:n)+lambda/m.*theta(2:n);   %calc gradient ,vectorcalc

 

2.     多分类时theta参数学习。

实际上有几个的分类标签label,就需要学习几组的theta

initial_theta = zeros(n + 1,1);

options = optimset('GradObj', 'on', 'MaxIter', 50);

for c = 1:num_labels

       [all_theta(c,:)] = fmincg(@(t)(lrCostFunction(t, X, (y == c), lambda)),initial_theta, options);

end;

 

3.     参数学习后预测值与实际值的比较

predition=sigmoid(X*all_theta');

[val,p]=max(predition,[],2);%将每个行向量转化成数字标签0/1/2….9,方便与Y比较

 

通过mean(double(pred== y)) * 100 来计算正确率。

4.     神经网络

这个练习其实是推理,而不是训练。

输入层,隐藏层,输出层,总共3层网络。

X =[ones(m, 1) X];                % add onecolumn for bias calc

predition1=sigmoid(X*Theta1');     % hiden layer1 calc

predition1=[ones(m,1) predition1];    % add one column layerbias

predition2=sigmoid(predition1*Theta2');%output lay calc

[val,p]=max(predition2,[],2);          %change to number


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值