zoukankan      html  css  js  c++  java
  • 逻辑回归

    逻辑回归

    标签(空格分隔): 逻辑回归 吴恩达 分类


    1. 基本内容

    此处讨论的是二分类问题,即预测值 (yin {0,1}),其中,(0) 代表Negative Class, (1) 代表 Positive Class。
    回归一般是预测连续值,分类是预测离散值,但是逻辑回归预测的是离散值,它其实是一个分类问题,称其“回归”是历史问题。
    在逻辑回归中,假设函数 (h_ heta(x)) 满足 (0 le h_ heta(x) le 1)。通常选取如下形式:

    [h_ heta(x) = g( heta^Tx) ]

    其中: $$ g(z) = frac{1}{1+e^{-z}}$$

    (g(z))的函数图像如下所示:

    sigmod函数

    (g(z)) 被称为 Sigmoid 函数或逻辑函数。

    此处的假设函数 (h heta(x)) 可以理解为:在参数 ( heta) 下,对输入(x), 预测值 (y) 取值为 (1) 的概率。形式化的表示如下:

    [h_ heta(x) = P(y=1|x; heta) ]

    显然,有:

    [P(y=1|x; heta) + P(y=0|x; heta) = 1 ]

    对于假设函数 (h_ heta(x) = g( heta^Tx)), 如果当 (h_ heta(x) ge 0.5) 时 预测值 (y=1)(h_ heta(x) < 0.5) 时 预测值 (y=0),则有 ( heta^Tx ge 0)(y = 1),( heta^Tx < 0)(y = 0),

    2. 决策边界(Decision Boundary)

    决策边界即满足 (h_ heta(x) = 0.5) 的区域,此处的 (0.5) 是阈值。不同的问题决策边界的形状不一样,使用高次的特征可能产生形状复杂的决策边界。例如使用二阶特征(x^2),可能产生圆或椭圆等。

    3. 代价函数

    对于逻辑回归,代价函数的形式如下:

    [J( heta) = frac{1}{m}sum_{i=1}^{m}Cost(h_ heta(x^{(i)}), y^{(i)}) ]

    其中:

    [ Cost(h_ heta(x),y) = left{ egin{aligned} -log(h_ heta(x)) & & (y = 1) \ -log(1-h_ heta(x)) & & (y = 0)\ end{aligned} ight. ]

    注意 (y) 的取值只能是1或者0,上述(Cost)函数可以合并,因此得到新的代价函数表达形式:

    [J( heta) = -frac{1}{m}sum_{i=1}^{m} [ y^{(i)}log(h_ heta(x^{(i)})) + (1-y^{(i)})log(1-h_ heta(x^{(i)}))) ] ]

    4. 梯度下降

    梯度下降的目标是最小化代价函数(J( heta))

    过程为:

    [Repeat{ heta_j := heta_j - alpha frac{partial}{partial heta_j} J( heta) } ]

    (注意同时更新所有的 ( heta_j))

    解出上式中的偏导数,得到:

    [Repeat { heta_j := heta_j - alpha sum_{i=1}^{m}(h_ heta(x^{(i)}-y^{(i)})x^{(i)} } ]

    (注意同时更新所有的 ( heta_j))

    这个形式同线性回归的形似看起来是完全一样的,但是在线性回归中,(h_ heta(x) = heta^Tx), 而在逻辑回归中, (h_ heta(x)=frac{1}{1+e^{- heta^Tx)}})

    在逻辑回归中也可以使用特征缩放来加速收敛,另外,选择参数 (alpha) 的方法同线性回归是一样的。

    5. 多分类问题

    对于将元素分成 (k) 类的问题(即(yin{1, 2, cdots, k})), 训练 (k) 个二分类器 (h_ heta^{(i)}(x)),每次训练时,将第 (k) 类元素分为一类,其余元素分为一类,得到如下结果:

    [h_ heta^{(i)}(x) = P(y=i|x, heta) ]

    完成上述训练后,在分类时,将输入元素带入每个分类器中,求得 (h_ heta^{(i)}(x)), 根据其物理意义,选取此值最大的一个,即为最可信的分类,故将该元素分入此类。

    上述方法将二分类问题的解法运用到了多分类问题中。

    6. 欠拟合(Underfitting 或 high bias)与过拟合(Overfitting)及正则化

    如果对训练集数据,假设函数产生的结果跟实际结果相比,偏差较大,则称其为欠拟合。反之,如果选取了过多的特征,以致对于训练集数据能产生几乎没有偏差的结果,但是不能很好的泛化到新的数据实例中,则称之为过拟合。
    如下图所示(图片均来自吴恩达教授机器学习公开课截图)。

    过拟合示例1,来自吴恩达教授讲课截图

    过拟合示例2,来自吴恩达教授讲课截图

    产生过拟合的原因,往往是特征数目太多,相比之下,训练集数据太少导致的。针对其产生原因,解决过拟合问题主要有两个方法,第一个是人工的去掉一些不太重要的属性,使特征数量减少。另一个是正则化,即尽量选取小的参数( heta_j), 使得特征都保留,但每个特征只对最终结果产生较小的影响。正则化是被广泛使用的一个方法。

    正则化事实上是在代价函数里增加了惩罚项,例如,如果不希望去掉特性 (x_3), 但是又不想让它影响太大,可以加入正则化项 (1000* heta_3^2) 来惩罚,即当 ( heta_3) 取值较大时,代价函数的值也很大,逼迫 ( heta_3) 只能取趋近于0的值。

    现实问题中,用户并不能很清楚的知道哪些特征更重要,哪些不重要,因此加入的正则化项为 (lambda sum_{j=1}^{n} heta_j^2) (注意不包含 ( heta_0), 虽然这没有多大影响,但通常这么写)。使得整体上每个参数取值都比较小。参数较小能使得拟合出来的函数更为光滑(不会证明)。

    (lambda) 称为正则化参数,其取值不能过大(会造成欠拟合),也不能过小,有自动选取(lambda) 的方法。

    最后,代价函数的形似如下(以线性回归为例):

    [J( heta) = frac{1}{2m} left [ egin{aligned} sum_{i=1}^{m}(h_ heta(x^{(i)})- y^{(i)})^2 + lambdasum_{j=1}^{n} heta_j^2 end{aligned} ight] ]

  • 相关阅读:
    in_array()和explode()的使用笔记
    写sql语句连接的时候注意的一个小细节
    在thinkphp框架模板中引用session
    查询数据库所有(某个)表中字段名,数据类型,说明等,导出数据字典
    (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
    判断当前线程所处的状态 (转)以及终止当前线程
    string 字符串的分隔处理与list的相互转换
    C# 动态调用webservice
    C#中的List<string>泛型类示例
    命名空间"system.web"中不存在类型或命名空间名称security"
  • 原文地址:https://www.cnblogs.com/beisong/p/5705147.html
Copyright © 2011-2022 走看看