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回归】
推荐阅读
- 一文聊透 Dubbo 优雅停机
- 什么是编译器?什么是集成开发环境?一文讲明白
- 并使用java实现 一文看懂Base64原理
- 从人鬼相恋的故事,读懂爱情的真谛 情不知所起一往而深什么意思
- 一文看懂MySQL中基于XA实现的分布式事务
- 一文搞懂Python字符编码问题,值得收藏
- 一文搞懂 PHP 数组的真正用法
- 一文读懂,“算法”究竟是个啥?
- 看了这一文,你可以彻底认识锂电池的使用了
- 一文看懂mysql数据库监控指标--缓冲池使用情况