机器学习 一般回归问题

Given a labeled training set learn a general mapping which associates previously unseen independent test data with their correct continuous prediction.

原文链接

回归问题和分类问题很相似,区别在于回归问题的输出是一个连续值。

这里写图片描述

上图是训练数据 和 对应的连续值的一个实例。训练数据用黑色点表示,数据对应的连续值由它在y轴上的位置体现。这个例子中,输入是一维的:x是自变量,y是因变量。
图中灰色点表示的是一个没有在训练数据中出现的数据,回归任务的目标就是根据训练数据得到自变量和因变量之间的关系。得到这个关系之后,对于没有出现在训练集中的数据,可根据其自变量,估计其因变量的值。

2. 一般步骤

要寻找数据和对应连续值之间的关系,实际就是要找到一个函数,能够将数据映射到连续值上。

回归问题一般通过以下三步解决:
1. Model: function set
选择一个模型。模型实际就是函数的集合,线性回归模型,就是所有线性函数组成的集合
2. Goodness of function
需要有一个评判标准,能够判断函数的好坏
3. Best function
利用上一步中评判标准,在函数集合中找到最好的函数

对于不同的模型,寻找最好的函数的方法,很有可能是不一样的。但是对于同一个问题,判断函数好坏的方法往往是相同的

3. Goodness of function

评价函数好坏的函数称作loss function(损失函数),一般loss function的值越大,该函数表现得越差
它由loss term(损失项)和regularizerm(正则化项)两项相加构成:
1. loss term反映的是预测值与实际值之间的误差。对于回归问题,常用的loss term是均方误差
2. regularizer反映的是函数的复杂程度,函数越复杂,该项的值越大。

3.1. regularizer

正则化项是为了控制函数的复杂程度,它的思想符合奥卡姆剃刀原理:

在所有可能选择的函数中,能够很好地解释已知数据并且十分简单才是最好的函数

参数向量的范数是一种常用的正则化项:

L1=||w||1=i=1n|wi|L2=||w||2=i=1n|wi|2−−−−−−−√L1=||w||1=∑i=1n|wi|L2=||w||2=∑i=1n|wi|2
为0时,相当于某个参数没有作用。

4. Model & Best function

4.1. 线性回归模型

线性回归模型,表示的是线性函数的集合,y=wTx+by=wTx+b。其中x和y都是向量。

4.1.1. 最小二乘法

当loss function为均方误差时,用最小二乘法可以直接计算出ww的解析解。

最小二乘法找到的是误差平方和最小的函数:

L=i=1N(y^i(wTxi+b))2L=∑i=1N(y^i−(wTxi+b))2
是样本个数

最小二乘法实际是对ww的值

求偏导等于0有效的原因,主要是因为函数的形式保证了偏导为0时,恰好能够取到最值。

4.1.2. 梯度下降法

当loss function改变了,最小二乘法很可能不再有用。这时,可以采用梯度下降法。梯度下降法是一种迭代式的算法。

梯度下降法的基本思想,就是对loss function求参数的梯度,向梯度下降的方向更新参数:

θt+1=θtηL(θt)θt+1=θt−η∇L(θt)

L是loss function
θθ和梯度相乘体现的是,梯度越大,调整的量也越大。

在整个训练过程中,ηη,一开始较大,后面趋于极值点时逐渐减小。

Adagrad

Adagrad是一种常用的learning rate自动调节方法

wt+1=wtηtσtgtwt+1=wt−ηtσtgt
root mean square

实际上t+1−−−−√t+1变化的越快,这一项的值也会越大

Stochastic Gradient Descent随机梯度下降

一般的梯度下降,计算所有样本的loss function后,update参数

SGD
1. (随机)选择一个样本
2. 计算这个样本的loss function,update参数

更新参数更频繁,有助于加速训练

4.2 多项式回归

多项式回归模型,表示的是多项式函数的集合,例如:

hθ(x)=θ0+θ1x1+θ2x22+θ3x33hθ(x)=θ0+θ1x1+θ2x22+θ3x33
的线性函数,4.1中的方法依然有效

4.3 regression tree回归树

回归树是由决策树发展而来的,决策树一般用于分类问题

