python 最小二乘回歸 高斯核_「機器學習」一文讀懂線性回歸、嶺回歸和Lasso回歸...

點擊上方藍色字體,關注AI小白入門喲

d03392cce670940ea98217841193a5b9.png

作者 | 文杰

編輯 | yuquanle

本文介紹線性回歸模型,從梯度下降和最小二乘的角度來求解線性回歸問題,以概率的方式解釋了線性回歸為什么采用平方損失,然后介紹了線性回歸中常用的兩種范數來解決過擬合和矩陣不可逆的情況,分別對應嶺回歸和Lasso回歸,最后考慮到線性回歸的局限性,介紹了一種局部加權線性回歸,增加其非線性表示能力

線性回歸

A、線性回歸

假設有數據有:

677e30492981ea46ddbbc50d079c2761.png

其中

ad717cdce1007c07036ea689b88b2eb0.png

,

2b77546b39fe297c3ac5636f25333095.png

。其中m為訓練集樣本數,n為樣本維度,y是樣本的真實值。線性回歸采用一個高維的線性函數來盡可能的擬合所有的數據點,最簡單的想法就是最小化函數值與真實值誤差的平方(概率解釋-高斯分布加最大似然估計)。即有如下目標函數:

a51993f650240790f3e99bab427877c8.png

其中線性函數如下:

6488fd2fcac19bc3cc88a0c5ee342ffe.png

構建好線性回歸模型的目標函數之后,接下來就是求解目標函數的最優解,即一個優化問題。常用的梯度優化方法都可以拿來用,這里以梯度下降法來求解目標函數。

2077a238a07e01367b299b3e49d15975.png

另外,線性回歸也可以從最小二乘法的角度來看,下面先將樣本表示向量化,

bc4dd7ed60ed7d1bc8d91521cff7c2a7.png

f92ceff54972fe5f239643dda41680a4.png

,構成如下數據矩陣。

03f2af3cd2367f3b10e9d9a8d289cb5b.png

那么目標函數向量化形式如下:

98666c9a1d8e2c6a6ee1c0712d207c35.png

可以看出目標函數是一個凸二次規劃問題,其最優解在導數為0處取到。

38d165b4697e9805e976d279e82d822f.png

值得注意的上式中存在計算矩陣的逆,一般來講當樣本數大于數據維度時,矩陣可逆,可以采用最小二乘法求得目標函數的閉式解。當數據維度大于樣本數時,矩陣線性相關,不可逆。此時最小化目標函數解不唯一,且非常多,出于這樣一種情況,我們可以考慮奧卡姆剃刀準則來簡化模型復雜度,使其不必要的特征對應的w為0。所以引入正則項使得模型中w非0個數最少。當然,嶺回歸,lasso回歸的最根本的目的不是解決不可逆問題,而是防止過擬合。

B、概率解釋

損失函數與最小二乘法采用最小化平方和的概率解釋。假設模型預測值與真實值的誤差為

ce4249ab29c037a691d67014609e83ef.png

,那么預測值

45735bc15188a02f0569c554719ac497.png

與真實值

0902bfb631aef3abed7000d96ac38dd7.png

之間有如下關系:

27bdc59330956761d462700690e2d6a0.png


根據中心極限定理,當一個事件與很多獨立隨機變量有關,該事件服從正態分布 。一般來說,連續值我們都傾向于假設服從正態分布。假設每個樣本的誤差

ce4249ab29c037a691d67014609e83ef.png

獨立同分布均值為0,方差為σ的高斯分布

160dacdb11bcb42a5c0994e81d1be29d.png

,所以有:

cb3e86b5a26fddbf9c4d52b3fb2b2492.png

即表示

0902bfb631aef3abed7000d96ac38dd7.png

滿足以均值為

b4b4c8057240e9dd67745a1bbbc3ea61.png

,方差為

ce4249ab29c037a691d67014609e83ef.png

的高斯分布。

758aa18210d32f93791dc6361361b5bb.png

由最大似然估計有:

87d2197ac109d0dcae95c8f3128f7ee2.png

嶺回歸和Lasso回歸

嶺回歸的目標函數在一般的線性回歸的基礎上加入了正則項,在保證最佳擬合誤差的同時,使得參數盡可能的“簡單”,使得模型的泛化能力強(即不過分相信從訓練數據中學到的知識)。正則項一般采用一,二范數,使得模型更具有泛化性,同時可以解決線性回歸中不可逆情況。

