Jiahong的个人博客

凡事预则立不预则废


  • Home

  • Tags

  • Archives

  • Search

ML——最小二乘与梯度下降

Posted on 2018-03-15

本文持续更新,主要总结各种与最小二乘和梯度下降相关的优化方法


最小二乘与最小均方误差的区别

最小二乘法

  • 二乘也就是平方的意思,故又称最小平方法(英文全称Least Square Method, LSM或者LS)
  • 是一种数学优化技术
  • 通过最小化误差的平方和寻找数据的最佳函数匹配
    • 为什么最小化误差平方和可以得到最佳函数匹配呢?
      • 可以证明,只要误差是服从正太分布的,最小化误差平法和就能匹配到最佳函数(这个高斯证明过)
      • 可以证明,误差的确是服从正太分布的,细节可以参考为什么正太分布如此常见
      • 中心极限定理说了,在适当的条件下,大量相互独立随机变量的均值经适当标准化后依分布收敛于正态分布
        • 适当的条件包括三个要素:
          • 独立
          • 随机
          • 相加
        • 误差满足上面三个要素
      • 综上所述,最小二乘法(最小化误差平法和)可以的到最佳函数匹配
  • 最小二乘法通过求导,并令导数为0,直接求得误差平方和(损失函数的一种)取最小值时的参数
  • 公式:
    $$\theta^{\star} = \arg\min_\theta L(x) = \sum_i^{m}(y_i-f(x_i;\theta))^2$$

加权最小二乘法

  • 加权最小二乘中每个样本的误差前面会乘上相应的权重,然后再求和
    $$\theta^{\star} = \arg\min_\theta L(x) = \sum_i^{m}w_i(y_i-f(x_i;\theta))^2$$

最小化均方误差

  • 最小二乘(Least Square, LS)问题是这样一类优化问题,目标函数是若干项的平方和
  • LS的一种更复杂也更灵活的变形: 加权最小二乘根据实际问题考虑每个求和项的重要程度,即为每一项加权值w
  • 均方误(Mean Square Error, MSE)是一种加权最小二乘,它的权值是对应项的概率
    $$\theta^{\star} = \arg\min_\theta L(x) = \sum_i^{m}\frac{1}{m}(y_i-f(x_i;\theta))^2 = \frac{1}{m}\sum_i^{m}(y_i-f(x_i;\theta))^2$$

周志华的解释

  • 基于均方误差最小化来进行模型求解的方法称为最小二乘法 ——《机器学习》(周志华著)
    • 理解:周志华的意思应该是把均方误差与误差平方和视为一个东西,也就是说各项的权重相同,所以感觉这里定义其实是比较模糊的,不用太在意最小二乘法与最小化均方误差法的定义

总结

  • 三者可以理解为相同的表达式,其中
    • 最小二乘法(LSM), 权重为1, 每个样本相同
    • 最小均方误差(MSE), 权重为\(\frac{1}{m}\), 每个样本相同
    • 加权最小二乘, 权重为自定义的值, 每个样本可以不同
  • 最小均方误差(MSE) 是一种 加权最小二乘, 他的权重为样本的概率, 每个样本出现的概率相等, 就都乘以 \(\frac{1}{m}\) 即可

梯度下降与梯度上升

意义

为什么需要梯度下降或者梯度上升,而不是用直接对目标函数求导得到最优解?

几点说明
  • 对于凸函数而言:
    • 通过函数(损失函数等)对参数求导,令其导数为0,的确可以解得损失函数的最小(最大)值点对应的参数
  • 对于非凸函数而言:
    • 相同的方法可能只能得到极值点,而不是最小(最大)值点
    • 但此时梯度下降法也不能找到最优点
  • 无论是梯度下降函数直接推到求解目标函数最优解,我们都需要求目标函数的导数,并且需要确保目标函数可导,不然是不能用这些方法的
几点原因
  • 有时候目标方程(令导数为0后得到的方程)很复杂,求导数为0的参数的解(根)很难
    • 包括时间和空间两方面可能面临困难
    • 比如大矩阵的乘法,大矩阵的逆等
    • 求某一点的梯度一般是比较容易的(只要求出导数后将对应点的数值带入即可)
      • 这里与求导数为0的解难度不一样,在求出函数导数后,求某一点的梯度仅仅需要带入该点的值,而求导数为0的解需要的是很难的解题过程,甚至可能找不到解
  • 有时候目标方程很奇怪,之前我们没见过,需要我们写新的代码教会计算机如何直接求解函数的根
    • 直接使用梯度下降的话是计算机可以理解的
    • 梯度下降法不用重新写代码来教给计算机

梯度下降

  • 梯度下降是最小化目标函数
    • \(\theta=\theta-\lambda\frac{\partial L(\theta)}{\partial\theta}\)
    • \(\lambda\)为步长
    • 每轮迭代沿着负梯度方向移动

梯度上升

  • 梯度上升是最大化目标函数
    • \(\theta=\theta+\lambda\frac{\partial L(\theta)}{\partial\theta}\)
    • \(\lambda\)为步长
    • 每轮迭代验证正梯度方向移动

梯度下降(上升)法与最小二乘法

最小二乘法

  • 最小二乘法是一种通过最小化误差的平方和寻找数据的最佳函数匹配的数学优化技术
  • 与最小二乘法并列的是最小话误差的三次方或者四次方等方法
    • 这里的三次方和和四次方和只是为了和二次方和作对比,实践中很少遇到这样的优化技术

梯度下降(上升)法

  • 梯度下降(上升)法的目标是通过迭代(每次朝着最优方向,即梯度下降最快方向前进)不断逼近能使得目标函数最小(最大)时的最优参数值的方法
  • 梯度下降(上升)是一种迭代法,也就是通过更新参数不停的逼近最优点,可以用来解决各种各样的问题(包括最小二乘问题,最小化误差三次方和等)
    • 这里最小二乘问题可以理解为用最小二乘法(最小化误差平法和)来寻找最佳函数的问题

总结

  • 最小二乘法与梯度下降(上升)法不在一个维度,不能对比
最小二乘法
  • 目标:找到(或者逼近)最优函数,使得该函数能最拟合已知数据
  • 方法:最小化误差平方和
梯度下降(上升)法
  • 目标:找到(或者逼近)最优参数,使得该参数能最小化(最大化)目标函数
  • 方法:是通过沿梯度方向迭代更新参数

ML——模型的方差与偏差

Posted on 2018-03-15

本文讲解机器学习中模型的方差偏差关系


