zoukankan      html  css  js  c++  java
  • 加州理工大学公开课:机器学习与数据挖掘_线性模型(第三个教训)

    这个类主要是一些处理的线性模型。

    控制:

    1、输入数据的表示(Input Representation)

    2、线性分类(Linear Classification)

    3、线性回归(Linear Regression)

    4、非线性模型转换(Nonlinear Transformation)


    作者觉得,假设要測试某个模型的可用性,最好就是利用真实数据。

    为了解说线性模型怎样应用。作者利用线性模型来解决邮局数据辨别问题:

    因为不同的人有不同的书写习惯,对于同一个数字其书写形式可能各异,可是其基本骨架不会变化太大。

    如以下一幅图是来自邮局中的,来自真实世界的数据:


    在上图的那些数据中有些数字是非常easy辨认的。可是有些数据却难以辨认,比方倒数第二行最后一个数字到底是‘8’还是‘0’ ?

    为了识别这些数字。我们须要机器学习。

    在这里作者利用了感知器模型(线性模型)来解决问题。

    须要做的第一点就是怎样输入数据(Input Representation)?

    如果每一个数字像素都是 16*16的,

    那么我们能够对每一张图片输入16*16 = 256 个点,相应的我们有 256+1 个參数:x0 -- x256。我们期望通过机器学习来确定全部的这些參数的值,但是參数这么多,机器学习可能须要非常多的时间来完毕,并且效果不一定好。观察到有一些像素点是不须要的,因此我们应该从这些像素点中抽取出一些特征出来。用来表示每一张图片,这样就能够把维度降下来,从而减少学习强度。观察到不同的数字其强度(黑色的点数)和对称性是不一样的,因此我们尝试用强度和对称性来描写叙述每一张图片,即抽取出特征,从而把维度从 257 降到 3 维(不要忘记w0)。

    当然我们在提取出实用的信息的同一时候可能也丢掉了相同多的实用信息。进过特征抽取后,每一张图片的表演示样例如以下:


    如今我们能够利用这些特征来进行机器学习了。

    (Linear Classification)(为了简化问题,仅仅处理了数字‘1’和‘5’)。依据线性模型的公式:h(X) = WX(W T 均是向量)。

    以下是学习的效果图。

    每幅图的左边是利用了线性模型进行学习的过程及结果,左图中红色线表示实际的结果,绿色线表示学习的结果。

    由于数据不是线性可分的,所以算法不会自己主动停止。

    因此在这里定义迭代1000次后强制停止。并把最后一次迭代结果作为终于输出。

    可是学习的效果并非非常理想,切割线太过偏上了。

    这是由于最后一次迭代的结果不一定是最好的,有可能刚好迭代到一次坏的数据那里就停止了。所以就有了后面的口袋算法(Pocket Algorithm)例如以下每幅图中右边的图就表明是利用口袋算法得到的结果,能够看到。最后结果表现的非常好,可是依旧有一些点无法正确分类。可是没所谓,不要求百分百正确,主要错误在同意的范围内就能够。

       

    说了这么多。那么到底什么是口袋算法呢?

    口袋算法就是添加一个跟踪器。该跟踪器跟踪最好的结果,并把它记录下来。这样在最后的时候。跟踪器就保留了全部迭代中表现的做好的那次迭代。但是为什么叫做口袋算法而不是什么其他的?作者解析说:想象一下。每次都把最好的结果放到口袋里,当发现更好的结果的时候,就把更好的放到你的口袋中并丢弃口袋中原有的结果。

    最后当算法结束时。你仅仅须要把你口袋里面的结果拿出来就是了。

    所以叫做口袋算法。(呵呵,好生动)

    接下来作者讲到线性回归(Linear Regression )问题

    Regression = Real-Valued Output

    当每次提到一些变量是否跟别的变量是否有关时,想到的就是回归。

    利用线性回归我们求出一条线(或面,这个要依据參数数量即维数来决定),使得误差最小

       

    二维:线 三维:面

    线性回归方程例如以下:

    可是应该怎样衡量误差?毕竟回归就是为了找出一个函数。使得该函数与真实函数之间的误差最小化。作者在这里用了标准的回归误差计算函数:平方差。


    为了求出该误差函数的最小值及对应的 W。我们须要进行求导:标准矩阵微积分:


    仅仅要当 XW = y 时就可以求出,求解步骤例如以下:等式左边同一时候乘上 X 的逆,然后同一时候乘上 XtX 的反。那个 X头上有个加号的叫做伪倒数。


    如今,我们已经求出 W 了。

    可是怎样利用线性回归来进行分类?由于二元结果也属于实数,所以能够利用线性回归进行分类,当结果为真的时候我们把它作为 +1 类,为负时则觉得是 -1 类。


    问题是线性回归真的能够用来进行分类?先看一张效果图:


    当中蓝色部分属于 +1 类,红色属于 -1 类。越往上的区域,正直越大,越往下的区域正直越小。可是回归方程试图使全部的负数变为 -1。 全部的正数变为 +1,可是它不能,对于那些 -2。-3 的值来说它仅仅能把它当做错误处理。所以线性回归仅仅能最小化误差,可是不是真正的分类。什么?不是真正的分类?are you kidding me ?

    不急,尽管不是真正的分类,可是我们已经成功了一半了,假设我们把 W 初始化为线性回归算出来的 W 然后继续利用口袋算法等进行迭代那样就能加速整个过程了,毕竟假设一開始就是靠口袋算法,可能要迭代非常久才干达到我们须要的值,因此我们为什么不来一次跳跃呢?这就是线性回归于分类的结合了。

    (尽管是这么说,仅仅是我不是非常懂那个为什么不能把负数变成 -1,为什么会把 -2 等当做错误来处理???...)


    最后,作者讲到怎样把非线性问题转换为线性问题。

    在本节中作者并没有提出一个理论性的方法关于怎样指导转换,这些将会在下一课时提到。

    在这一课时中。作者提出了一个样例而且利用了转换方法,成功地把非线性可分问题转换成线性可分问题,例如以下:

    左边的是原始的数据集,非常明显是非线性可分的,可是假设我们对输入进行处理。把 x1,x2 的值同一时候平方,则相当于把左边的空间映射到右边的空间中,这样就成功的把非线性可分问题转换成线性可分问题了。须要注意的一点是,当输入新的x的时候我们要利用相同的方法先进行转换。



    结论:

    线性可分模型是机器学习中一个非常重要的模型之中的一个,有非常多模型都是建立在线性可分模型上面的。

    当我们的输入是多维的时候,为了减少学习的难度及时间,我们须要对输入的表示进行处理,抽取出特征,减少维度,从而减少机器学习的成本。

    为了加快机器学习的过程及质量。能够利用线性回归方法先求出一个 W 作为线性模型的初始值,然后再此初始值上进行迭代。

    因为现实中非常多问题的数据都不是严格线性可分的。假设存在一条能够接受的边界(仅仅有少数的点分类错误),对于这类问题。我们没有办法使算法收敛,可是我们依旧能够应用线性模型来解决。仅仅是我们须要限定迭代的次数,同一时候利用口袋算法找出在迭代过程中最好的结果作为终于的结果。

    另外对于那些明显线性不可分的问题。我们能够通过对输入数据进行处理从而转换成线性可分的问题,然后求解线性模型。



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    天梯赛5-12 愿天下有情人都是失散多年的兄妹 【dfs】
    poj2718 Smallest Difference【贪心】
    HDU problem 5635 LCP Array【思维】
    codeforces 782C Andryusha and Colored Balloons【构造】
    HDU 4278 Faulty Odometer【进制转换】
    codeforces B. The Meeting Place Cannot Be Changed【二分】
    POJ 3264 Balanced Lineup 【线段树】
    HDU 1850
    CodeForces-714C
    HDU Problem 1247 Hat's Words 【字典树】
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4883107.html
Copyright © 2011-2022 走看看