• ###《统计学习方法》


    点击查看Evernote原文

    #@author:       gr
    #@date:         2014-10-19
    #@email:        forgerui@gmail.com
    

    读书笔记。

    《统计学习方法》 李航著 清华大学出版社

    一、统计学习方法概论

    统计学习包括监督学习、非监督学习、半监督学习及强化学习。

    模型选择方法:

    1. 正则化
      在经验风险上加一个正则化项或罚项。
    2. 交叉验证
      分为训练集、验证集、测试集。训练集用于训练模型,验证集用于选择模型,测试集用于对模型进行评估。

    生成模型与判别模型:

    1. 生成模型
      朴素贝叶斯、隐马尔可夫模型(HMM)
    2. 判别模型
      KNN、感知机、决策树、Logistic Regression、最大熵、SVM、Adaboost、CRF

    二、感知机

    模型:

    [f(x) = sign( w cdot x + b) ]

    损失函数:

    [min_{w, b} ~ L(w, b) = - sum_{x_i in M} ~ y_i(w cdot x + b) ]

    [s.t. ~~~~~ y in { -1, 1 } ]

    优化过程:
    使用梯度下降法对损失函数进行优化。

    三、k近邻法

    求解过程:

    1. 求测试数据与各个训练数据之间的距离
    2. 按距离进行升序排序
    3. 选择k个距离最小的训练数据
    4. 统计k个训练数据的标签,对标签数据进行降序排序
    5. 将k个训练数据中最多的标签作为测试数据的标签

    kd树:
    因为上面的这种方法在数据集特别大的时候效率很低,所以可以用kd树去优化。

    四、朴素贝叶斯

    朴素贝叶斯通过训练数据集学习联合概率分布(P(X, Y))

    利用数据集先计算先验概率分布:

    [P(Y = c_k), k = 1, 2, cdots , K ]

    计算条件概率分布:

    [P(X = x mid Y = c_k) = P( X^{(1)} = x^{(1)}, X^{(2)} = x^{(2)}, cdots , X^{(j)} = x^{(j)} mid Y = c_k) ]

    这里有个强假设,即是所有条件之间是条件独立的,朴素贝叶斯也因此得名,也就有下面的式子:

    [P(X = x mid Y = c_k) = Pi_{j = 1}^{n} P( X^{(j)} = x ^{(j)} mid Y = c_k) ]

    我们要求的是(P(Y=c_k mid X=x)),根据贝叶斯公式有:

    [P(Y = c_k mid X = x) = frac{P(X = x mid Y = c_k)P(Y = c_k)}{sum_{k}P(X = x mid Y = c_k)P(Y = c_k)} ]

    我们要选择最大的概率做为数据的标签,分母都相同,分子最大即可:

    [y = arg max_{c_k} ~~ P(Y = c_k) Pi_{j} P(X^{(j)} = x^{(j)} mid Y = c_k) ]

    五、决策树

    1. 特征的选择

    随机变量X的熵定义为:

    [H(X) = -sum_{i = 1}^{n} p_i log{p_i} ]

    熵值越小则说明分类更加明确,即特征的判别度高,我们就选择这样的特征。信息增益是选择特征A的熇增加的衡量,如下所示

    [g(D, A) = H(D) - H(D|A) ]

    熵与概率的关系

    使用熵增益来选择特征,优先选择使信息增益最大的特征。归纳偏置为奥卡姆剃刀,即优先选择拟合数据的最简单的假设。

    2. ID3

    ID3算法使用信息增益来选择特征通过迭代构建决策树。

    3. C4.5

    对ID3算法进行改进,使用信息增益比来选择特征。

    [g(D, A) = frac{g(D, A)}{H_A(D)} ]

    4. 决策树的剪枝

    上面递归产生的决策树对训练数据很准确,对未知测试数据未必那么准确。因为,在学习过程中过多考虑如何提高对训练数据的正确分类,从而构建了过于复杂的决策树
    对于过拟合的决策树进行剪枝,从已生成的树上裁掉一些枝叶,从而简化分类树模型。

    剪枝通过极小化决策树整体的损失函数或代价函数来实现。决策树的损失函数定义为:

    [C_alpha (T) = sum_{t=1}^{mid T mid} N_t H_t(T) + alpha mid T mid ]

    其中,树 (T) 的叶结点个数为 (mid T mid), (t) 是树 (T) 的叶结点,该叶结点有 (N_t) 个样本点,其中 (k) 类的样本点有 (N_{tk}) 个,(H_t(T))为叶结点 (t) 上的经验熵,$ alpha ge 0 $ 为参数。

    其中经验熵 (H_t(T)) 定义如下:

    [H_t(T) = - sum_{t=1}^{N_{tk}} log frac{N_{tk}}{N_t} ]

    那么损失函数的第一项可以记作:

    [C(T) = sum_{t=1}^{mid T mid} N_t H_t(T) = - sum_{t=1}^{mid T mid}sum_{k=1}^{K}N_{tk} log frac{N_{tk}}{N_t} ]

    这时损失表示为如下:

    [C_{alpha}(T) = C(T) + alpha mid T mid ]

    这里面,(mid T mid) 表示模型的复杂度,(alpha) 可以控制模型的复杂度。较大的 (alpha) 倾向选择简单的模型,较小的 (alpha) 倾向选择复杂的模型。(alpha = 0) 意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂程度。

    具体算法:

    1. 计算每个结点的经验熵
    2. 递归地从树叶开始向上回缩,设回缩到父结点之前与之后的整体树分别为 (T_B)(T_A)。为了使损失函数最小,那么就有:
      当$ C_alpha (T_A) le C_alpha (T_B) $时,即损失函数变小,就进行剪枝,即将父结点设为叶结点。
    3. 返回(2),直到不能继续为止,得到损失函数最小的子树(T_alpha)

    注意:
    因为在做损失函数比较时,只考虑到两棵树(剪枝之前与之后),所以剪枝算法可以由一种动态规划算法实现。

    5. CART算法

    CART生成:

    CART剪枝:

    六、logistic regression和最大熵模型

    1. logistic regression

    输出 (Y=1) 的对数几率是由输入 (x) 的线性函数表示的模型,即logistic regression

    [P(Y=1 mid x) = dfrac{1}{1+e^{-z}} = dfrac{1}{1 + e^{-w cdot x}} = dfrac{e^{w cdot x}}{1 + e^{w cdot x}} ]

    [P(Y=0 mid x) = 1- P(Y=1 mid x) = dfrac{1}{1 + e^{w cdot x}} ]

    求事件的对数几率:

    [logit(p) = logdfrac{p}{1-p} = w cdot x ]

    对数几率是一个关于x的线性函数。

    模型参数估计:
    逻辑回归的参数估计可以采用极大似然估计求得。

    [l( heta) = Pi_{i=1}^N (p_i)^{y_i}(1-p_i)^{1-y_i} ]

    [= sum_{i=1}^{N} [y_ilog{(p_i)} + (1-y_i)log{(1 - p_i)}] ]

    [= sum_{i=1}^{N} [ y_i log{(dfrac{p_i}{1-p_i})} + log{(1-p_i)}] ]

    [= sum_{i=1}^N [y_i(w cdot x_i) - log{(1 + e^{(w cdot x )})}] ]

    (L(w))求极大值,就可以得到(w)的估计值。可以采用梯度下降法及拟牛顿法求解。

    代价函数:
    这里使用对数函数作为损失函数:

    [J( heta) = -dfrac{1}{m}[sum_{i=1}^m y_ilog(h_ heta(x_i)) + (1-y_i)log(1-h_ heta(x_i))] ]

    推广:
    将二分类问题推广为多分类问题。

    七、支持向量机

    1. 间隔最大化

    函数间隔: 超平面 ((w, b)) 关于样本点(a(x_i, y_i))的函数间隔定义为:

    [widehat{gamma}_i = y_i (w cdot x_i + b) ]

    定义超平面((w, b))关于训练数据集(T)的函数间隔为超平面((w, b))关于(T)中所有样本点((x_i, y_i))的函数间隔之最小值,即:

    [widehat{gamma} = min_{i=1,cdots,N} ~ widehat{gamma}_i ]

    函数间隔还不够,如果成比例地改变w和b,例如它们改为2w和2b,超平面没有改变,但函数间隔根据定义变为原来的2倍,这不是我们想要的结果。
    我们希望对于一个固定的超平面,有固定的间隔,我们便引入了几何间隔,就是原来的函数除以(parallel w parallel),定义如下:

    [{gamma}_i = y_i (frac{w}{parallel w parallel} cdot x_i + frac{b}{parallel w parallel}) ]

    [{gamma} = min_{i=1,cdots,N} ~ {gamma}_i ]

    函数间隔与几何间隔关系: $ gamma = frac{widehat{gamma}}{parallel w parallel}$

    间隔最大化:(max_{w,b} frac{widehat{gamma}}{parallel w parallel}) ,它与最小化(frac{1}{2}parallel w parallel^2)最小等价。

    优化问题:利用拉格朗日对偶性KKT条件求解,可得如下:

    [w^* = sum_{i=1}^{N} alpha_i^* y_i x_i ]

    [b^* = y_j - sum_{i=1}^{N}alpha_i^* y_i(x_i cdot x_j) ]

    分离超平面: (w^* cdot x + b^* = 0)
    分类决策函数: (f(x) = sgn(w^* cdot x + b^*))

           硬间隔支持向量

    间隔:
    间隔依赖于分离超平面的法向量(w),等于(frac{2}{parallel w parallel})
    支持向量:
    训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。
    支持向量使约束条件(y_i (w cdot x_i + b) - 1 =0) 成立,
    超平面由支持向量决定,在间隔边界以外移动甚至删除实例点对超平面不产生影响。

    2. 软间隔最大化

    训练数据中有一些特异点,使得数据不可分,可以加入松弛变量解决这个问题。
    原来的(frac{1}{2}parallel w parallel ^2)变成:

    [min_{w,b,xi} ~ frac{1}{2}parallel w parallel ^2 + Csum_{i=1}^{N}xi_i \ s.t. ~~~~~~~~~~ y_i(wcdot x_i + b) ge 1- xi_i , i = 1,2,cdots,N \ ~~~~~~~~~~~~~~~~ xi_i ge 0, i = 1,2,cdots,N]

    使用上面同样的方法求解这个优化问题,可得:

    [w^* = sum_{i=1}^{N} alpha_i^* y_i x_i ]

    [b^* = y_j - sum_{i=1}^{N}alpha_i^* y_i(x_i cdot x_j) ]

           软间隔支持向量

    支持向量:
    软间隔的支持向量(x_i)有三种情况:

    1. 在间隔边界上 ((xi_i = 0))
    2. 在间隔边界与超平面之间 ((0 lt xi_i lt 1))
    3. 在误分的一侧 ((xi_i gt 1))

    3. 非线性支持向量机和核函数

    线性不可分的情况:利用核技巧,使输入空间(R^n)超曲面模型变换为特征空间(H)的超平面模型,这样便线性可分。

    核函数:
    (X)是输入空间,(H)为特征空间,如果存在一个从(X)(H)的映射:

    [phi(x): X ightarrow H ]

    使得对所有(x,z in X),函数(K(x, z))满足条件

    [K(x, z) = phi(x) cdot phi(z) ]

    则称(K(x, z)) 为核函数, (phi(x))为映射函数,式中(phi(x) cdot phi(z))(phi(x))(phi(z))的内积。

    4. 序列最小最优化(SMO)

    八、提升方法

    九、EM算法及其推广

    十、隐马尔可夫模型

    十一、条件随机场

  • 相关阅读:
    Application,Session,Cookie,ViewState,Cache对象用法、作用域的区别
    leetcode系列---3Sum C#code
    leetcode系列---atoiFunction C#code
    leetcode系列---Two Sum C#code
    .NET webAPI中集成swagger
    js去空格
    clip 属性剪裁绝对定位元素
    css实现隐藏显示
    无阻塞加载脚本的方案
    打乱数字数组的顺序
  • 原文地址:https://www.cnblogs.com/gr-nick/p/4190523.html
Copyright © 2020-2023  润新知