偏差与方差的定义

  • 方差:模型的预测值之间的离散程度
  • 偏差:模型整体的预测值与真实值的偏离程度

正则化与方差和偏差

  • 参考博客:https://www.cnblogs.com/qkloveslife/p/9885500.html

总结

  • \(\lambda\)为正则化系数
  • 当\(\lambda\)很小时,模型处于“高方差”状态,“训练误差”很小,“交叉验证误差”较大
  • 当\(\lambda\)很大时,模型处于“高偏差”状态,“训练误差”和“交叉验证误差”都很大

集成学习与方差和偏差

  • 参考博客:https://blog.csdn.net/xmu_jupiter/article/details/47314927

总结

集成学习分两类
  • 平均方法:例如随机森林, Bagging methods。在平均方法中,系统分别去建立多个基分类器,分类器之间没有任何联系。然后在分类或者回归阶段,各个分类器根据测试数据给出自己的答案,然后系统根据各个分类器给出的结果去综合出最后的结果,比如可以使投票的形式。
  • 提升方法:例如梯度提升决策树GBDT,AdaBoost。在提升方法中,系统模型在训练过程中会先后建立一系列分类器,这些分类器单个可能是弱分类器,但是组合起来就成为一个强分类器。
不同类别的偏差与方差
  • 平均方法尝试去降低模型的方差
    • 所以平均方法通常比其任何一个基分类器效果好
  • 而提升方法尝试去降低模型的偏差

ML——训练集-验证集-测试集

Posted on 2018-03-15

训练集(training set),验证集(validation set)和测试集(test set)


统计学习方法:

  • 训练集: 用于模型训练
  • 验证集: 用于模型选择
  • 测试集: 用于模型评估(原文:用于最终对学习方法的评估)

个人理解:

  • 训练集: 用于模型拟合的数据样本
  • 验证集: 用于模型的选择
    • 不参与训练过程
    • 可用于超参数的调整
    • 可用于判断模型是否过拟合(用于决策何时停止训练过程)
    • 可多次使用
  • 测试集: 用于模型的评估
    • 不参与训练过程
    • 不可用于超参数的调整
    • 只可以使用一次

一些场景说明

做kaggle题目时

  • 不用测试集,因为数据集本来就少,测试集不能用于优化或者选择模型,只能用于评估
  • 此时测试集可以理解为kaggle题目中未知的部分数据
  • 此时从验证集中划分一部分验证集

写论文时

  • 需要训练集用于训练,验证集用于模型选择
  • 并且最终需要测试集用于评估模型和与其他人的模型对比

核心:验证集和测试集不能参与训练模型,测试集不能参与模型选择
模型训练时不能让模型看见验证集
在模型确定前都不能让模型看见测试集


关于K折交叉验证法

  • 统计学习方法中的描述: 交叉验证中每次划分为两部分,一部分用于训练模型,另一部分用于测试模型
  • 理解:上面的两部分,一部分为训练集,另一部分为验证集,在这里面没有测试集

关于网格搜索

  • 用来调超参数的一部分正好称为验证集
  • 除了验证集外,加入写论文做实验需要和其他模型作比较的话需要使用测试集(和验证集以及训练集都不相交)

关于数据划分的比重

  • 训练集:测试集 = 7:3
  • 训练集:验证集:测试集 = 6:2:2
  • 数据量非常多时(比如百万级别),验证集和测试集的比重可以适当缩小,因为验证集的主要目的是选择较好的模型,而测试集的目的是为了测试模型的效果,如果1万条数据足以验证模型的效果,则没必要非得给20万条数据

ML——采样方法

Posted on 2018-03-15

本文介绍几种采样的方法


计算机能做什么样的采样

Uniform

  • 本质上来讲,计算机只能实现对均匀分布(Uniform Distribution)的采样

numpy.random模块功能介绍

numpy.random是用来实现随机数生成的库

  • 生成随机数random
  • 生成某个随机数的随机样本random_sample
  • 对序列做随机shuffle,choice等

numpy.random模块的采样

numpy.random模块下实现了很多常见分布的采样函数(他们本质上都是计算机通过多次均匀分布采样实现的)

单变量分布
  • beta:beta分布
  • binomial:二项分布
  • chisquare:卡方分布
  • exponential:指数分布
  • 还有更多…
多变量分布
  • dirichlet : Multivariate generalization of Beta distribution. 狄利克雷分布
  • multinomial: Multivariate generalization of the binomial distribution. 多项分布
  • multivariate_normal: Multivariate generalization of the normal distribution. 多变量正太(高斯)分布
标准分布
  • standard_cauchy: Standard Cauchy-Lorentz distribution.
  • standard_exponential: Standard exponential distribution.
  • standard_gamma: Standard Gamma distribution.
  • standard_normal: Standard normal distribution.
  • standard_t: Standard Student’s t-distribution.

复杂分布的采样方式

在实践中,往往有很多复杂的分布,复杂到我们无法直接对他进行采样
有些时候我们甚至不知道目标函数的分布函数

逆变换采样

Inverse Transform Sampling

  • 目标函数: \(p(x)\)

  • 相关补充:

    • 求函数的累积分布函数\(\Phi^{-1}(x) = \int_{- \infty}^{x}p(t)d_{t}\)
    • 求累计分布函数的逆函数(反函数)
  • 采样步骤:

    • 均匀分布采样:\(u_{i} \sim U(0,1)\)
    • 计算: \(x_{i} = \Phi^{-1}(u_{i})\), 其中\(\Phi^{-1}(\cdot)\)是\(p(x)\)的累积分布函数(CDF)的逆函数
    • \(x_{i}\)服从\(p(x)\)分布
  • 优缺点:

    • 优点:
      • 仅需进行一个均匀分布采样即可
    • 缺点:
      • 需要求解累积分布函数的逆函数
      • 累积分布函数的逆函数不一定容易求解,有些甚至无法求解
  • 证明:

    • 示意图如下:
    • 图中纵轴就是均匀分布采样的结果,然后丛纵轴对应到的累计分布函数\(\Phi(x)\)的曲线上概率越大的地方实际上也就是累积分布函数的导数(原始分布函数\(p(x)\))最大的地方
    • 这个对应过程等价于我们将\(x\)轴和\(y\)轴互换,也就是求累积分布函数的逆函数即可

拒绝采样

