一文读懂线性回归、岭回归和Lasso回归( 三 )

ddMatrix(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;}C、局部加权线性回归
/**局部加权线性回归是在线性回归的基础上对每一个测试样本(训练的时候就是每一个训练样本)在其已有的样本进行一个加权拟合,权重的确定可以通过一个核来计算,常用的有高斯核(离测试样本越近,权重越大,反之越小),这样对每一个测试样本就得到了不一样的权重向量,所以最后得出的拟合曲线不再是线性的了,这样就增加的模型的复杂度来更好的拟合非线性数据 。**///需要注意的是局部加权线性回归是对每一个样本进行权重计算,所以对于每一个样本都有一个权重w,所以下面的函数只是局部线性回归的一个主要辅助函数Matrix locWeightLineReg(Matrix test,Matrix x,Matrix y,const double &k){Matrix w(x.row,x.row,0,"T");double temp=0;int i,j;/**根据测试样本点与整个样本的距离已经选择的核确定局部加权矩阵,采用对角线上为局部加权值**/for(i=0;i<x.row;i++){temp=0;for(j=0;j<x.col;j++){temp+=(test.data[0][j]-x.data[i][j])*(test.data[0][j]-x.data[i][j]);}w.data[i][i]=exp(temp/-2.0*k*k);}Matrix xT=x.transposeMatrix;Matrix wx=wx.multsMatrix(w,x);Matrix xTwx;xTwx=xTwx.multsMatrix(xT,wx);Matrix xTwx_1;xTwx_1=xTwx.niMatrix;Matrix xTwx_1xT;xTwx_1xT=xTwx_1xT.multsMatrix(xTwx_1,xT);Matrix xTwx_1xTw;xTwx_1xTw=xTwx_1xTw.multsMatrix(xTwx_1xT,w);Matrix ws = xTwx_1xTw * y;return ws;}详细代码:https://github.com/myazi/myLearn/blob/master/LineReg.cpp
声明:本文为公众号「 AI小白入门」投稿,版权归作者所有 。
【END】

【一文读懂线性回归、岭回归和Lasso回归】


推荐阅读