Andrew NG 的ML3 作业纪律

很早之前就完成了,然后突然有个东西感觉没搞懂,上来重新弄了弄。记录一下

多元逻辑回归:

lrCostFunction:

m = length(y); % number of training examples
J = 0;
grad = zeros(size(theta));

temp=[0;theta(2:end)];    % theta(1)不参与正则化
J= -1 * sum( y .* log( sigmoid(X*theta) ) + (1 - y ) .* log( (1 - sigmoid(X*theta)) ) ) / m  + lambda/(2*m) * temp' * temp ;
grad = ( X' * (sigmoid(X*theta) - y ) )/ m + lambda/m * temp ;

梯度公式 跟 损失函数的表达式 ,完全没变。

OneVsAll:

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

for c = 1:num_labels
  initial_theta = zeros(n + 1, 1); % 401 * 10(10是num_labels数目) 即特征值的数量
  %上面的initial_theta 放不放进for 循环没啥区别
  [theta]= fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)),   initial_theta, options);
  all_theta(c,:) = theta';% theta得出之后 是401*1 把它弄成行 给all_theta的一排
end

fmincg是文件夹中的另一个函数,比fminunc快,
theta 只是某一个num_labels的特征参数,所以用用all_theta把所有theta整合成所有的参数集合,变成一个10*401的向量。

predictOneVsAll:

[a,p] = max(sigmoid( X * all_theta'),[],2) ; % a 为10个特征值中最大值,P为预测

[a,p]=max (A,[],2) 是返回每一列的最大值 ,并且返回他在第几行(P)
所以P就代表了他在第几行,一共有10行,最大的行代表着预测值。

神经网络:
predict:

z1 = [ones(m,1) X];
z2 = Theta1 * z1' ; 
z2 = [ones(1,m);sigmoid(z2)];
z3 = Theta2 *z2 ;
[a,p] = max(sigmoid(z3),[],1) ;

Theta1 是25401
Theta2 是10
26
z1 是 5000*401

所以z2 是25 * 5000
25要作为下一层输入 ,5000是代表5000个预测目标
因而 z2要加一行,并且加个sigmoid, 所以是 [ones(1,m);sigmoid(z2)];
所以z2 更新为 26*5000
z3 就得到了 10 *5000 10代表10个特征值,每一列 第几行谁大说明那一列的值预测为第几
所以用的是 max(A,[ ],1) 1代表列, p代表最大的在第几行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值