【转载】逻辑回归:使用SGD(Stochastic Gradient Descent)进行大规模机器学习

来源:互联网 发布:淘宝优惠券网页 编辑:程序博客网 时间:2024/06/14 02:53

原文地址:http://www.cnblogs.com/batys/p/3298816.html




参考:http://en.wikipedia.org/wiki/Stochastic_gradient_descent

1 线性回归

了解逻辑回归之前先了解下线性回归:因变量和自变量之前存在线性关系。一般模型如下:


从一般模型可以看出Y和X(X1,X2,X3...)之间存在线性关系。线性回归的目的就是为了确定因变量和自变量的关系程度,换言之,就是求回归模型的参数。

2 逻辑回归

(1) why need it?

要说逻辑回归的优点,自然要先说下线性回归的缺点,主要有难以处理以下两个问题

a. 因变量Y如果不是数值型

b. 因变量与自变量不存在线性关系

 

(2) 逻辑回归的一般形式

P是概率,是某个事件发生的概率,处理类别属性,例如是否是男性,是否是色狼?

而且进行了logit变换。也就是说logit(P)与自变量之间存在线性关系,而p显然和X不存在线性关系。

那为什么是logit变换,不是XXX其他的变换,这里有一个前提假设:概率与自变量的关系往往是 S 型的曲线

 

(3)参数估计

    模型有了,需要利用已知的样本来进行参数估计,最大似然估计用的比较多。mahout中用的是随机梯度下降法(SVD)。此处介绍下随机梯度下降法。

    a. 梯度下降法

        搜索寻优的一个过程,假定一个初始状态,然后不断更新,知道达到目标函数的极小值。其中 称为学习率,他决定梯度下降搜索的步长。算法流程如下:

其中W表示权重。

b. 随机梯度下降

    sgd解决了梯度下降的两个问题: 收敛速度慢和陷入局部最优。修正部分是权值更新的方法有些许不同。

 

3 基于梯度下降的学习

对于一个简单的机器学习算法,每一个样例包含了一个(x,y)对,其中一个输入x和一个数值输出y。我们考虑损失函数,它描述了预测值和实际值y之间的损失。预测值是我们选择从一函数族F中选择一个以w为参数的函数的到的预测结果。 
我们的目标是寻找这样的函数,能够在训练集中最小化平均损失函数 
 
由于我们不知道数据的真实分布,所以我们通常使用 
 
来代替 
 
经验风险用来衡量训练集合的效果。期望风险E(f)描述了泛化(generation)的效果,预测未知样例的能力。 
如果函数族F进行足够的限制(sufficiently restrictive),统计机器学习理论使用经验风险来代替期望风险。 

3.1 梯度下降 
我们经常使用梯度下降(GD)的方式来最小化期望风险,每一次迭代,基于更新权重w: 
,为学习率,如果选择恰当,初始值选择合适,这个算法能够满足线性的收敛。也就是:,其中表示残余误差(residual error)。 

基于二阶梯度的比较出名的算法是牛顿法,牛顿法可以达到二次函数的收敛。如果代价函数是二次的,矩阵是确定的,那么这个算法可以一次迭代达到最优值。如果足够平滑的话,。但是计算需要计算偏导hession矩阵,对于高维,时间和空间消耗都是非常大的,所以通常采用近似的算法,来避免直接计算hession矩阵,比如BFGS,L-BFGS。

 

3.2 随机梯度下降

SGD是一个重要的简化,每一次迭代中,梯度的估计并不是精确的计算,而是基于随机选取的一个样例:



随机过程 依赖于每次迭代时随机选择的样例,尽管这个简化的过程引入了一些噪音,但是我们希望他的表现能够和GD的方式一样。 

随机算法不需要记录哪些样例已经在前面的迭代过程中被访问过,有时候随机梯度下降能够直接优化期望风险,因为样例可能是随机从真正的分布中选取的。 

随机梯度算法的收敛性要满足: 
 并且  

二阶随机梯度下降: 
 
