zoukankan      html  css  js  c++  java
  • 机器学习(1)- 概述&线性回归&逻辑回归&正则化

    根据Andrew Ng在斯坦福的《机器学习》视频做笔记,已经通过李航《统计学习方法》获得的知识不赘述,仅列出提纲。

    1 初识机器学习

    1.1 监督学习(x,y)

    分类(输出y是离散值)

    回归(输入输出是连续值)

    e.g.垃圾邮件、乳腺癌肿瘤好坏、是否患有糖尿病

    1.2 无监督学习(x)

    e.g. 新闻事件分类(谷歌新闻)、细分市场

    2 单变量线性回归

    2.1 模型描述

    一种可能的表达方式为:(h_ heta left( x ight)= heta_{0} + heta_{1}x),因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。

    (h) 代表hypothesis(假设),是一个从(x)(y) 的函数映射。

    2.2 代价函数

    (J left( heta ight) = frac{1}{2m}sumlimits_{i=1}^m left( h_{ heta}(x^{(i)})-y^{(i)} ight)^{2})

    2.3 梯度下降

    ({ heta_{j}}:={ heta_{j}}-alpha frac{partial }{partial { heta_{j}}}Jleft( heta ight))

    同步更新(采用temp值)

    算法:

    repeat until convergence {
    ({ heta_{j}}:={ heta_{j}}-alpha frac{partial }{partial {{ heta }_{j}}}J({{ heta }_{0}},{{ heta }_{1}})) (for j = 0 and j = 1)
    }

    求偏导:
    (frac{partial }{partial {{ heta }_{j}}}J({{ heta }_{0}},{{ heta }_{1}})=frac{partial }{partial {{ heta }_{j}}}frac{1}{2m}{{sumlimits_{i=1}^{m}{left( {{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)}}^{2}})

    (j=0) 时:(frac{partial }{partial {{ heta }_{0}}}J({{ heta }_{0}},{{ heta }_{1}})=frac{1}{m}{{sumlimits_{i=1}^{m}{left( {{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)}}})

    (j=1) 时:(frac{partial }{partial {{ heta }_{1}}}J({{ heta }_{0}},{{ heta }_{1}})=frac{1}{m}sumlimits_{i=1}^{m}{left( left( {{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}^{(i)}} ight)})

    算法改写成:

    repeat until convergence {
    ({ heta_{0}}:={ heta_{0}}-alpha frac{1}{m}sumlimits_{i=1}^{m}{ left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)})
    ({ heta_{1}}:={ heta_{1}}-alpha frac{1}{m}sumlimits_{i=1}^{m}{left( left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}^{(i)}} ight)})
    }

    3 线性代数回顾

    3.1 矩阵和向量

    矩阵的维数即行数×列数

    3.2 加法和标量乘法

    矩阵/向量的加减法

    矩阵/向量的标量乘法

    即和实数相乘

    矩阵的标量除法(即乘以一个分数)

    组合运算

    3.3 矩阵向量乘法(特殊)

    3.4 矩阵乘法(一般)

    线性代数函数库能够高效实现矩阵乘法

    3.5 矩阵乘法特征

    标量乘法:交换律commutative

    矩阵乘法:不满足交换律、满足结合律associative

    单位矩阵(I):主对角线上的元素均为1,以外都为0

    3.6 逆和转置

    矩阵的逆运算

    (A{{A}^{-1}}={{A}^{-1}}A=I)

    只有方阵才有逆运算,且|A|≠0

    奇异矩阵,|A|=0

    矩阵的转置运算

    4 多变量线性回归

    4.1 多变量

    (h_ heta left( x ight)= heta_{0} + heta_{1}x_1 + heta_{2}x_2 + cdots + + heta_{n}x_n),含有多个特征/输入变量。

    引入(x_{0}=1)(h_{ heta} left( x ight)={ heta_{0}}{x_{0}}+{ heta_{1}}{x_{1}}+{ heta_{2}}{x_{2}}+...+{ heta_{n}}{x_{n}})

    公式可以简化为:(h_{ heta} left( x ight)={ heta^{T}}X)

    4.2 多元梯度下降

    repeat until convergence {
    ({ heta_{j}}:={ heta_{j}}-alpha frac{1}{m}sumlimits_{i=1}^{m}{left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}_j^{(i)}}})
    }

    让梯度下降在实际工作中表现更优秀(迭代次数少,快速收敛)

    判断梯度下降是否收敛?
    • 绘制迭代次数和代价函数(J( heta))曲线图(可以判断(alpha)是否过大)
    • 自动收敛测试:选取一个阈值(epsilon)(比较困难),将其与变化值进行比较
    特征缩放Feature Scaling

    将特征的取值约束到-1 ~ 1(近似即可)之间。

    e.g.将特征除以最大值

    e.g.均值归一化

    使得特征值具有接近0的平均值

    将特征减去均值(x_i←x_i-mu_i)

    将特征减去均值再除以一个范围(x_i←frac{x_i-mu_i}{S_i}),其中(S)可以是极差,也可以是标准差

    学习率(alpha)

    如果(alpha)太小,即学习速率太小,这样就需要很多步才能到达局部最低点。

    如果(alpha)太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,甚至发散。

    ...,0.001,0.003,0.01,0.03,0.1,0.3,1...

    4.3 特征和多项式回归

    定义新的特征

    多项式回归

    线性回归并不适用于所有数据,有时需要曲线来适应数据,比如一个二次方模型:(h_{ heta}left( x ight)={ heta_{0}}+{ heta_{1}}{x_{1}}+{ heta_{2}}{x_{2}^2}) 或者三次方模型: (h_{ heta}left( x ight)={ heta_{0}}+{ heta_{1}}{x_{1}}+{ heta_{2}}{x_{2}^2}+{ heta_{3}}{x_{3}^3})

    4.4 正规方程normal equation

    利用正规方程解出向量 ( heta ={{left( {X^T}X ight)}^{-1}}{X^{T}}y)

    参考https://zhuanlan.zhihu.com/p/22757336

    (我觉得那个例子上下标写反了?yes)

    梯度下降 正规方程
    需要选择学习率(alpha) 不需要
    需要多次迭代 一次运算得出
    当特征数量(n)大时也能较好适用 需要计算({{left( {{X}^{T}}X ight)}^{-1}}) 如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂度为(Oleft( {{n}^{3}} ight)),通常来说当(n)小于10000 时还是可以接受的
    适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型

    不可逆性

    (A=X^TX),如果(A)不可逆,可能原因:

    • 特征冗余:(x_1,x_2)线性相关,删除其中一个
    • 特征太多:删除一些,或者正则化

    采用(pinv()),即伪逆函数,这样即使(A)不可逆,也可以算出结果。

    5 逻辑回归

    分类算法

    算法输出/预测值介于0 ~ 1之间

    (sigmod)函数/(logistic)函数:(g(z)=frac{1}{1+e^{-z}})

    假设函数(h_ heta(x)=g( heta^Tx)=frac{1}{1+e^{- heta^Tx}}),对于输入(x),输出(y)=1的概率

    决策边界

    ( heta^Txge0)(y=1)

    自动拟合参数( heta)

    代价函数

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

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

    [简化:Cost(h_ heta(x),y)=-ylog(h_ heta(x))-(1-y)log(1-h_ heta(x)) ]

    (极大似然估计)

    最优化:(梯度下降)

    推导过程: (Jleft( heta ight)=-frac{1}{m}sumlimits_{i=1}^{m}{[{{y}^{(i)}}log left( {h_ heta}left( {{x}^{(i)}} ight) ight)+left( 1-{{y}^{(i)}} ight)log left( 1-{h_ heta}left( {{x}^{(i)}} ight) ight)]})

    考虑: ({h_ heta}left( {{x}^{(i)}} ight)=frac{1}{1+{{e}^{-{ heta^T}{{x}^{(i)}}}}}) 则: ({{y}^{(i)}}log left( {h_ heta}left( {{x}^{(i)}} ight) ight)+left( 1-{{y}^{(i)}} ight)log left( 1-{h_ heta}left( {{x}^{(i)}} ight) ight)) (={{y}^{(i)}}log left( frac{1}{1+{{e}^{-{ heta^T}{{x}^{(i)}}}}} ight)+left( 1-{{y}^{(i)}} ight)log left( 1-frac{1}{1+{{e}^{-{ heta^T}{{x}^{(i)}}}}} ight))

    (=-{{y}^{(i)}}log left( 1+{{e}^{-{ heta^T}{{x}^{(i)}}}} ight)-left( 1-{{y}^{(i)}} ight)log left( 1+{{e}^{{ heta^T}{{x}^{(i)}}}} ight)) 所以: (frac{partial }{partial { heta_{j}}}Jleft( heta ight)=frac{partial }{partial { heta_{j}}}[-frac{1}{m}sumlimits_{i=1}^{m}{[-{{y}^{(i)}}log left( 1+{{e}^{-{ heta^{T}}{{x}^{(i)}}}} ight)-left( 1-{{y}^{(i)}} ight)log left( 1+{{e}^{{ heta^{T}}{{x}^{(i)}}}} ight)]}]) (=-frac{1}{m}sumlimits_{i=1}^{m}{[-{{y}^{(i)}}frac{-x_{j}^{(i)}{{e}^{-{ heta^{T}}{{x}^{(i)}}}}}{1+{{e}^{-{ heta^{T}}{{x}^{(i)}}}}}-left( 1-{{y}^{(i)}} ight)frac{x_j^{(i)}{{e}^{{ heta^T}{{x}^{(i)}}}}}{1+{{e}^{{ heta^T}{{x}^{(i)}}}}}}])

    (=-frac{1}{m}sumlimits_{i=1}^{m}{{y}^{(i)}}frac{x_j^{(i)}}{1+{{e}^{{ heta^T}{{x}^{(i)}}}}}-left( 1-{{y}^{(i)}} ight)frac{x_j^{(i)}{{e}^{{ heta^T}{{x}^{(i)}}}}}{1+{{e}^{{ heta^T}{{x}^{(i)}}}}}])

    (=-frac{1}{m}sumlimits_{i=1}^{m}{frac{{{y}^{(i)}}x_j^{(i)}-x_j^{(i)}{{e}^{{ heta^T}{{x}^{(i)}}}}+{{y}^{(i)}}x_j^{(i)}{{e}^{{ heta^T}{{x}^{(i)}}}}}{1+{{e}^{{ heta^T}{{x}^{(i)}}}}}})

    (=-frac{1}{m}sumlimits_{i=1}^{m}{frac{{{y}^{(i)}}left( 1 ext{+}{{e}^{{ heta^T}{{x}^{(i)}}}} ight)-{{e}^{{ heta^T}{{x}^{(i)}}}}}{1+{{e}^{{ heta^T}{{x}^{(i)}}}}}x_j^{(i)}})

    (=-frac{1}{m}sumlimits_{i=1}^{m}{({{y}^{(i)}}-frac{{{e}^{{ heta^T}{{x}^{(i)}}}}}{1+{{e}^{{ heta^T}{{x}^{(i)}}}}})x_j^{(i)}})

    (=-frac{1}{m}sumlimits_{i=1}^{m}{({{y}^{(i)}}-frac{1}{1+{{e}^{-{ heta^T}{{x}^{(i)}}}}})x_j^{(i)}})

    (=-frac{1}{m}sumlimits_{i=1}^{m}{[{{y}^{(i)}}-{h_ heta}left( {{x}^{(i)}} ight)]x_j^{(i)}})

    (=frac{1}{m}sumlimits_{i=1}^{m}{[{h_ heta}left( {{x}^{(i)}} ight)-{{y}^{(i)}}]x_j^{(i)}})

    仍然可以使用向量化特征缩放

    共轭梯度法、BFGS和L-BFGS:

    • 不需要手动选择学习率
    • 收敛比梯度下降快
    • 算法更复杂

    多分类

    转化为多个二元分类问题

    (h_ heta^{(i)}(x)=P(y=i|x; heta))

    6 正则化

    过拟合(overfitting)/高方差(high variance):训练集拟合得很好,不能用来预测

    欠拟合(underfit)/高偏差(high bias):没有很好的拟合数据

    处理过拟合问题:

    1. 减少选取特征变量的数量
      • 手动选择保留哪些特征
      • 模型选择算法
    2. 正则化
      • 保留所有特征,但是减少量级或参数大小
      • 当有很多特征时,每一个特征都对预测的值有影响

    正则化

    较小的参数值

    • 更简单的假设函数,函数更平滑
    • 不容易过拟合

    代价函数

    加入罚项

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

    (lambda),正则化参数,控制两个不同目标之间的取舍

    • 第一项:更好地拟合数据
    • 第二项:参数尽可能小

    线性回归的正则化

    梯度下降

    repeat until convergence {

    ({ heta_{0}}:={ heta_{0}}-alpha frac{1}{m}sumlimits_{i=1}^{m}{left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}_0^{(i)}}})

    ({ heta_{j}}:={ heta_{j}}-alpha [frac{1}{m}sumlimits_{i=1}^{m}{left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}_j^{(i)}}}+frac{lambda}{m} heta_j]\= heta_j(1-alphafrac{lambda}{m})-alpha frac{1}{m}sumlimits_{i=1}^{m}{left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}_j^{(i)}}})
    }

    正规方程

    利用正规方程解出向量 ( heta ={{left( {X^T}X +lambda A ight)}^{-1}}{X^{T}}y)

    其中,(A)为除第一列,对角线均为1,其余均为0的矩阵。

    (一定可逆)

    逻辑回归的正则化

    repeat until convergence {

    ({ heta_{0}}:={ heta_{0}}-alpha frac{1}{m}sumlimits_{i=1}^{m}{left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}_0^{(i)}}})

    ({ heta_{j}}:={ heta_{j}}-alpha [frac{1}{m}sumlimits_{i=1}^{m}{left({{h}_{ heta }}({{x}^{(i)}})-{{y}^{(i)}} ight)cdot {{x}_j^{(i)}}}+frac{lambda}{m} heta_j])
    }

    这里的假设函数和线性回归是不一样的!

    高级优化算法的正则化:同上

  • 相关阅读:
    Flutter 容器(4)
    Linux 安装maven环境
    ajaxStart、ajaxStop使用注意事项
    jquery里用正则来验证密码,必须包含大小写字母,数字及特殊符号,或最少包含两种
    Nginx 相关介绍(Nginx是什么?能干嘛?配有图片示例)
    常见web攻击总结
    用php的chr和ord函数实现字符串和ASCII码互转
    消息队列设计精要
    mysql索引总结----mysql 索引类型以及创建
    MySQL事务隔离级别详解
  • 原文地址:https://www.cnblogs.com/angelica-duhurica/p/10912097.html
Copyright © 2011-2022 走看看