回归
参考资料
参考1:随机梯度下降(简单线性回归的Python实现)
http://www.dataminingclub.com/%E9%9A%8F%E6%9C%BA%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95/
从线性回归谈到岭回归lasso回归再到结构风险最小化和参数缩减
回归和分类是机器学习算法所要解决的两个主要问题。分类大家都知道,模型的输出值是离散值,对应着相应的类别,通常的简单分类问题模型输出值是二值的,也就是二分类问题。但是回归就稍微复杂一些,回归模型的输出值是连续的,也就是说,回归模型更像是一个函数,该函数通过不同的输入,得到不同的输出。
那么,什么是线性回归,什么是非线性回归呢?
线性回归与非线性回归
前面说了,我们的回归模型是一个函数是吧,那么线性回归就是模型函数是由若干个基本函数线性加权得到的函数。也就是每一个基本函数前面都有一个权值来调和自己对于整个模型函数的重要性。然后,非线性函数就是各个基本函数并不是以线性加权形式结合。在线性回归模型里面有一大类,叫广义线性模型GLM,这里先不讲。
线性回归模型中的各个基函数如何选择,模型的函数就会有不同的结果。而且基函数的选择有时可以将线性模型扩展到一般的非线性形式,只要你将基函数定义为一个非线性函数就好啦。虽然通常我们都是将每个基函数定义为输入向量数据每一维特征的一次方函数,也就是输入数据的每一维特征取值,但是我们仍然有必要聊聊其他的情况,这样才能感觉到线性回归的强大。
首先,假设模型由N个基函数线性加权构成,我们可以在第一个取输入x的一次方,第二个取x的二次方,。。。第N个取N次方,这样模型就成为了x的多项式形式。这样会导致一个问题,每一个基函数的输入特征值会影响到其他基函数的值,因为它们共享变量x嘛。有一种函数可以解决这个问题,样条函数,有兴趣的同学可以查查。
其次,如果每一个基函数是均值和方差确定的高斯函数,那么整个模型想不想高斯混合模型?哈哈,是挺像,但不是。因为高斯混合模型的每一个高斯分量的均值和协方差是未知的,也就是隐变量,而这里的基函数的均值和方差是确定的。
然后,如果每一个基函数是三角函数,那么整个模型就是傅里叶变换的形式。怎么样,哈哈,牛逼吧。这个在信号处理方面非常有用,比如小波分析。
好了,下面谈论的线性回归的模型的基函数都是最简单的输入数据某一位特征的一次方形式。
典型线性回归
在最普遍的线性回归的应用场景中,我们的输入数据是一些具有M维特征的向量。然后回归模型的函数就是M维特征取值的线性加权。我们要求取的模型参数就是这些权值。现在我们有这样一批数据和这些数据的标注,怎么得到权值呢?方法就是,我们定义一个损失函数,这个损失函数是将训练数据代入我们模型的预测值和真实标注值的差的平方,然后再将这些平方求和,即普通最小二乘法。有了损失函数,参数求解的问题就成了损失函数求和之最小化的最优化问题。
为什么要这么定义损失函数呢?其实这个损失函数不是随便定义滴。假设真实观测值=模型的预测值+残差,并且不妨假设残差服从均值为零的的高斯分布,那么真实观测值也服从高斯分布。通过对所有训练样本进行最大似然估计,然后经过一系列推导,会发现最大似然估计等价于普通最小二乘法。
这里需要注意,使用最小二乘法有一个缺陷,就是如果残差不服从高斯分布而服从一个其他差距很大的分布,那么求取出来的模型就会不正确。概率分布是一个让人又爱又恨的东西,如果我们已知某一个数据集服从什么样的概率分布,我们就可以依据这个构建一个非常好的模型。但是,通常情况下我们不知道数据服从什么样的分布,(或者就算我们知道但是受限于数据量的限制,比如我们经常把异常值错当做作为错误值,其实只是数据量够大情况的正常值而已),我们也很难去用一个分布、甚至多个分布的混合去表示数据的真实分布。如果一个算法,是对里面的分布进行了某些假设,那么可能这个算法在真实的应用中就会表现欠佳。
回到求取模型参数的问题上。通常求取模型参数有两种途径。一种是求出模型的解析解,一种是求出近似解。解析解的好处就是精确,但是求取过程计算量大,比较复杂,而且很多模型的解析解是无法求取的。近似解虽然不是特别精确,而且有时候可能会收敛到局部最优,但是计算方便,已经够用。
最小二乘法的解析解可以这样求出:将损失函数关于参数求导并且令导数为零,然后通过变换可以直接得到解析解。
最小二乘法的近似解可以这样求出:随机梯度下降法。即LMS也叫最小均方根法?具体做法是:每次随机选取一个训练样本,对这个训练样本的观测值和模型预测值的差的平方关于参数求导,也就是梯度。然后将梯度乘上一个alpha步长,将这个整体最为每一次迭代的变化部分。
下面我们要讲一下岭回归和lasso回归,在这之前必须得先讲一讲结构风险最小化和参数缩减。
结构风险最小化与参数缩减
结构风险最小化是一种模型选择策略。其实在上面我们求解模型参数的时候,就已经涉及到模型选择的问题。模型选择的策略一般有两种,除了结构风险最小化,还有经验风险最小化。而我们之前用的就属于经验风险最小化。经验风险最小化有一个缺点就是,它求取的参数是对于训练数据的无偏估计,结果就是容易产生过拟合现象。而结构风险最小化就是为了克服过拟合而提出的。它是在经验风险最小化的基础上增加了一个正则化因子。通常正则化因子是模型规模的函数。模型越复杂,这个函数取值越大。
正则化因子的加入其实可以解释为对模型参数进行了某种条件约束,然后参数的求解过程就相当于应用拉格拉日乘子法。通过对参数进行约束,保证了参数的取值不会太极端,也就进行了“参数缩减”。
岭回归
有些情况下无法按照上面的典型回归的方法去训练模型。比如,训练样本数量少,甚至少于样本维数,这样将导致数据矩阵无法求逆;又比如样本特征中存在大量相似的特征,导致很多参数所代表的意义重复。总得来说,就是光靠训练样本进行无偏估计是不好用了。这个时候,我们就应用结构风险最小化的模型选择策略,在经验风险最小化的基础上加入正则化因子。当正则化因子选择为模型参数的二范数的时候,整个回归的方法就叫做岭回归。为什么叫“岭”回归呢?这是因为按照这种方法求取参数的解析解的时候,最后的表达式是在原来的基础上在求逆矩阵内部加上一个对角矩阵,就好像一条“岭”一样。加上这条岭以后,原来不可求逆的数据矩阵就可以求逆了。不仅仅如此,对角矩阵其实是由一个参数lamda和单位对角矩阵相乘组成。lamda越大,说明偏差就越大,原始数据对回归求取参数的作用就越小,当lamda取到一个合适的值,就能在一定意义上解决过拟合的问题:原先过拟合的特别大或者特别小的参数会被约束到正常甚至很小的值,但不会为零。
lasso回归
上面说到,岭回归是在结构风险最小化的正则化因子上使用模型参数向量的二范数形式。那么,如果使用一范数形式,那就是lasso回归了。lasso回归相比于岭回归,会比较极端。它不仅可以解决过拟合问题,而且可以在参数缩减过程中,将一些重复的没必要的参数直接缩减为零,也就是完全减掉了。这可以达到提取有用特征的作用。但是lasso回归的计算过程复杂,毕竟一范数不是连续可导的。关于lasso回归相关的研究是目前比较热门的领域。
以上就是线性回归相关的一些知识的白话叙述。关于回归问题还有一些相关话题比如逻辑斯蒂回归和树回归,限于篇幅,以后再总结