b1eaa2967307d6d3c09bca7022ed0326.png


其迭代優化函數如下:

38515607b37633f26df42fd106b10ded.png


另外從最小二乘的角度來看,通過引入二范正則項,使其主對角線元素來強制矩陣可逆。

919b1a249434d0739f12da33c31cd8b3.png


Lasso回歸采用一范數來約束,使參數非零個數最少。而Lasso和嶺回歸的區別很好理解,在優化過程中,最優解為函數等值線與約束空間的交集,正則項可以看作是約束空間。可以看出二范的約束空間是一個球形,而一范的約束空間是一個方形,這也就是二范會得到很多參數接近0的值,而一范則盡可能非零參數最少。

64152818df53f82679db3f74cac3af1f.png

值得注意的是線性模型的表示能力有限,但是并不一定表示線性模型只能處理線性分布的數據。這里有兩種常用的線性模型非線性化。對于上面的線性函數的構造,我們可以看出模型在以

cad7a5fe990f121843430fffa00d62d2.png

的坐標上是線性的,但是并不表示線性的模型就一定只能用于線性分布問題上。假如我們只有一個特征

0382374c86a427f4efe21a2ae11ec553.png

,而實際上回歸值是

76e80194e3be7b6683b0c5735dba47d5.png

等,我們同樣可以采用線性模型,因為我們完全可以把輸入空間映射到高維空間

de85f2ad55eee95782b1748c827181bf.png

,其實這也是核方法以及PCA空間變換的一種思想,凡是對輸入空間進行線性,非線性的變換,都是把輸入空間映射到特征空間的思想,所以只需要把非線性問題轉化為線性問題即可。另外一種是局部線性思想,即對每一個樣本構建一個加權的線性模型。

局部加權線性回歸

考慮到線性回歸的表示能力有限,可能出現欠擬合現象。局部加權線性回歸為每一個待預測的點構建一個加權的線性模型。其加權的方式是根據預測點與數據集中點的距離來為數據集中的點賦權重,當某點距離預測點較遠時,其權重較小,反之較大。由于這種權重的機制引入使得局部加權線性回歸產生了一種局部分段擬合的效果。由于該方法對于每一個預測點構建一個加權線性模型,都要重新計算與數據集中所有點的距離來確定權重值,進而確定針對該預測點的線性模型,計算成本高,同時為了實現無參估計來計算權重,需要存儲整個數據集。

局部加權線性回歸,在線性回歸基礎上引入權重,其目標函數(下面的目標函數是針對一個預測樣本的)如下:

3cefc46fd1a68eb3870aa6efca29fe1c.png


一般選擇下面的權重函數,權重函數選擇并非因為其類似于高斯函數,而是根據數據分布的特性,但權重函數的選取并不一定依賴于數據特性。

7fdbab0b7b2388503adfde3291c9bf0b.png


其中是待預測的一個數據點。

對于上面的目標函數,我們的目標同樣是求解使得損失函數最小化,同樣局部加權線性回歸可以采用梯度的方法,也可以從最小二乘法的角度給出閉式解。

e0a2189cc7f6698816832cffaa419a46.png

其中

e5862597752da8da203856c484874fa8.png

是對角矩陣,

1270240a2c28702fd09e8c283bcec064.png

線性回歸核心思想最小化平方誤差,可以從最小化損失函數和最小二乘角度來看,優化過程可以采用梯度方法和閉式解。在閉式解問題中需要注意矩陣可逆問題。考慮到過擬合和欠擬合問題,有嶺回歸和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<

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<

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

詳細代碼: https://github.com/myazi/myLearn/blob/master/LineReg.cpp

The End

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533815.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533815.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533815.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

天宮初級認證答案_跨境電商人才初級認證試題以及答案

跨境電商人才初級認證試題以及答案跨境電商人才初級認證試題一&#xff0c;單選題(共40題,每題1分,共40分)1.在拍攝反光性產品時,就是從哪個角度進行拍攝的A、正面B、側面參考答案:B2.信用證就是一種( )信用A、商業B、銀行C、民間D、企業參考答案:B3、阿里巴巴專業術語中,MA的全…

Linux打包軟件版本帶時間,帶你寫一個 linux 下的打包軟件 tar

