回归模型
机器学习中的模型分类方法很多,如果按照label的变量类型分,可分为分类模型和回归模型。分类模型的label为离散的类别型变量,而回归模型的label为连续型的数值型变量。
1、一元线性回归模型
(1)模型基本形式
所谓一元线性回归模型,是指用一个单一变量对的线性方程来拟合数据,从而预测出未知label的样本的预测值的方程,在二维平面中表现为一条直线。基本形式如下:
其中,y表示样本预测值,x表示样本的特征值。而a和b是要根据样本数据求解的模型参数。
(2)参数求解
为了使方程能最大程度拟合样本特征和其label之间的关系,需要找到最合适的参数a和b。那怎样才算最大程度拟合样本呢,显然是根据方程计算出来的label预测值和label实际值的差距最小。所谓差距最小,不是对于某一个或者几个样本来说,而是对于所有的样本误差都小,才能表明方程的拟合效果好。
计算差距的方法很多,通常为了消除正负误差相抵的情况而使用绝对值表示误差。但是,在回归模型中,我们需要通过对误差函数求导的方式来找出极值而对参数求解,因此就需要误差函数处处可导。所以,自然引进误差的平方,当然是对所有的样本,那么就是所有样本的误差平方和。
所以,参数求解的目的就是已知训练样本x、y,需要找到a和b的值,使得在此值下目标函数的值最小。根据上述分析,一元线性回归的目标函数如下:
利用求导的思想,当目标函数的导数为0时对应的a和b的值便是模型最优参数。对上述目标函数通过求导求解出最优参数的过程就是最小二乘法。
2、模型参数求解策略
为了求解出最佳模型,需要定下策略,也就是给定目标函数。目标函数不同,最优化算法也不同。目标函数又和损失函数有着千丝万缕的联系,损失函数度量模型一次预测的好坏,如果需要度量平均意义下模型预测的好坏,则用风险函数。
(1)损失函数
在机器学习中,所有的算法模型都依赖于最小化或最大化某一个函数,这个函数被称为“目标函数”。而最小化的这组函数被称为“损失函数”。损失函数描述的是单个样本预测值和真实值之间误差的程度,用来度量模型一次预测的好坏。
损失函数是衡量预测模型预测期望结果表现的指标。损失函数越小,模型的鲁棒性越好。常用的损失函数有以下几种:
1)0-1损失函数
用于分类模型,当预测分类错误时,损失函数值为1,否则为0
2)平方损失函数
用于回归模型,表示为连续性变量的预测值和真实值差值的平方。
3)绝对损失函数
用于回归模型,表示为距离的绝对值
4)对数损失函数
用于概率模型,衡量预测值y发生的条件概率。该损失函数用到了极大似然估计的思想。通俗解释为在当前的模型基础上,对于样本x,其预测值为y即正确的概率。由于概率之间的同时满足需要使用乘法,为了将其转换为加法从而对其取对数。最后,由于是损失函数,所以预测为正确的概率越高其损失函数值应该越小,因此需要加负号。
(2)风险函数
1)期望风险
期望风险是损失函数的期望。由于模型的输入x和输出y是随机变量,遵循联合分布P(X,Y)。因此损失函数的期望公式如下:
有了期望风险的概念,那么学习的目标就是选择期望风险最小的模型。但是,由于联合分布P(X,Y)是未知的,期望风险不能直接计算。实际上,如果知道了联合分布P(X,Y),可以从联合分布直接求出条件概率分布P(Y|X),也就不需要学习了。正因为不知道联合概率分布,所以才需要进行学习。当样本容量趋于无穷时,平均值趋于期望值,因此引入平均损失的思想。
2)经验风险
模型关于训练数据集的平均损失,称为经验风险。其计算方法是每个样本的损失加和,然后取平均。公式如下:
根据大数定律,当样本容量趋于无穷时,经验风险趋于期望风险。所以,很自然的想法是用经验风险估计期望风险。但是,由于现实中的训练样本数目有限,达不到无穷大的需求,所以用经验风险估计期望风险常常并不理想,需要对经验风险进行一定的矫正,自然引出了结构风险。
3)结构风险
结构风险是对经验风险和期望风险的折中,当样本容量不够大时,经验风险最小化容易产生“过拟合”的问题,为了“减缓”过拟合问题,提出了结构风险最小化理论。结构风险最小化为经验风险与复杂度同时较小,它在经验风险的基础上加上了一个关于模型复杂度的正则化项。
其中,J(f) 是模型的复杂度,模型f越复杂,J(f)值就越大,模型越简单,J(f)值就越小。也就是说,J(f) 是对复杂模型的惩罚。为什么说是惩罚呢?因为求解的目标是整体达到最小值,经验风险越小,模型越复杂,J(f) 的值越大,就迫使模型不要太复杂,就是惩罚。λ 是正则项的系数,λ≥0,用以权衡经验风险和模型复杂度。
3、最小二乘法
因为回归模型的目标函数是误差平方和,求其最小值的方法便称为最小二乘法,即最小化误差平方。拿一元线性回归模型为例来解释最小二乘法,设一元线性回归模型的基本形式如下:
我们在平方损失函数下求解模型参数,使得目标函数的最小,此时的目标函数形式如下:
为了求解该目标函数取最小值时的对应参数,就需要使用最小二乘法。
(1)最小二乘法的代数法解法
为了使上述目标函数最小,方法就是将其对两个对应参数求导,令偏导数为0,会得到一个关于两个参数的二元方程,求解这个方程组便可以得到对应两个参数的值。
(2)最小二乘法的矩阵法解法
如果用矩阵的话,此时的线性回归模型的基本形式如下:
对应的损失函数形式如下:
此时,需要用这个函数对参数向量求导取0,这里之所以要乘1/2是为了使求导后的系数为1。
(3)最小二乘法的局限性和适用场景
最小二乘法适用简洁高效,比梯度下降这样的迭代法似乎方便很多,但是它本身有其局限性。
首先,最小二乘法需要计算XTX的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。当然,我们可以通过对样本数据进行整理,去掉冗余特征。让XTX的行列式不为0,然后继续使用最小二乘法。
第二,当样本特征n非常的大的时候,计算XTX的逆矩阵是一个非常耗时的工作(nxn的矩阵求逆),甚至不可行。此时以梯度下降为代表的迭代法仍然可以使用。那这个n到底多大就不适合最小二乘法呢?如果你没有很多的分布式大数据计算资源,建议超过10000个特征就用迭代法吧。或者通过主成分分析降低特征的维度后再用最小二乘法。
第三,如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。
第四,讲一些特殊情况。当样本量m很少,小于特征数n的时候,这时拟合方程是欠定的,常用的优化方法都无法去拟合数据。当样本量m等于特征数n的时候,用方程组求解就可以了。当m大于n时,拟合方程是超定的,也就是我们常用于最小二乘法的场景了。