决策树的定义:
决策树是以层次的方式组合起来的一组问题的集合,并以树的形式进行表示。
对于一个给定的输入对象,决策树通过依次询问关于它已知特征的问题,来预测它的未知特征。后一个询问的问题,依赖于前一个问题的回答,这种依赖关系表示为树中的路径;对象的未知特征由路径上的终点决定。

这里写图片描述

上图是一棵判断照片场景的决策树,通过对多个问题的依次判断,最终得到照片所属的场景。
决策树可以认为是一种将复杂问题不断分解为简单问题的思路。在建立决策树的时候,需要考虑的问题是 选择哪一个特征对当前的数据进行划分、如何防止过拟合等。

与决策树的思想类似,回归树的思路是将一个复杂的非线性回归问题,分解成一组更小的能够被简单模型(比如线性模型)解决的问题
这里写图片描述

上图是一个二叉回归树的实例,从树根向下,数据的熵会不断变小。
与构建决策树类似,构建回归树时需要考虑的问题是,选择哪一个属性对当前的数据进行划分。与决策树不一样的地方在于,需要预测的属性是连续的,因而在叶子节点选择什么样的预测模型也很关键。

4.3.1 CART(Classificaion and Regression Tree)分类回归树算法

CART是一种常用的建立二叉决策树的算法,既可以用于分类也可以用于回归,并且连续和非连续的属性都能够处理
CART算法有两个关键步骤:
1. 递归划分训练样本,进行建树
2. 利用验证集进行剪枝

建树的伪代码如下:

createTree()
    找到最佳的待切分特征:
        如果该节点不能再分
            将该节点存为叶子节点
        否则
            执行二元切分
            左子树调用createTree()
            右子树调用createTree()
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

由于CART建出来的是二叉决策树,这减少了切分特征的难度,只需要选择一个切分点,将样本切分成两部分
1. 对于离散型特征
枚举特征取值的不同组合,分别放到树的左枝和右枝。对不同组合产生的树进行评判,找到最佳组合
2. 对于连续型特征
将取值排序,分别取两相邻值的平均值作为分隔值,小于和大于分隔值的分别放在树的左枝和右枝。对不同分隔值产生的树进行评判,找到最佳分隔值

切分的目标是让样本随着树的分支变的越来越纯,使得叶子节点样本的预测比较简单
树的纯度有多种度量方式,CART算法建立回归树时,常使用最小平方残差作为度量:

SS(t)=(yiy¯¯¯(t))SS(t)=∑(yi−y¯(t))

利用这个度量希望达到的效果是,组内方差最小,组间方差最大。即决策树的两枝内部差异小,两枝之间的差异大

剪枝的目的是为了限制树的生长,避免过拟合。剪枝分为预剪枝后剪枝

  • 预剪枝是通过提前停止树的构造来对树进行剪枝。一般的策略有:树的深度达到用户的要求,样本个数少于用户的设定,纯度的上升幅度小于指定的幅度等
  • 后剪枝是先构造完整的决策树,允许发生过拟合。在完整的决策树上,将一些节点剪去

CART中采用了代价复杂度剪枝(Cost-Complexity Pruning, CCP),这是一种后剪枝
对于决策树T0T0越小

CCP从T0T0,直至决策树仅剩下根
在得到的决策树序列中,用验证集找到效果最好的决策树

除了CART算法之外,决策树生成算法还有ID3,C4.5等等,这些算法用了信息增益、信息增益比等不同指标对树的纯度进行度量

4.4. 神经网络

神经网络一般用来解决分类问题,也可以用来解决回归问题

这里写图片描述

上图是一个神经网络的示意图。神经网络有一个输入层、一个输出层、0到多个隐藏层。输入层的维度等于样本的特征个数,输出层的维度和具体问题有关,在回归问题中,输出层是一维的,即预测值。隐藏层的层数和维度需要通过经验和不断尝试确定。
每一层中的元素被称作神经元,它有多个输入,一个输出。将输入加权求和,再加上bias,通过一个激活函数,得到一个在0至1之间的值作为输出。实际上,当激活函数是sigmoid函数(σ(z)=11+ezσ(z)=11+e−z)时,每一个神经元完成的就是一个逻辑斯蒂回归。