相信你對 linux 的 .tar.gz 有點熟悉&#xff0c;這就是先 tar 打包(.tar 后綴)&#xff0c;再對此 tar 文件用 gzip 壓縮(.tar.gz)的后綴名。值得注意的是&#xff0c; tar 不是壓縮軟件&#xff0c;它只做把一堆文件/文件夾打包到一個文件(tar 文件)里的事情&#xff0c;而文…

優先隊列默認是小頂堆嗎_一分鐘帶你讀懂什么是堆?

堆其實就是一種特殊的隊列——優先隊列。 普通的隊列游戲規則很簡單&#xff1a;就是先進先出&#xff1b;但這種優先隊列搞特殊&#xff0c;不是按照進隊列的時間順序&#xff0c;而是按照每個元素的優先級來比拼&#xff0c;優先級高的在堆頂。 這也很容易理解吧&#xff0c;…

螺旋測微器b類不確定度_物理實驗直測量不確定度評估.ppt

物理實驗直測量不確定度評估直接測量不確定度評估 Gauss分布 測量列的平均值、標準差 A類不確定度 t分布 B類不確定度 直接測量的合成不確定度 Gauss分布 也稱正態分布。 δ的平均值等于0、方差為σ。 特征&#xff1a; 對稱性——大于平均值與小于平均值的概率相等&#xff1b…

python 執行shell_python執行shell命令的方法

python執行shell命令的方法 os模塊 os.system方式&#xff1a; import os os.system(top) os.system(cat /proc/cpuinfo) 說明 這個調用相當直接&#xff0c;且是同步進行的&#xff0c;程序需要阻塞并等待返回。 返回值是依賴于系統的&#xff0c;直接返回系統的調用返回值&am…

linux下c語言讀取roed文件,如何在Linux系統上安裝Android4.4.docx

Android (x86)項目致力于移植 Android系統到X86處理器上&#xff0c;使用戶可以更容易的在任何電腦上安裝Android。他們通過使用android源碼&#xff0c;增加補丁來使 Android能夠在X86處理器&#xff0c;筆記本電腦和平板 電腦下工作。前一段時間&#xff0c;項目組發布了最新…

微信小程序setinterval_簡單談談setTimeout與setInterval

感謝踩過的坑sf社區的第一篇文章。最近在做一個拍賣的微信小程序&#xff0c;用到了定時器setTimout和setInterval,簡單談談這兩個api。setTimeout最常見的用法就是第二種(第三種mdn文檔不推薦)&#xff0c;如:var timeoutId setTimeout(function() {console.log(hello world!…

python 注釋一段話_Python快速入門(一)

引言Python作為一個&#xff0c;目前最火的編程語言之一&#xff0c;已經滲透到了各行各業。它易學好懂&#xff0c;擁有著豐富的庫&#xff0c;功能齊全。人生苦短&#xff0c;就用Python。這個快速入門系列分為六篇&#xff0c;包含了Python大部分基礎知識&#xff0c;每篇閱…

linux ibus獲取窗體位置,Ubuntu 12.04 顯示ibus 的輸入框

在虛擬機中安裝了Ubuntu 12.04&#xff0c;系統是英文版本的&#xff0c;我能接受&#xff0c;但是苦于沒有中文輸入法。起先&#xff0c;我是安裝SCIM&#xff0c;結果我折騰了半天&#xff0c;發現其只能在lib-office下使用。firefox,文字編輯器中都不能調出SCIM。無奈將其卸…

transporter上傳卡正在交付_【iOS】Xcode11使用Transporter將APP上傳到App Store,卡在正在驗證APP...

問題&#xff1a;在使用Transporter時&#xff0c;會卡主&#xff0c;一直顯示正在驗證APP在這里插入圖片描述解決方案一&#xff1a;利用V-P-N在這里插入圖片描述使用安全上網(V-P-N)&#xff0c;雙擊打開iTMSTransporter&#xff0c;等待幾分鐘lichuangMacBook-Pro-3 ~ % /Ap…

python練手經典100例微盤_20個Python練手經典案例,能全做對的人確實很少!

100個Python練手小程序&#xff0c;學習python的很好的資料&#xff0c;覆蓋了python中的每一部分&#xff0c;可以邊學習邊練習&#xff0c;更容易掌握python。 如果你感覺學不會&#xff1f;莫慌&#xff0c;小編推薦大家加入群&#xff0c; 前面548中間377后面875&#xff0…

