
(圖片由AI科技大本營付費下載自視覺中國)
作者 | 文杰
編輯 | yuquanle
本文介紹線性回歸模型,從梯度下降和最小二乘的角度來求解線性回歸問題,以概率的方式解釋了線性回歸為什么采用平方損失,然后介紹了線性回歸中常用的兩種范數來解決過擬合和矩陣不可逆的情況,分別對應嶺回歸和Lasso回歸,最后考慮到線性回歸的局限性,介紹了一種局部加權線性回歸,增加其非線性表示能力線性回歸A、線性回歸假設有數據有:



































/**
線性回歸函數的實現,考慮一般的線性回歸,最小平方和作為損失函數,則目標函數是一個無約束的凸二次規劃問題,
由凸二次規劃問題的極小值在導數為0處取到,且極小值為全局最小值,且有閉式解。根據數學表達式實現矩陣之間的運算求得參數w。
**/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;
}
B、嶺回歸和Lasso回歸
/**
下面的嶺回歸函數只是在一般的線性回歸函數的基礎上在對角線上引入了嶺的概念,不僅有解決矩陣不可逆的線性,同樣也有正則項的目的,
采用常用的二范數就得到了直接引入lam的形式。
**/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;
}
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????{
????????temp=0;for(j=0;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科技大本營轉載文章,轉載請聯系原作者)◆
精彩推薦
◆
2019 中國大數據技術大會(BDTC)歷經十一載,再度火熱來襲!豪華主席陣容及百位技術專家齊聚,15 場精選專題技術和行業論壇,超強干貨+技術剖析+行業實踐立體解讀,深入解析熱門技術在行業中的實踐落地。【早鳥票】與【特惠學生票】限時搶購,掃碼了解詳情!
推薦閱讀
100多次競賽后,他研發了一個幾乎可以解決所有機器學習問題的框架
王霸之路:從0.1到2.0,一文看盡TensorFlow“奮斗史”
伯克利人工智能研究院開源深度學習數據壓縮方法Bit-Swap,性能創新高
NLP被英語統治?打破成見,英語不應是「自然語言」同義詞
TensorFlow2.0正式版發布,極簡安裝TF2.0(CPU&GPU)教程
肖仰華:知識圖譜構建的三要素、三原則和九大策略 | AI ProCon 2019
AI落地遭“卡脖子”困境:為什么說聯邦學習是解決良方?
10分鐘搭建你的第一個圖像識別模型 | 附完整代碼
限時早鳥票 | 2019 中國大數據技術大會(BDTC)超豪華盛宴搶先看!

你點的每個“在看”,我都認真當成了喜歡