zoukankan      html  css  js  c++  java
  • 【机器学习-斯坦福】学习笔记3

    原文  http://blog.csdn.net/maverick1990/article/details/11721453

    欠拟合与过拟合概念

    本次课程大纲:

    1、   局部加权回归 :线性回归的变化版本

    2、   概率解释 :另一种可能的对于线性回归的解释

    3、   Logistic 回归 :基于 2 的一个分类算法

    4、   感知器算法 :对于 3 的延伸,简要讲

    复习:

      – 第 i 个训练样本

    令  ,以参数向量  为条件,对于输入 x ,输出为:

    n 为特征数量

    定义成本函数 J ,定义为:

    m 为训练样本

    通过正规方程组推导的结论:

    1、 过拟合与欠拟合

    通常,你选择交给学习算法处理的特征的方式对算法的工作过程有很大影响。

    例:上次课的例子中,用 x1 表示房间大小。通过线性回归,在横轴为房间大小,纵轴为价格的图中,画出拟合曲线。回归的曲线方程为: 

    若定义特征集合为: x1 表示房子大小, x2 表示房子大小的平方,使用相同的算法,拟合得到一个二次函数,在图中即为一个抛物线,即: 

    以此类推,若训练集有 7 个数据,则可拟合出最高 6 次的多项式,可以找到一条完美的曲线,该曲线经过每个数据点。但是这样的模型又过于复杂,拟合结果仅仅反映了所给的特定数据的特质,不具有通过房屋大小来估计房价的普遍性。而线性回归的结果可能无法捕获所有训练集的信息。

    所以,对于一个监督学习模型来说, 过小的特征集合使得模型过于简单,过大的特征集合使得模型过于复杂 。

    对于特征集过小的情况,称之为 欠拟合( underfitting ) 

    对于特征集过大的情况,称之为 过拟合( overfitting )

    解决此类学习问题的方法:

    1)        特征选择算法:一类自动化算法,在这类回归问题中选择用到的特征

    2)        非参数学习算法:缓解对于选取特征的需求,引出局部加权回归

    参数学习算法( parametric learning algorithm )

    定义:参数学习算法是一类 有固定数目参数 ,以用来进行数据拟合的算法。设该固定的参数集合为  。线性回归即使参数学习算法的一个例子

    非参数学习算法( Non-parametric learning algorithm )

    定义:一个参数数量会 随 m (训练集大小)增长 的算法。通常定义为参数数量虽 m线性增长。换句话说,就是算法所需要的东西会随着训练集合线性增长,算法的维持是基于整个训练集合的,即使是在学习以后。

    2、   局部加权回归( Locally Weighted Regression )

    一种特定的非参数学习算法。也称作 Loess 。

    算法思想:

    假设对于一个确定的查询点 x ,在 x 处对你的假设 h(x) 求值。

    对于线性回归,步骤如下:

    1)        拟合出  ,使  最小

    2)        返回 

    对于 局部加权回归 ,当要处理 x 时:

    1)        检查数据集合,并且只考虑 位于 x 周围的固定区域内 的数据点

    2)        对这个区域内的点做线性回归,拟合出一条直线

    3)        根据这条拟合直线对 x 的输出,作为算法返回的结果

    用数学语言描述即:

    1)        拟合出  ,使  最小

    2)        w 为权值,有很多可能的选择,比如:

    -           其意义在于,所选取的 x(i) 越接近 x ,相应的 w(i) 越接近 1 ; x(i) 越远离 x ,w(i) 越接近 0 。直观的说,就是离得近的点权值大,离得远的点权值小。

    -           这个衰减函数比较具有普遍意义,虽然它的曲线是钟形的,但不是高斯分布。

    -            被称作波长函数,它控制了权值随距离下降的速率。它越小,钟形越窄,w 衰减的很快;它越大,衰减的就越慢。

    3)        返回 

    总结:对于局部加权回归,每进行一次预测,都要重新拟合一条曲线。但如果沿着 x轴对每个点都进行同样的操作,你会得到对于这个数据集的局部加权回归预测结果,追踪到一条非线性曲线。

    * 局部加权回归的问题:

    由于每次进行预测都要根据训练集拟合曲线,若训练集太大,每次进行预测的用到的训练集就会变得很大,有方法可以让局部加权回归对于大型数据集更高效,详情参见 Andrew Moore 的关于 KD-tree 的工作。

    3、 概率解释

     

    概率解释所解决的问题:

    在线性回归中,为什么选择最小二乘作为计算参数的指标,使得假设预测出的值和真正 y 值之间面积的平方最小化?

    我们提供一组假设,证明在这组假设下最小二乘是有意义的,但是这组假设不唯一,还有其他很多方法可以证明其有意义。

    (1)       假设 1 :

    假设输入与输出为线性函数关系,表示为: 

    其中,  为误差项,这个参数可以理解为对未建模效应的捕获,如果还有其他特征,这个误差项表示了一种我们没有捕获的特征,或者看成一种随机的噪声。

    假设  服从某个概率分布,如高斯分布(正态分布):  ,表示一个均值是 0 ,方差是  的高斯分布。

    高斯分布的概率密度函数:

    根据上述两式可得:

    即,在给定了特征与参数之后,输出是一个服从高斯分布的随机变量 , 可描述为:

    * 为什么选取高斯分布?

    1)          便于数学处理

    2)          对绝大多数问题,如果使用了线性回归模型,然后测量误差分布,通常会发现误差是高斯分布的。

    3)          中心极限定律:若干独立的随机变量之和趋向于服从高斯分布。若误差有多个因素导致,这些因素造成的效应的总和接近服从高斯分布。

    注意:  并不是一个随机变量,而是一个尝试估计的值,就是说它本身是一个常量,只不过我们不知道它的值,所以上式中用分号表示。分号应读作“以 … 作为参数”,上式读作“给定 x(i) 以 为参数的 y(i) 的概率服从高斯分布”。

    假设每个 为 IID (independently and identically distributed )独立同分布

    即误差项彼此之间是独立的,并且他们服从均值和方差相同的高斯分布

    (2)       假设 2 :

    设  的似然性为(即给定 x(i) 以 为参数的 y(i) 的概率):

    由于  是独立同分布,所以上式可写成所有分布的乘积:

    (3)       假设 3 :

    极大似然估计:选取  使 似然性  最大化(数据出现的可能性尽可能大)

    定义对数似然函数 为  :

    上式两个加项,前一项为常数。所以,使似然函数最大,就是使后一项最小,即:

    这一项就是之前的  ,由此得证,即之前的最小二乘法计算参数,实际上是假设了误差项满足高斯分布,且独立同分布的情况,使似然最大化来计算参数。

    注意:高斯分布的方差对最终结果没有影响,由于方差一定为正数,所以无论取什么值,最后结果都相同。这个性质会在下节课讲到。

    4、 Logistic 回归

    这是我们要学习的第一个 分类算法 。之前的回归问题尝试预测的变量 y 是连续变量,在这个分类算法中,变量 y 是离散的, y 只取 {0,1} 两个值。 

    一般这种离散二值分类问题用线性回归效果不好。比如 x<=3 , y=0 ; x>3 , y=1 ,那么当 x>3 的样本占得比例很大是,线性回归的直线斜率就会越来越小, y=0.5 时对应的 x 判决点就会比 3 大,造成预测错误。

    若 y 取值 {0,1} ,首先改变假设的形式,使假设得到的值总在 [0,1] 之间,即:

    所以,选取如下函数:

    其中:

    g 函数一般被称为 logistic 函数 ,图像如下:

    z 很小时, g(z) 趋于 0 , z 很大时, g(z) 趋于 1 , z=0 时, g(z)=0.5

    对假设的概率解释:

    假设给定 x 以 为参数的 y=1 和 y=0 的概率:

    可以简写成:

    参数的似然性:

    求对数似然性:

    为了使似然性最大化,类似于线性回归使用梯度下降的方法,求对数似然性对  的偏导,即:

    因为求最大值,此时为梯度上升。

    偏导数展开:

    则:

    即类似上节课的随机梯度上升算法,形式上和线性回归是相同的,只是符号相反, 为 logistic 函数,但实质上和线性回归是不同的学习算法。

    5、 感知器算法

    在 logistic 方法中, g(z) 会生成 [0,1] 之间的小数,但如何是 g(z) 只生成 0 或 1 ?

    所以,感知器算法将 g(z) 定义如下:

    同样令  ,和 logistic 回归的梯度上升算法类似,学习规则如下:

    尽管看起来和之前的学习算法类似,但感知器算法是一种非常简便的学习算法,临界值和输出只能是 0 或 1 ,是比 logistic 更简单的算法。后续讲到学习理论是,会将其作为基本的构造步骤。

  • 相关阅读:
    Sqlserver 实际开发中表变量的用法
    Python Day 20 面向对象 (面向对象的组合用法,面向对象的三大特性
    Python Day 19 面向对象(初识面向对象)
    Python Day 18 常用模块(模块和包)
    Python Day 17 常用模块(常用模块一 时间模块,random模块,os模块,sys模块,序列化模块)
    Python Day 15 函数(递归函数、二分查找算法)
    Python Day 14 函数(内置函数,匿名函数(lambda表达式))
    Python Day 13 函数(迭代器,生成器,列表推导式,生成器表达式)
    Python Day 11 + Python Day 12 函数(函数名的应用,闭包,装饰器)
    Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)
  • 原文地址:https://www.cnblogs.com/hpuwangjunling/p/4374443.html
Copyright © 2011-2022 走看看