别名: Accept-Reject Sampling, 接受-拒绝采样

  • 目标函数: \(p(x)\)

  • 相关补充:

    • (参考分布寻找): 寻找一个容易采样的分布\(q(x)\),满足\(p(x) \leq M\cdot q(x)\)
    • 一般选择正太分布等
    • \(M > 1\),从后面的证明可以知道, M越小越好
  • 采样步骤:

    • 参考分布采样:\(x_{i} \sim q(x)\)
    • 均匀分布采样:\(u_{i} \sim U(0,1)\)
    • 判断是否接受: 如果\(u_{i} < \frac{p(x_{i})}{M\cdot q(x_{i})}\),则接受采样,否则拒绝本次采样(丢弃本次采样的\(x_{i}\))
    • \(x_{i}\)服从\(p(x)\)分布(不包括被拒绝的样本)
  • 证明:

    • 由采样步骤得到,最终得到的分布服从$$q(x)\cdot \frac{p(x)}{M\cdot q(x)} = \frac{1}{M}p(x)$$
    • 对上述分布进行归一化即可得到采样的样本服从\(p(x)\)
    • 从\(\frac{1}{M}p(x)\)这里也可以看出来采样的效率由M值的大小决定,M越小,采样效率越高
  • 优缺点:

    • 优点:
      • 复杂分布变成简单分布采样+一个均匀分布,有时候甚至可以将参考分布也使用均匀分布
    • 缺点:
      • 参考分布\(q(x)\)的选择很难的
      • 不合适的参考分布可能导致采样效率低下
  • 解决\(q(x)\)难以寻找的一种解决方案: 自适应拒绝采样(Adaptive Rejection Sampling)

    • 只适用于目标函数为凸函数
    • 使用分段线性函数来覆盖目标函数
    • 下面是示意图片(图片来源: https://www.jianshu.com/p/3fb6f4d39c60)

重要性采样

Importance Sampling

  • 重要性采样与前面两者不同,重要性采样解决的问题是在求一个函数的关于原始分布的期望时

  • 目标定义: \(E_{x\sim p(x)}[f(x)] = \int_{x}f(x)p(x)d_{x}\)

  • 直接对\(p(x)\)采样可能存在的两个问题:

    • \(p(x)\)可能难以采样
    • \(p(x)\)采样到的样本大多都在\(f(x)\)比较小的地方,即\(f(x)\)与\(p(x)\)的差别太大导致有限次采样无法正确评估原始期望,采样次数不够大的话偏差可能很大
      • 这里一种解决方案是采样足够多的次数,多花点时间保证所有样本量足够,降低偏差
  • 解决方案:

    • 引入一个容易采样的参考分布\(q(x)\),满足
      $$
      \begin{align}
      E_{x\sim p(x)}[f(x)] &= \int_{x}f(x)p(x)d_{x} \\
      &= \int_{x}f(x)\frac{p(x)}{q(x)}q(x)d_{x} \\
      &= \int_{x}f(x)w(x)q(x)d_{x} \\
      \end{align}
      $$

    • 其中\(w(x) = \frac{p(x)}{q(x)}\)称为样本\(x\)的重要性权重(Importance Weight),不同样本的重要性权重不同

    • 与直接从\(p(x)\)中采样相比,相同采样次数,最终得到期望偏差会更小,因为\(p(x)\)会增大在\(f(x)\)大但是\(p(x)\)极小处的样本被采样的概率,然后调低这个样本的权重

    • 示意图片:


总结

  • 逆采样和拒绝采样都是在通过简单分布采样来采样原始分布的样本,最终的样本就是服从原始分布的样本\(x_{i}\sim p(x)\)
  • 重要性采样本质上是通过简单分布来采样和重要性权重来估计某个函数在原始分布上的期望\(E_{x\sim p(x)}[f(x)] = \int_{x}f(x)p(x)d_{x}\)
  • 对于高维空间中的随机向量,拒绝采样和重要性采样经常难以找到合适的参考分布,容易导致采样效率低下(样本的接受概率太小或者重要性权重太低),此时可以考虑马尔科夫蒙特卡洛采样法(MCMC),MCMC中常见的有两种,MH(Metropolis-Hastings)采样法和Gibbs采样法,关于MCMC详情可参考我的博客ML——MCMC采样

ML——模型性能评估之MAP

Posted on 2018-03-15

MAP(Mean Average Precision)

  • 参考博客: https://blog.csdn.net/JNingWei/article/details/78955536

RS——FM-因子分解机

Posted on 2018-03-15

本文主要介绍因子分解机(FM, Factorization Machine)


FM模型

  • 最早于2010年提出,目标是解决稀疏特征下的特征组合问题

模型推导

  • 假设训练数据为:\(\{(x, y)\}\)
    • \(x\)特征维度为n(One-Hot编码后的维度), 初始时维度比较小,但是特征中含有特殊的字符串或者对象类型等,我们使用One-Hot编码来拓展每个特殊特征(如果一个特征有m个可能的取值,那么One-Hot编码下每个特征将被扩展为m个维度)
      • 由于用One-Hot来编码,所以实际上特征是非常稀疏的(某些特征很多样本都为0,只有少数的样本为1)
    • \(y_{i}\)是样本的标签,表示是否点击(Clicked?), 1表示点击,0表示未点击
  • 一般模型建模
    $$y(x) = w_0+ \sum_{i=1}^n w_i x_i \label{eq:poly}\tag{1}$$
    • 未挖掘到特征之间的关联关系,
      • 如“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征,对用户的点击有着正向的影响
      • 如“化妆品”类商品与“女”性,“球类运动配件”的商品与“男”性,“电影票”的商品与“电影”品类偏好等
  • FM建模
    $$ y(x) = w_0+ \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n w_{ij} x_i x_j $$
    • n是样本的特征数量
    • \(x_{i}\)是样本的第\(i\)个特征,不是第\(i\)个样本
    • \(w_{0}, w_{i}, w_{ij}\)都是模型参数
    • 显然模型组合特征的参数数量为\(\frac{n(n-1)}{2}\),且任意两个参数独立
  • 存在问题: 在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的
    • 原因: 每个参数\(w_{ij}\) 的训练需要大量\(x_{i}\) 和\(x_{j}\) 都非零的样本;由于样本数据本来就比较稀疏,满足“\(x_{i}\)和\(x_{j}\)都非零”的样本将会非常少。训练样本的不足,很容易导致参数\(w_{ij}\)不准确,最终将严重影响模型的性能
  • 解决问题的灵感
    • 基于模型的协同过滤中,一个User-Item的评分(rating)矩阵可以分解为User和Item两个矩阵,每个用户和商品都可以用一个隐向量表示
  • FM解决问题的方法:
    • 用一个对称矩阵\(W\)代表所有二次项参数\(w_{ij}\),矩阵的两边对称的是参数,中间填充正实数
    • 矩阵\(W\)可分解为
      $$W=V^{T}V$$
      • \(V\)的第 \(j\) 列就是第 \(j\) 维特征的隐向量
      • \(V\)是\(k x n\)维的向量(\(k << n\))
      • 此时有
        $$w_{ij} = \boldsymbol{v}_i^T \boldsymbol{v}_j$$
        $$ y(x) = w_0+ \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \boldsymbol{v}_i^T \boldsymbol{v}_j x_{i} x_{j} $$
      • \(v_{i}\cdot v_{j}\)是两个隐向量的内积
      • 此时\(w_{ij}\)和\(w_{mj}\)之间不在是独立的,他们有相同的内积项\(v_{j}\),这意味着所有包含“\(x_{i}\)的非零组合特征”(存在某个\(j\neq i\),使得 \(x_{i}x_{j}\neq 0\))的样本都可以用来学习隐向量\(v_{i}\)(从而学习到\(w_{ij}\)), 这很大程度上避免了数据稀疏性造成的影响
        • 问题: 以前不能用来学习吗?
        • 回答: 以前的时候 \(w_{ij}\) 参数只能靠 \(x_{i}, x_{j}\) 均为1的样本 \(x\) 来训练,现在 \(w_{ij}\) 能由 \(v_{j}, v_{j}\) 生成,而 \(x_{i}\) 不为0的所有 \(x\) 都可以用来训练 \(v_{i}\),(当然,这里还需要存在某个 \(j\neq i\) ,使得 \(x_{i}x_{j}\neq 0\) , 只要当前样本不是只有\(x_{i}\)这个维度为1,这个条件肯定是成立的)
  • 当前的式子运算复杂度是\(O(kn^2)\),这意味着我们训练和预测时计算\(y(x)\)的值都需要\(O(n^2)\)的时间
  • 考虑到上面的公式主要是复杂在二次项的计算,我们考虑对二次项进行化简
    $$
    \begin{aligned}
    \sum_{i=1}^{n-1}\sum_{j=i+1}^n(\boldsymbol{v}i^T \boldsymbol{v}_j)x_ix_j &= \frac{1}{2}\left(\sum{i=1}^n\sum_{j=1}^n(\boldsymbol{v}i^T \boldsymbol{v}_j)x_ix_j-\sum{i=1}^n(\boldsymbol{v}i^T \boldsymbol{v}_i)x_ix_i\right)\\
    &=\frac{1}{2}\left(\sum
    {i=1}^n\sum_{j=1}^n\sum_{l=1}^kv_{il}v_{jl}x_ix_j-\sum_{i=1}^n\sum_{l=1}^k v_{il}^2x_i^2\right)\\
    &=\frac{1}{2}\sum_{l=1}^k\left(\sum_{i=1}^n(v_{il}x_i)\sum_{j=1}^n(v_{jl}x_j)-\sum_{i=1}^nv_{il}^2x_i^2\right)\\
    &=\frac{1}{2}\sum_{l=1}^k\left(\left(\sum_{i=1}^n(v_{il}x_i)\right)^2-\sum_{i=1}^n (v_{il}x_i)^2\right)\\\end{aligned}
    $$
    • 现在二次项的复杂度是\(O(nk)\),最终模型的计算复杂度也是\(O(nk)\),注意这里是计算复杂度,不是参数数量(虽然FM模型的二次项参数数量碰巧也是\(nk\)个)
    • 意味着我们可以在线性时间内对FM模型进行训练和预测,是非常高效的

参数数量

  • 整体模型的参数一共是\(1+n+nk\)个
    • 偏执项一个\(w_{0}\)
    • 一次项 \(n\) 个\((w_{1},\dots,w_{n})\)
    • 二次项 \(nk\) 个\(v_{ij}\),其中\(i=1,2,\dots,n\), \(j=1,2,\dots,k\)

和其他模型的对比

  • FM较为灵活,通过一些合适的特征变换,可以用来模拟二阶多项式核的(SVM,MF模型,SVD++模型)等
  • 相比SVM的二阶多项式而言,FM在样本稀疏的情况下有优势?什么优势?[待更新],
    • 能想到的其中一个优势是FM训练/预测是线性复杂度,而二阶多项式核SVM需要计算核矩阵[待更新,关于核矩阵的理解?],所以复杂度是\(O(n^2)\)
  • MF相当于只有 \(u,i\) 两类特征的FM模型[待更新:MF的详细推导]
    • 而FM模型中我们还可以加入任意多的特征,比如user的历史购买平均值,item的历史购买平均值等,但是MF只能局限在两类特征中
    • 为什么MF相当于只有 \(u,i\) 两类特征的FM模型?
      • 证明,将MF中的每一项评分(rating)改写为:
        $$r_{ui} \sim \beta_{u} + \gamma_i + x_u^Ty_i$$
      • 显然可得结论
  • SVD++与MF类似,都是矩阵分解方法,在特征的扩展性上也不如FM模型[待更新: SVD++的推导和理解]
  • FFM是FM的改进模型,加入了Field的概念,参考RS——FMM模型

RS——FMM模型

Posted on 2018-03-15

本文主要介绍FFM(FFM, Field-aware Factorization Machine)


FFM模型

  • FFM最初概念来自Yu-Chin Juan(阮毓钦,毕业于中国台湾大学,现在美国Criteo工作)与其比赛队员,他们借鉴了Michael Jahrer的论文中的field概念提出了FM的升级版模型

Field的概念

  • FFM把相同性质的特征归于同一个Field,
    • 比如“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中
  • 简单来说,就是同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等

模型推导

  • FM 对每个特征 \(x_i\) 学习一个 \(k\) 维隐向量\(v_i\), 二次项参数数量为\(nk\)
  • FFM 对每个特征 \(x_i\) 和每个域(field) \(f_j\) 学习一个 \(k\) 维隐向量\(v_{i,f_{j}}\), 二次项参数数量为\(nfk\)
    • 假设样本的特征有 \(n\) 个
    • 假设filed有 \(f\) 个
  • 建模方程
    $$y(x) = w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \langle \mathbf{v}_{i, f_j}, \mathbf{v}_{j, f_i} \rangle x_i x_j \label{eq:ffm}\tag{4}$$
    • 值得注意的是,上面的公式中,\(\mathbf{v}_{i, f_j}\)的第二个下标是 \(f_j\) ,不是 \(f_i\) ,表示的是, 同一个特征\(x_{i}\)在对不同的域(Field) \(f_j\) 中的特征 \(x_j\) 组合时,FFM考虑到 \(x_j\)的域不同,应该用不同的组合方式,所以使用不同的隐向量
    • FM中 \(x_i\) 的隐向量为 \(v_i\)
    • FFM中 \(x_i\) 的隐向量有多个,确切的说是隐矩阵, 对每个不同的域Field(包括\(x_i\)自身所在的域), 都有一个隐向量 \(v_{i,f_{j}}\) , 和不同类型的特征组合时,我们选择他们对应域的隐变量与之相乘
  • 当前模型的二次项一共有\(\frac{n(n-1)}{2}\)项, 计算复杂度为\(O(n^2)\) 与FM化简前相同, FFM这里不能化简, 所以训练和预测复杂度计算复杂度为 \(O(n^2)\)

FFM需要关注的细节

  • 样本归一化, FFM默认进行样本归一化, 有个参数pa.norm设置为真即可;若此参数设置为假,很容易造成数据inf溢出,进而引起梯度计算的nan错误
    * 因此,样本层面的数据是推荐进行归一化的
    • [待更新],样本归一化的具体操作,样本归一化的作用是什么?
  • 特征归一化,这里由于样本归一化后categorical的特征会变得非常小
  • 省略零值特征, 从建模方程可以看出, 零值特征对FFM模型完全没有贡献,包含零值特征的一切组合均为零

RS——推荐系统综述

Posted on 2018-03-15
  • 参考博客:
    • http://xtf615.com/2018/05/03/recommender-system-survey/
    • https://zhuanlan.zhihu.com/p/27502172

推荐系统分类(基于推荐依据分类)

[待更新]

基于内容的推荐

Content-based recommenders

  • 推荐和用户曾经喜欢的商品相似的商品
  • 主要是基于商品属性信息和用户画像信息的对比
  • 核心问题是如何刻画商品属性和用户画像以及效用的度量
  • 使用一个效用函数(utility function)来评价特定用户\(c in C\)对特定项目\(s_{c}’ in S\)的评分, \(UserProfit(c), ItemProfit(s)\)分别表示用户和商品的收益函数(Profit Function)[存疑: 待更新]
    $$u(c,s) = score(UserProfit(c), ItemProfit(s))$$
    • 基于启发式的方法(Heuristic-based method):
      • 特征构建: 基于关键字提取等方法,使用TF-IDF等指标提取关键字作为特征
      • 效用的度量: 使用启发式cosine等相似性指标, 衡量商品特征和用户画像的相似性,相似性越高,效用越大
    • 基于机器学习的方法(Machine learning-based mehod):
      • 特征构建: 使用机器学习算法来构建用户和商品的维度特征,例如建模商品属于某个类别,得到商品的刻画属性
      • 效用的度量: 直接使用机器学习算法拟合效用函数
  • 对于任意的用户\(c \in C\),我们可以通过选择商品\(s_{c}’ \in S\)来得到最大化的效用函数
    $$\forall c \in C, s_{c}’ = \arg\max_{s \in S} u(c,s)$$

基于协同过滤的推荐

Collaborative filtering recommenders

基于内存的推荐
  • 直接对User-Item矩阵进行研究
    • User-based CF: 推荐给特定用户列表中还没有发生过行为、而在相似用户列表中产生过行为的高频商品
    • Item-based CF: 推荐给特定用户列表中还没有发生过行为、并且和当前用户已经发生过行为的商品相似的商品
基于模型的推荐
损失函数+正则项(Loss Function)
神经网络+层(Neural Network)
图模型+圈(Graph Model)
基于矩阵分解的推荐
  • Traditional SVD
    • 传统的SVD分解
      $$R_{m\times n} = U_{m \times k} \Sigma_{k \times k} V_{k \times n}^T$$
    • 缺点:
      • 普通SVD分解时矩阵必须是稠密的,即每个位置都必须有值
      • 如果矩阵是稀疏的,有空值,那么需要先用均值或者其他统计学方法来填充矩阵
      • 计算复杂度高,空间消耗大
  • FunkSVD
    • 分解为两个低秩矩阵而不是三个矩阵
      $$\hat{r}_{u,i} = q_i^T p_u$$
      • \(\hat{r}_{u,i}\)指用户对商品的评分
      • \(q_{i}\)是商品\(i\)在隐空间的隐向量表示
      • \(p_{u}\)是用户\(u\)在隐空间的隐向量表示
    • 不使用传统的矩阵分解方式,定一个损失函数(针对\(\hat{r}_{u,i}\)未缺失的地方,\(\hat{r}_{u,i}\)缺失的地方训练时不用管),然后用梯度下降法进行参数优化
      • 优化问题(最小化损失函数)定义如下
        $$q^{\star}, p^{\star} = \min_{q, p} \sum_{(u,i) \in R_{train}} (r_{u,i} - q_i^T p_u)^2 + \lambda (||q_i||^2 + ||p_u||^2 )$$
        • 正则项是两个参数的L2正则
        • \(R_{train}\)是评分矩阵中可观测的数据对构成的集合, 缺失值不参与训练, 缺失值是需要我们最终预测的
  • BiasSVD
    • BiasSVD是FunkSVD诸多变形版本的一个相对成功的方法
    • 带有偏执项的SVD分解
    • 基于假设:
      • 关于用户的假设: 天生存在偏好,有的喜欢给商品好评,有的喜欢给商品差评
        • 这些用户的固有属性与商品无关
      • 关于商品的假设: 天生存在优劣,有的容易被人给好评,有的容易被人给差评
        • 这些商品的固有属性与用户无关
    • 优化问题(最小化损失函数)定义
      $$
      \begin{align}
      &\hat{r}{ui} = \mu + b_u + b_i + q_i^Tp_u \\
      &min \sum
      {r_{ui} \in R_{train}} \left(r_{ui} - \hat{r}_{ui} \right)^2 + \lambda\left(b_i^2 + b_u^2 + ||q_i||^2 + ||p_u||^2\right)
      \end{align}
      $$
    • 梯度下降更新公式
      $$
      \begin{align}
      \begin{split}b_u &\leftarrow b_u &+ \gamma (e_{ui} - \lambda b_u) \\
      b_i &\leftarrow b_i &+ \gamma (e_{ui} - \lambda b_i)\\
      p_u &\leftarrow p_u &+ \gamma (e_{ui} \cdot q_i - \lambda p_u)\\
      q_i &\leftarrow q_i &+ \gamma (e_{ui} \cdot p_u - \lambda q_i)\end{split}
      \end{align}
      $$
      • \(e_{ui} = r_{ui} - \hat{r}_{ui}\)
      • \(b_{u}\)[待更新]
      • \(b_{i}\)[待更新]
      • \(u\)[待更新]
  • SVD++
    • SVD++是对BiasSVD进行改进的
    • 基于假设:
      • 除了显示的评分行为以外,用户对于商品的浏览记录或购买记录(隐式反馈)也可以从侧面反映用户的偏好。相当于引入了额外的信息源,能够解决因显示评分行为较少导致的冷启动问题
    • 优化问题定义[待更新]
  • TimeSVD++
    • 之前的模型都是静态的,这里TimeSVD++是动态的,每个时间段学习一个参数,不同时间段使用该时间段的训练数据进行学习
    • 优化问题定义[待更新]
  • BiasSVDwithU
  • NMF
  • 非负矩阵分解Nonnegative Matrix Factorization*
  • PMF
  • 概率矩阵分解Probabilistic Matrix Factorization*
  • WRMF
  • weighted regularized matrix factorization*

混合的推荐

  • 基于混合的推荐,顾名思义,是对以上算法的融合
  • 淘宝上就既有基于内容的推荐也有协同过滤的推荐
  • 对模型的融合可以参考集成学习的三种集成方式ML——Ensemble-集成学习

推荐系统分类(基于推荐的最终输出形式分类)

评分预测模型

Rating prediction

  • 核心目的: 填充User-Item矩阵中的缺失值
  • 模型衡量指标: 均方根误差(RMSE, Root Mean Squard Error), 平均绝对误差(MAE, Mean Absolute Error)

排序预测模型

Ranking prediction (top-n recommendation)

  • 核心目的: 给定一个用户,推荐一个有序的商品列表
  • 模型衡量指标: Precision@K, Recall@K等

分类模型

Classification

  • 核心目的: 将候选商品分类,然后用于推荐
  • 模型衡量指标: Accuracy

ML——DT-决策树

Posted on 2018-03-15

本文参考: <<统计学习方法>>
决策树算法时很多优秀的集成算法的基础,包括RF,GBDT,提升树(Boosting Tree)等


说明

  • 决策树(DT)是一种基本的分类和回归方法
  • 分类问题中可以理解为if-then规则的集合
  • 分类问题中也可以理解为定义在特征空间->类空间上的条件概率分布
  • 分类问题中使用的是ID3和C4.5
    • ID3 基于 最大化信息增益 来选择特征
    • C4.5基于 最大化信息增益比 来选择特征
  • 回归问题使用的是分类与回归树(Classification And Regression Tree, CART)
    • 分类树: 基于 最小化基尼(Gini Index)指数 来选择特征
    • 回归树: 基于 最小化平方误差 来选择特征
  • 关于树模型的复杂度可以用下面的方式评估, 统计学习方法中CART选择使用树的节点总数来评估树的复杂度
    • 叶子节点的数量
    • 节点总数
    • 树的深度

树模型的优缺点

优点

  • 可解释性强
  • 可处理混合类型特征(?)
  • 具体伸缩不变性(不用归一化特征,LR模型需要归一化特征)
  • 有特征组合的作用
  • 可自然地处理缺失值(神经网络不能处理缺失值)
  • 对异常点鲁棒
  • 有特征选择作用
  • 可扩展性强,容易并行

缺点

  • 缺乏平滑性(回归预测时输出值只能 输出有限的若干种数值)
  • 不适合处理高维稀疏数据
    • 数据稀疏时
      • 比如某个数据集有10000个样本
      • 某个特征只有10个样本存在值,其他样本都不存在值
    • 决策树:
    • 这样的话树容易将当前特征选中作为分类特征,这种划分可能在训练集上看起来很好,但测试集中表现可能不太好(这里不是简单的缺失值,而是数据很稀疏,这里需要进一步的理解[待更新])
    • LR等线性模型:
      • 因为现在的模型普遍都会带着正则项,而LR等线性模型的正则项是对权重的惩罚,也就是特征对应的权重一旦过大,惩罚就会很大,进一步压缩权重的值,使他不至于过大,而树模型则不一样,树模型的惩罚项通常为叶子节点数和深度等,而我们都知道,对于上面这种 case,树只需要一个节点就可以完美分割9990和10个样本,惩罚项极其之小.

决策树训练的三个步骤

特征选择

信息增益
  • 对数据集D的经验熵:\(H(D)=-\sum_{k=1}^{K}\frac{|C_{k}|}{|D|}log_{2}\frac{|C_{k}|}{|D|}\)
  • 对特征A对数据集D的经验条件熵:\(H(D|A)=\sum_{n=1}^{n}\frac{|D_{i}|}{|D|}H(D_{i})=-\sum_{n=1}^{n}\frac{|D_{i}|}{|D|}\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_{i}|}log_{2}\frac{|D_{ik}|}{|D_{i}|}\), n为特征A的取值个数
