机器学习之LASSO,岭回归

回归算法

文章参考

1.线性回归

假设有数据有
在这里插入图片描述其中:在这里插入图片描述
其中m为训练集样本数,n为样本维度,y是样本的真实值。线性回归采用一个多维的线性函数来尽可能的拟合所有的数据点,最简单的想法就是最小化函数值与真实值误差的平方(概率解释-高斯分布加最大似然估计)即有如下目标函数:
机器学习之LASSO,岭回归_第1张图片
其中线性函数:

机器学习之LASSO,岭回归_第2张图片
构建好线性回归模型的目标函数之后,接下来就是求解目标函数的最优解,即一个优化问题。常用的梯度优化方法都可以拿来用,这里以梯度下降法来求解目标函数。
机器学习之LASSO,岭回归_第3张图片
另外,线性回归也可以从最小二乘法的角度来看,下面先将样本表示向量化
在这里插入图片描述
构建如下矩阵

机器学习之LASSO,岭回归_第4张图片
那么目标函数向量化形式如下:
在这里插入图片描述
可以看出目标函数是一个凸二次规划问题,其最优解在导数为0处取到。
在这里插入图片描述
值得注意的上式中存在计算矩阵的逆,一般来讲当样本数大于数据维度时,矩阵可逆,可以采用最小二乘法求得目标函数的闭式解。当数据维度大于样本数时,矩阵线性相关,不可逆。此时最小化目标函数解不唯一,且非常多,出于这样一种情况,我们可以考虑奥卡姆剃刀准则来简化模型复杂度,使其不必要的特征对应的w为0。所以引入正则项使得模型中w非0个数最少。当然,岭回归,lasso回归的最根本的目的不是解决不可逆问题,而是防止过拟合。

2.岭回归

岭回归的目标函数在一般的线性回归的基础上加入了正则项,在保证最佳拟合误差的同时,使得参数尽可能的“简单”,使得模型的泛化能力强。正则项一般采用一,二范数,使得模型更具有泛化性,同时可以解决线性回归中不可逆情况,比如二范数对应的岭回归:
在这里插入图片描述
其迭代优化函数如下:
在这里插入图片描述另外从最小二乘的角度来看,通过引入二范正则项,使其主对角线元素来强制矩阵可逆
在这里插入图片描述

LASSO回归

Lasso回归采用一范数来约束,使参数非零个数最少。而Lasso和岭回归的区别很好理解,在优化过程中,最优解为函数等值线与约束空间的交集,正则项可以看作是约束空间。可以看出二范的约束空间是一个球形,而一范的约束空间是一个方形,这也就是二范会得到很多参数接近0的值,而一范则尽可能非零参数最少

机器学习之LASSO,岭回归_第5张图片
值得注意的是线性模型的表示能力有限,但是并不一定表示线性模型只能处理线性分布的数据。这里有两种常用的线性模型非线性化。对于上面的线性函数的构造,我们可以看出模型在以在这里插入图片描述

图片的坐标上是线性的,但是并不表示线性的模型就一定只能用于线性分布问题上。假如我们只有一个特征图片,而实际上回归值是图片等,我们同样可以采用线性模型,因为我们完全可以把输入空间映射到高维空间图片,其实这也是核方法以及PCA空间变换的一种思想,凡是对输入空间进行线性,非线性的变换,都是把输入空间映射到特征空间的思想,所以只需要把非线性问题转化为线性问题即可。另外一种是局部线性思想,即对每一个样本构建一个加权的线性模型。

4.代码实战

线性回归

int regression(Matrix x,Matrix y)
{
    Matrix xT=x.transposeMatrix();
    Matrix xTx=xTx.multsMatrix(xT,x);
    Matrix xTx_1=xTx.niMatrix();
    Matrix xTx_1xT=xTx_1xT.multsMatrix(xTx_1,xT);
    Matrix ws;
    ws=ws.multsMatrix(xTx_1xT,y);
    cout<<"ws"<<endl;
    ws.print();
    return 0;
}

岭回归

int ridgeRegres(Matrix x,Matrix y,double lam)
{
    Matrix xT=x.transposeMatrix();
    Matrix xTx=xTx.multsMatrix(xT,x);
    Matrix denom(xTx.row,xTx.col,lam,"diag");
    xTx=xTx.addMatrix(xTx,denom);
    Matrix xTx_1=xTx.niMatrix();
    Matrix xTx_1xT=xTx_1xT.multsMatrix(xTx_1,xT);
    Matrix ws=ws.multsMatrix(xTx_1xT,y);
    cout<<"ws"<<endl;
    ws.print();
    return 0;
}

你可能感兴趣的:(python数据分析,机器学习)