神经元之间的连接方式需要用户来指定,上图的神经网络,每一层的神经元都和上一层所有神经元的输出相连,这种神经网络被称作全连接神经网络
不同结构的神经网络,可以看做是不同的模型。结构确定后,神经网络的神经元还有很多参数需要调整,预测效果最佳的参数组合构成的神经网络可以看做是best function。

神经网络结构确定之后,寻找best function的过程,一般采用反向传播算法

4.4.1. 神经网络用于回归

这里写图片描述

输入层和隐藏层与一般分类问题的神经网络类似,区别在于回归问题的神经网络的输出层只有一个神经元,并且这个神经元不能使用一般的激活函数。激活函数会使得输出限制在0和1之间。所以输出层的神经元直接去掉激活函数,只是将输入相加
回归问题的loss function,一般使用mse

5. 误差分析

在确定了一个模型,找到best function之后,预测的误差可能还是不能让人满意。接下来需要对误差进行分析,改进模型
不同模型在同样的数据集上会有不一样的表现,分析当前预测的误差,有助于发现模型的改进方法

这里写图片描述

对于同一个模型,随机选择一些训练数据,能够找到模型的best function;多次随机选择不同的训练数据,就会找到不同的best function。上图中每一个蓝点是以这种方式找到的best function,蓝点与红色靶心偏差越大,体现的是best function的预测误差越大。

最佳情况下,同一个模型按不同数据集找到的best function都聚集在靶心上
如果这些best funxtion比较分散,但best function的中心在靶心上,这反应了模型表达能力很强,但是表现的不稳定,不同数据集得到的best function差异比较大。这种误差来源,称作variance
如果这些best function很集中,但best function的中心离靶心很远,这反应了模型表现很稳定,但是不同数据集得到的best function表现都很差。极端情况下,模型每次都返回相同的值,则所有的best function都在靶上同样的位置。这反应了模型的能力不够,这种误差来源称作bias

模型越复杂,表达能力就越强,一般bias越小,variance越大。目标是找到一个模型,它的bias和variance的和比较小,即总的误差比较小

  • 欠拟合underfitting: large bias low variance,
    增加特征;设计更复杂的模型

  • 过拟合overfitting: low bias large variance
    增加数据,eg.图片旋转;正则化,使模型更平滑

通过判断当前是过拟合还是欠拟合,有助于对模型或者数据进行相应的调整,从而使总的预测误差减小

6. Ensemble

Ensemble是将多个模型或者一个模型的不同数据集上的best function集合起来,得到一个效果更好的模型的方法。这多个模型之间应该各不相同,有各自擅长的方面

6.1. Bagging

对于一个复杂模型,其variance很大,bias很小
Bagging的基本思想是,划分数据集,不同数据集上利用同一个复杂模型找到多个best function。将这几个best function的预测值求平均,往往会比一个best function的误差更小。
这里写图片描述
当模型很复杂,容易过拟合时,可以用bagging 降低variance。eg.决策树

6.1.1. Random Forest

随机森林是决策树做了bagging的版本
决策树是很容易过拟合的,在训练集上甚至能做到0%的误差,只要将每一个样本分在决策树不同的叶子节点上

对于决策树而言,简单的划分数据集构造不同的决策树还是不够的。随机森林,随机限制了每个决策树建树时允许使用的特征,从而保证生成的决策树都是不一样的。再将多个决策树的预测结果整合起来,作为随机森林的预测值。

6.2. Boosting

Boosting适用于将多个较差的模型,集合为一个较好的模型

Boosting的思路是,先找到第一个函数f1(x)f1(x)…,最后将所有的函数集合起来。

Boosting中可以给每个样本一个权重,样本设置不同权重,得到不同的数据集。

对于f1(x)f1(x),有很多种方法

6.2.1 Adaboost

Adaboost是一种boosting方法,其思路是调整样本的权重,构造一个f1(x)f1(x)

设样本的权重为u

如果f1分类正确,u = u / d (减小)
如果f1分类错误,u = u * d (增大)
 
   
   
   
   
  • 1
  • 2

f2在权重调整后的数据集上得到

Adaboost根据不同函数的错误率将他们整合起来:

H(

你可能感兴趣的:(机器学习,机器学习,回归问题)