信息增益比
  • 特征A对训练数据D的信息增益比:\(g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)}\)
    • 其中\(H_{A}=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}log_{2}\frac{|D_{i}|}{|D|}\), n为特征A的取值个数
基尼指数
  • 对于分布\(p=(p_{1},…,p_{k})\)的基尼指数:\(Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K}p_{k}^{2}\)
  • 对样本集合D,基尼指数为:\(Gini(p)=1-\sum_{k=1}^{K}\left(\frac{|C_{k}|}{|D|}\right)^{2}\)
  • 在特征A的条件下,集合D的基尼指数:\(Gini(D,A)=\frac{|C_{1}|}{|D|}Gini(D_{1})+\frac{|C_{2}|}{|D|}Gini(D_{2})\)
    • 我们将集合D根据特征A分为两类:
    • 是否取特征A的某个值,其中\(A=a\)的是\(D_{1}\),\(A\neq a\)的是\(D_{2}\)

决策树的生成

ID3
  • 基于最大化信息增益来选择特征
  • 选取所有信息增益最大的特征作为当前结点的特征
  • 对取值数目较多的属性有所偏好
  • 只有分类树,没有回归树
  • ID3相当于用极大似然法对模型进行选择(问题:如何理解?)
C4.5
  • 基于最大化信息增益比来选择特征
  • 选取信息增益比最大的特征作为当前结点的特征
    • 由于使用最大的信息增益比特征可能对取值数目少的特征属性有所偏好,所以C4.5算法一般不会直接选信息增益比最大的,而是
      • 先从候选区属性中找出信息增益高于平均水平的
      • 再从筛选结果中寻找信息增益比最大的
  • 处理连续型特征时使用二分法(bi-partition)
  • 只有分类树,没有回归树