这种方法并没有减少噪音,也不会对计算有太大改进。

 

3.3 随机梯度的一些例子 
下面列了一些比较经典的机器学习算法的随机梯度:


参考:http://en.wikipedia.org/wiki/Stochastic_gradient_descent

1 线性回归

了解逻辑回归之前先了解下线性回归:因变量和自变量之前存在线性关系。一般模型如下:


从一般模型可以看出Y和X(X1,X2,X3...)之间存在线性关系。线性回归的目的就是为了确定因变量和自变量的关系程度,换言之,就是求回归模型的参数。

2 逻辑回归

(1) why need it?

要说逻辑回归的优点,自然要先说下线性回归的缺点,主要有难以处理以下两个问题

a. 因变量Y如果不是数值型

b. 因变量与自变量不存在线性关系

 

(2) 逻辑回归的一般形式

P是概率,是某个事件发生的概率,处理类别属性,例如是否是男性,是否是色狼?

而且进行了logit变换。也就是说logit(P)与自变量之间存在线性关系,而p显然和X不存在线性关系。

那为什么是logit变换,不是XXX其他的变换,这里有一个前提假设:概率与自变量的关系往往是 S 型的曲线

 

(3)参数估计

    模型有了,需要利用已知的样本来进行参数估计,最大似然估计用的比较多。mahout中用的是随机梯度下降法(SVD)。此处介绍下随机梯度下降法。

    a. 梯度下降法

        搜索寻优的一个过程,假定一个初始状态,然后不断更新,知道达到目标函数的极小值。其中 称为学习率,他决定梯度下降搜索的步长。算法流程如下:

其中W表示权重。

b. 随机梯度下降

    sgd解决了梯度下降的两个问题: 收敛速度慢和陷入局部最优。修正部分是权值更新的方法有些许不同。

 

3 基于梯度下降的学习

对于一个简单的机器学习算法,每一个样例包含了一个(x,y)对,其中一个输入x和一个数值输出y。我们考虑损失函数,它描述了预测值和实际值y之间的损失。预测值是我们选择从一函数族F中选择一个以w为参数的函数的到的预测结果。 
我们的目标是寻找这样的函数,能够在训练集中最小化平均损失函数 
 
由于我们不知道数据的真实分布,所以我们通常使用 
 
来代替 
 
经验风险用来衡量训练集合的效果。期望风险E(f)描述了泛化(generation)的效果,预测未知样例的能力。 
如果函数族F进行足够的限制(sufficiently restrictive),统计机器学习理论使用经验风险来代替期望风险。 

3.1 梯度下降 
我们经常使用梯度下降(GD)的方式来最小化期望风险,每一次迭代,基于更新权重w: 
,为学习率,如果选择恰当,初始值选择合适,这个算法能够满足线性的收敛。也就是:,其中表示残余误差(residual error)。 

基于二阶梯度的比较出名的算法是牛顿法,牛顿法可以达到二次函数的收敛。如果代价函数是二次的,矩阵是确定的,那么这个算法可以一次迭代达到最优值。如果足够平滑的话,。但是计算需要计算偏导hession矩阵,对于高维,时间和空间消耗都是非常大的,所以通常采用近似的算法,来避免直接计算hession矩阵,比如BFGS,L-BFGS。

 

3.2 随机梯度下降

SGD是一个重要的简化,每一次迭代中,梯度的估计并不是精确的计算,而是基于随机选取的一个样例:



随机过程 依赖于每次迭代时随机选择的样例,尽管这个简化的过程引入了一些噪音,但是我们希望他的表现能够和GD的方式一样。 

随机算法不需要记录哪些样例已经在前面的迭代过程中被访问过,有时候随机梯度下降能够直接优化期望风险,因为样例可能是随机从真正的分布中选取的。 

随机梯度算法的收敛性要满足: 
 并且  

二阶随机梯度下降: 
 
这种方法并没有减少噪音,也不会对计算有太大改进。

 

3.3 随机梯度的一些例子 
下面列了一些比较经典的机器学习算法的随机梯度:

0 0