ML EX3

  1.  Vectorized Logistic Regression
    1. 和上次的作业基本一致, 但是要注意。 costFunction J 和 grad 梯度中对 theta(1) 都是不进行 regulation的, 上次错了, 这次又错了
    2. sigmoid 的函数, 接受的输入只是一个量 z, 但是它能力和强大, 即使接受的是一个矩阵或者数组, 也都能对其每一个 element 都能处理
  2. One-vs-all classifier training
    1. 这个都有些忘了, 想了好久才发现是上上周的内容,听一遍 video, 做一遍题,还是记不久. Do the best you can!
    2. 回忆良久,想起来了大体的框架 --- 其实上一道题我都是闷着头做, 即使闷着头做我也能 AC, 这就是 coursera的缺点, 讲得东西太浅了, 实验内容也太简单。 矩阵X是 5000×400的,其中每一行代表一个训练样例---每一列对应于 20×20的图片的像素点的值,相同的列代表20×20图片的同一个像素。而 theta 代表对每一个像素点加权, 归纳偏置为:通过一个图片上的 400 个像素点的线性组合()就能确定这张图片表示的数字是多少。
    3. 参数 y, 即目标数不再是 1,0(回忆以前的实验, 好像 y 都是0和1), 而是从1-10 的 label。 为了继续使用以前的方法来做, 我们现在需要对 y 进行一些处理。 首先, 我们为了分离开第 K 个 class, 假如 K =2,我们令y=2,y' =1, y!=2的,y'=0.  我们希望能够得到一组 theta, 这组 theta 对输入(400个像素点的值)进行向量乘法, 若是得出的结果为0, 那么我们得出结论, 这个图片显示的不是 2(可能是1, 3, 5...), 若是1, 那么我们知道, 输入的图片是2. 可以看出, 每进行一个 class 的分类, 我们就会重新对y'进行调整
    4. 得到 all_theta 后, 进行 prediction. all_theta 乘(矩阵') 得到矩阵 Y,矩阵 Y 的第K行是把一个实例化为 class K 的概率。 我们选取每一列的最大的那个元素作为最可能的分类
    5. 在做神经网络的时候, 忘了加新的行和列, 又浪费了很多的时间。并且, 单纯用脑子来想神经网络计算的整个过程, 真是难受。 昨天看到 IQ 170 的美国男孩, 思考都在四维中进行, 而我想两维都很困难。 刹那间, 我觉得不应该再看视频了, 多读书, 多回忆, 多思考。
    6. 当我在提交程序出现错误后, 我总会很生气 --- 应该慢慢改变这种想法。 我依然会想到多年前同学对我的评价, 太雷厉风行了。 我不太擅长绕弯, 直来直去总是碰壁, 慢慢来, 这不到一年,我已经改变了很多。
    7.  costFunction有一个参数 y == c, 感觉这是专门为逻辑回归设计的, 它能够把多个 y 值转化到 0,1(y ==c , y !=c), 我本来用 loop 把转化都写好了, 学习使用 fmincg 的时候才发现我做了无用功。 fmincg 在处理大量的数据的时候非常有效。 仅需添加 Initial_theta, 和 costFunction( X, y, lambda), options 即可,梯度它自己会算
    8. 神经网络, Theta * X', 得到的是隐藏层的点的列, 第二次再乘的时候, Theta2 * hidden,就不需要转置了。 Theta是一个 row×column 的矩阵, 其 theta(i,j) 表示的第 k+1 层的 i 和第 k 层的 j, 这个有些和逻辑不大一样, 但是方便计算。 另外需要 sigmoid 函数在每一层都要计算一次, 并且, 新加入的节点不参与计算。

  

posted @ 2013-05-16 11:41  SangS  阅读(1275)  评论(0编辑  收藏  举报