CART
  • CART的决策树是二叉树
  • 分类树: 基于最小化基尼指数来选择特征
    • 输出变量为离散变量
    • 基于基尼指数选取所有可能的特征A和所有可能的切分点a中,选择基尼指数最小的特征和切分点为最优特征和最优且分点
  • 回归树: 基于最小化平方误差来选择特征
    • CART回归树一般称为最小二乘回归树(因为目标函数的优化是最小化误差的平方和实现的)
    • 输出变量为连续变量
    • 选取时选择最优划分变量(特征)j和最优切分点s,然后按照变量j的划分点s将结点分为两个结点,大于s的为第一个结点,小于s的为第二个结点
  • 一点说明:
    • *<<统计学习方法>>*中:
      • 回归树的特征默认是连续变量,选取划分点s时使用的是连续变量的各种中间值作为候选值,大于s的分为一个结点,小于s的分为一个结点
      • 分类树的特征默认是离散变量,选取划分点a时使用的是离散变量的值作为候选值,等于a的分为一个结点,不等于a的分为另一个结点
      • 但是实际上无论时分类树还是回归树,CART都可以用相同手段处理连续值

剪枝

  • 剪枝的核心思想:
    • 就是加入考虑树的复杂度考量(决策树的生成时仅仅是考虑到信息增益和信息增益比,没有考量树的复杂度)
      • 树的深度越深,树越复杂
    • 整体上再考虑树变得更简单的同时保证分类误差较小