小紅帽linux各功能中英,英文短劇《小紅帽》劇本臺詞完整版---中英對照文本版...

大灰狼和小紅帽的故事紅帽第一場&#xff1a;小紅帽家 媽媽&#xff1a; (媽媽拿著一個籃子&#xff0c;把桌子上的水果放在籃子里) 小紅帽唱著歌&#xff0c;歡快地跑進來)Hi,mummy, what are you doing? 嘿&#xff0c;媽媽 你在什么&#xff1f; 媽媽&#xff1a; (一邊把水…

uipath循環datatable_UiPath之DataTable轉換為List和Array

今天給大家分享一下&#xff0c;如何將DataTable轉為List和Array&#xff0c;為此小U也花了不少時間研究&#xff0c;最后發現沒有那么復雜。先來說說List和Array的區別&#xff1a;List&#xff1a;就像一個鏈條&#xff0c;存儲數據的空間可以不連續。Array&#xff1a;就像一…

python批量下載文件教程_Python抓包菜鳥教程:批量下載圖片的方法,電腦和手機都能用...

筆者看上了一組圖集&#xff0c;然后準備一張一張下載時&#xff0c;瞄了一眼&#xff0c;這組圖集還有100&#xff0c;好吧&#xff0c;我酸了。 筆者就是試試工具&#xff0c;你們別像我這樣用&#xff0c;這么好的工具&#xff0c;做自媒體&#xff0c;那絕對了那如何批量下…

esxi掛載Linux的nfs盤,ESXi安裝centos7掛載群暉NFS

前段時間折騰了ESXi&#xff0c;然后無盡的折騰接踵而來&#xff0c;今天要說的是如何安裝centos7并掛載群暉虛擬機的NFS共享文件夾直接步入正題&#xff01;先是下載centos7鏡像&#xff0c;因為我是用來當服務器的&#xff0c;所以只需要minimal版即可【centos下載鏈接】自己…

python使用的編輯器_我用過的最好的python編輯器PyScripter

用了IDLE, PythonWin等幾個python編輯器&#xff0c;在代碼補全、參數提示等功能上都非常不滿意。 終于找到PyScripter并且試用了一下&#xff0c;代碼補全、參數提示等功能非常強大。這個功能其實非常重要&#xff0c;可以大大提高開發效率&#xff0c;減少出錯。很滿意.PyScr…

linux is not unix由來,一些奇怪的 unix 指令名字的由來(轉)

一些奇怪的 unix 指令名字的由來(轉)[more]一些奇怪的 unix 指令名字的由來awk "Aho Weinberger and Kernighan"這個語言以作者 Al Aho, Peter Weinberger 和 Brian Kernighan 的姓來命名。grep "Global Regular Expression Print"grep 來自 ed 的列印所…

python discuz_pythonDiscuz發帖器的實現

網絡技術需要大家共同分享&#xff0c;不能閉門造車&#xff0c;下面是bj-dnsCom提示&#xff1a;首先要清楚discuz論壇發帖的流程&#xff0c;簡單地說就是以下流程:進入登錄頁 ->登錄 -> 進入版面 ->發帖 首先要清楚discuz論壇發帖的流程&#xff0c;簡單地說就是以…

基于linux的業設計課題,基于linux下智能手機的設計與制作 畢業設計.doc

本科生畢業論文(設計)題 目&#xff1a; 基于linux下智能手機的設計與制作目錄1. 緒論11.1 嵌入式系統的應用前景11.2linux操作系統21.2.1Linux介紹22.硬件、軟件介紹32.1S3c2440知識32.1.1S3c2440系統結構介紹32.1.2arm實驗儀介紹72.2 GPRS無線模組92.2.1 GPRS概述及工作原理9…

excel文件導入hive亂碼_將excel中的數據導入hive

步驟一&#xff1a;將excel另存為txt文檔(文本文件(制表符分割))假設名字為CompanyCode.txt步驟二&#xff0c;將該txt文件導入Linux指定目錄中步驟三&#xff0c;轉換編碼格式&#xff0c;在指定目錄下執行如下命令&#xff1a;piconv -f gb2312 -t UTF-8 CompanyCode.txt &g…