预剪枝
  • 预剪枝发生在决策树生成过程中
  • 在每个节点划分前先进行估计
  • 若当前节点划分不能带来决策树准确率提升,则停止划分
  • 在<<统计学习方法>>中未提到这个方法,只讲了一种简单的后剪枝算法
  • 时间复杂度小,欠拟合风险大
后剪枝
  • 后剪枝发生在决策树生成后
  • 自底向上的对非叶子节点进行考察(注意千万不可从根节点开始自顶向下的剪枝,可能失去整体最优的决策树)
  • 若将该节点换成叶子节点能带来决策树准确率提升,则将该节点替换为叶子节点
  • 时间复杂度大,欠拟合风险小
常见的后剪枝方法

各种方法各有优劣,关注不同的优化角度

  • REP 错误率降低剪枝(Reduced Error Pruning)
  • PEP 悲观剪枝(Pessimistic Error Pruning)
  • CCP 代价复杂度剪枝(Cost Complexity Pruning), 详细过程参考CPP剪枝算法描述
  • MEP 最小误差剪枝(Minimum Error Pruning)
  • CVP (Critical Value Pruning)
  • OPP (Optimal Pruning)
ID3和C4.5的剪枝
CART的剪枝

CART使用的是CCP剪枝

  • 对任意的子树,我们可以定义子树的损失
    • \(C_{a}(T)=C(T)+\alpha|T|\)
    • 子树的损失 = 子树的预测误差 + \(\alpha\) * 子树的节点数
    • 对于回归树和分类树,子树的预测误差定义不一样,前者是误差的平方和,后者是基尼指数
  • 可以证明对于给定的Alpha,一定存在某个损失最小的子树,也就是我们要的最优子树
  • 现实中实现时可以使用递归的方法实现
CCP剪枝算法描述

CPP剪枝也是一种后剪枝算法
修正:统计学习方法CART算法第六步中应该跳到第二步,而不是第三步

  • 1:计算所有节点对应的\(\alpha\)值: \(\alpha=\frac{C(t)-C(T_{t})}{|T_{t}|-1}\)
    • \(C(t)\)是以t节点单一节点为树时单一节点树的损失函数
    • \(C(T_{t})\)是以t节点为根节点的子树时整棵子树的损失函数
    • \(|T_{t}|\)是以t节点为根节点的子树时整棵子树的节点数量
  • 2:对当前\(\alpha\)值最小的节点t剪枝,并存储中间结果的\(\alpha\)值和剪枝后的树结构
    • 当\(\alpha\)确定时,存在唯一的最小子树\(T_{\alpha}\)使损失函数\(C_{\alpha}(T)\)最小
  • 3:选取当前树为剪枝后的树,跳转到第1步,直到剪枝到只有三个节点的树时截止
  • 4:截止后得到节点数量从大到小的多个子树\(T_{\alpha_{0}}, T_{\alpha_{1}},…,T_{\alpha_{n}}\). (其中\(T_{\alpha_{i}}\)也就对应着第i个\(\alpha\)值\(\alpha_{i}\))
  • 5:用交叉验证法对\(\alpha\)的值进行选择(CART算法执行时\(\alpha\)类似超参数,整个算法学习的过程类似于用交叉验证法确定超参数的过程,\(\alpha\)的值确定了,对应的决策树也就确定了!)

关于连续特征

统计学习方法
  • 在<<统计学习方法>>中回归树的特征默认是连续变量,分类树的特征默认是离散变量
机器学习 周志华
  • 在<<机器学习>>中提到连续特征的一种解决方案:
    • 把该连续特征所有出现的取值排序
    • 取临近两两之间的平均值作为划分点
    • 像处理离散的点一样,使用信息增益最大化,信息增益率最大化,或者是基尼指数最小化实现对应的划分选择
个人总结
  • 处理连续型变量(特征的能力)
    • ID3 不能处理连续型特征
      • 因为连续型特征往往使得每一个样本该特征取值都不一样,造成该特征对数据集D的经验条件熵为0?
      • 使得ID3算法趋向于选择这个特征?
    • C4.5 能处理连续型特征
      • 将数据排序后找到类别不同的分割线作为切分点
      • 根据切分点把连续属性二分类装换为布尔类型
      • 可多次使用连续属性分类
    • CART 能处理连续型特征
      • 实际对连续型特征的处理与C4.5一样
      • 由于CART树构建时每次都会对特征进行二值化分,所以可以很好的适用与连续型变量

一些总结

  • 算法ID3生成可能是多叉树,而CART一定是二叉树,*<<统计学习方法>>*中二者生成相同的数是巧合,除了不同评价方式的特征选择结果一样以外,还需要被选中的特征都是二值的!
  • ID3相当于用极大似然法对模型进行选择

一种很好的理解思路

ID3
  • ID3算法就是用信息增益大小来判断当前节点应该用什么特征来构建决策树,用计算出的信息增益最大的特征来建立决策树的当前节点
ID3的缺点:
  • ID3不能处理连续特征
  • ID3对取值较多的特征有着偏好在相同条件下,取值比较多的特征比取值少的特征信息增益大
  • ID3不能处理缺失值
  • 没有考虑过拟合的问题(问题: ID3没有剪枝吗?)
C4.5
  • C4.5可以看成是对ID3进行改进
C4.5对ID3的改进
  • 对于ID3不能处理连续特征,C4.5的思路是将连续的特征离散化.

    • 样本(m个样本)按照特征的取值排列后取相邻样本的平均值作为划分点(m-1个划分点),分别计算以每个划分点作为二元分类时的信息增益. 最终选择信息增益高的(问题:这里是C4.5,为什么不是使用信息增益比而是信息增益来作为区分?)
    • C4.5选择连续特征作为分类特征时,只分两类,但是后面(其他层结点)可以使用该特征分类,也就是说连续特征在C4.5中可以多次使用,但每次只分为两部分
  • 对于ID3信息增益最大指标会造成偏向于取值较多的特征的问题. C4.5使用信息增益比来解决问题

  • 对于ID3不能处理缺失值的问题,C4.5主要解决两个问题

    • 1) 如何在属性值缺失条件下进行属性选择
      • 没有缺失值的属性,正常处理
      • 每个属性A有缺失值:
        • 对该特征进行划分时仅仅考虑在属性A上没有缺失的部分数据,有缺失的数据不考虑.
        • 无缺失的数据计算收益时需要乘以一个权重(无缺失的样本总数/样本总数)
        • 相当于信息增益适当缩小
    • 2) 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分
      • 在A属性没有缺失值的样本,正常划分
      • 在A属性有缺失值的样本:
        • 给每个样本引入权重,初始值都为1
        • 同一个样本按照不同概率划入到不同的结点(当前叶节点)中去(概率是当前结点中样本数量/无缺失样本总数)
  • 对于没有考虑过拟合的问题:

    • C4.5引入了正则化系数剪枝(问题: ID3没有剪枝吗?)
C4.5的缺点
  • [这个问题存疑,没有任何书籍显示C4.5的剪枝策略是PEP,<<统计学习方法>>中只是简单的介绍了后剪枝]C4.5的剪枝方法时PEP,PEP准确度高,但是存在下面两个子问题:
    • 1) PEP使用由上而下的剪枝策略,会导致与预先剪枝相同的问题,造成过度剪枝
    • 2) 会造成剪枝失败的情况
  • C4.5生成多叉树,计算机中很多时候多叉树运算效率不如二叉树来的高
  • C4.5只能用于分类
  • C4.5需要进行大量的对数运算(计算熵)
CART
  • 可以理解为对C4.5进一步的改进
CART对C4.5的改进
  • CART使用CPP代价复杂度剪枝算法
    • 详细过程参考CCP剪枝算法描述
  • CART使用二叉树只生成二叉树,即使是离散特征
    • CART对连续特征的处理与C4.5完全相同
    • CART对离散特征也是二分类且也是可以多次使用同一特征(ID3与C4.5中离散特征只能使用一次,且是多分叉)
    • 所以CART是一颗二叉树
  • CART可有分类树和回归树两种
    • 回归树的目标函数的优化是: 最小化误差的平方和
    • 分类树以概率最大的类别作为叶节点的类别
    • 回归树以中位数或者均值作为预测结果
  • CART使用基尼指数作为结点混乱度的度量指标
    • 避免了对数计算(与熵比较)
ID3,C4.5,CART的缺点
  • 每次之全责一个最优特征作为分类决策,而实际中其实可能需要多个特征一起决策
    • 解决方案: 多变量决策树(每次选择多个特征一起决策)
      • 单个特征决策可以看成是直线
      • 多个特征决策可以看成是斜线
  • 样本改变一点点都会造成树的结构改变很大
    • 解决方案: 随机森林等集成学习方法

ML——集成学习

Posted on 2018-03-15

集成学习(Ensemble)的本质是一种组合基础模型实现更高泛化能力和精度的技术框架
本文参考了博客: http://www.cnblogs.com/jasonfreak/p/5657196.html


集成学习的三族算法

Bagging

通过重采样技术生成若干不同子训练集,然后在每个训练集上训练一个分类器,最终采用投票方式产生模型最终结果

  • m个基础模型
  • 从原始训练集中抽样生成m个子训练集,用子训练集训练每个基础模型
  • 最终预测结果: 对所有基础模型预测的结果进行综合产生
代表模型
随机森林
  • RF = Bagging + DT (随机森林中特征的选择也是随机的,这一点不同于DT,也不同与Bagging)
  • 随机森林详情可参考ML——RF

Boosting

每个训练样例都有权重,每次训练新分类器的时候都着重训练那些在上一次分类过程中分错的样例,权重会随着迭代次数的变化而变化

  • 训练思想是,每一轮迭代都将重心放到分错类的样本上
  • 训练过程为阶梯状
  • 基础模型按照次序依次训练(实现时可做到并行)
  • 前一个模型的预测结果修改后一个模型的样本权重(注意:模型的训练集时不会变的,只有每个样本的权重在变化,增大分错的样本的权重,使得后面训练时重视分错的样本),以此类推
  • 最终预测结果: 对所有基础模型预测的结果进行线性综合产生
代表模型
提升树
  • Boosting Tree = AdaBoost + DT (AdaBoost是Boosting族算法的一种)
梯度提升树
  • GBDT = Gradient Boosting + DT (Gradient Boosting是Boosting族算法的一种)
  • GBDT详情可参考ML——GBDT

Stacking

每个分类器首先做一遍决策,然后将分类器们的决策送到更高一层的模型中,把他们当做特征再进行一次训练

  • 训练所有基础模型
  • 获取所有基础模型的预测结果
  • 第j个模型对某个训练样本产生的预测值作为该训练样本的第j个特征,标签不变,生成一个新的数据集(注意,样本的特征空间大小发生了变化,标签没变)
  • 基于新的训练集进行训练,得到预测模型M()
  • 测试时也要将特征转换后再用M进行预测
  • 实质上就是先用一些模型提取特征(这些模型的输出作为更高层模型的特征),然后再用模型的输出作为最终模型的特征,从而实现模型的堆叠(Stacking)
  • 理论上可以堆叠各种各样的分类器

方差与偏差

  • 偏差与方差可以参考我的博客: 模型的偏差与方差
1…141516…20
Joe Zhou

Joe Zhou

世界上只有一种真正的英雄主义,那就是在认清生活真相之后依然热爱生活。 ——罗曼·罗兰

195 posts
38 tags
GitHub E-Mail
© 2024 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4