lasso回歸_一文讀懂線性回歸、嶺回歸和Lasso回歸

8f85c252141d70ece1271fee2d122fd1.png

(圖片由AI科技大本營付費下載自視覺中國)

作者 | 文杰

編輯 | yuquanle

本文介紹線性回歸模型,從梯度下降和最小二乘的角度來求解線性回歸問題,以概率的方式解釋了線性回歸為什么采用平方損失,然后介紹了線性回歸中常用的兩種范數來解決過擬合和矩陣不可逆的情況,分別對應嶺回歸和Lasso回歸,最后考慮到線性回歸的局限性,介紹了一種局部加權線性回歸,增加其非線性表示能力線性回歸A、線性回歸假設有數據有:1cb5e0fe6d59d7c0d923fdd655a629a3.png其中ec6043b913f309f24248a41fce6d626c.png,db22a39028e6222f3a9a60404951597f.png。其中m為訓練集樣本數,n為樣本維度,y是樣本的真實值。線性回歸采用一個高維的線性函數來盡可能的擬合所有的數據點,最簡單的想法就是最小化函數值與真實值誤差的平方(概率解釋-高斯分布加最大似然估計)。即有如下目標函數:8f495529906d53a53a8c6b760a8ef9c2.png其中線性函數如下:0745642ce6ac53924225f065b3e73c08.png構建好線性回歸模型的目標函數之后,接下來就是求解目標函數的最優解,即一個優化問題。常用的梯度優化方法都可以拿來用,這里以梯度下降法來求解目標函數。55e9b1ee9d694a42f59738759f815a33.png另外,線性回歸也可以從最小二乘法的角度來看,下面先將樣本表示向量化,41a4dc63a5f46a65b99514497ea99c8b.png6b649ccd34503231525287ba7721e980.png,構成如下數據矩陣。b70ecf1ba497d886bcee998a1152b1f7.png那么目標函數向量化形式如下:29067d1a70e630c194ef65ce41ce0157.png可以看出目標函數是一個凸二次規劃問題,其最優解在導數為0處取到。95404d4012b72e3c808e306a09f1ccd7.png值得注意的上式中存在計算矩陣的逆,一般來講當樣本數大于數據維度時,矩陣可逆,可以采用最小二乘法求得目標函數的閉式解。當數據維度大于樣本數時,矩陣線性相關,不可逆。此時最小化目標函數解不唯一,且非常多,出于這樣一種情況,我們可以考慮奧卡姆剃刀準則來簡化模型復雜度,使其不必要的特征對應的w為0。所以引入正則項使得模型中w非0個數最少。當然,嶺回歸,lasso回歸的最根本的目的不是解決不可逆問題,而是防止過擬合。B、概率解釋損失函數與最小二乘法采用最小化平方和的概率解釋。假設模型預測值與真實值的誤差為ab6b718a25eed0654fcccd409749069b.png,那么預測值80110f78730868a1d8e059b50d188c22.png與真實值b96167e3fec7936b0a30dc51f7156833.png之間有如下關系:111beb3ac2074dce40aff78fb05a2253.png根據中心極限定理,當一個事件與很多獨立隨機變量有關,該事件服從正態分布 。一般來說,連續值我們都傾向于假設服從正態分布。假設每個樣本的誤差ab6b718a25eed0654fcccd409749069b.png獨立同分布均值為0,方差為σ的高斯分布2d726cce04624ae137256a57b7b42080.png,所以有:40887a7be53be8a295ad4e603ddf6ea1.png即表示b96167e3fec7936b0a30dc51f7156833.png滿足以均值為80110f78730868a1d8e059b50d188c22.png,方差為ab6b718a25eed0654fcccd409749069b.png的高斯分布。d8165125809098ec918ea9639e5f9612.png由最大似然估計有:a81cec0cca791bf06b11f0f9ca776fc1.png嶺回歸和Lasso回歸嶺回歸的目標函數在一般的線性回歸的基礎上加入了正則項,在保證最佳擬合誤差的同時,使得參數盡可能的“簡單”,使得模型的泛化能力強(即不過分相信從訓練數據中學到的知識)。正則項一般采用一,二范數,使得模型更具有泛化性,同時可以解決線性回歸中不可逆情況。5a6fc55dbee5479b0753c4b01c92233e.png其迭代優化函數如下:8b453dbd84fa2994a89c278553224ad4.png另外從最小二乘的角度來看,通過引入二范正則項,使其主對角線元素來強制矩陣可逆。2611956e796b5bb703b79be544c52a8b.pngLasso回歸采用一范數來約束,使參數非零個數最少。而Lasso和嶺回歸的區別很好理解,在優化過程中,最優解為函數等值線與約束空間的交集,正則項可以看作是約束空間。可以看出二范的約束空間是一個球形,而一范的約束空間是一個方形,這也就是二范會得到很多參數接近0的值,而一范則盡可能非零參數最少。fd17e6c7dbfd53be1c85042c44c537f8.png值得注意的是線性模型的表示能力有限,但是并不一定表示線性模型只能處理線性分布的數據。這里有兩種常用的線性模型非線性化。對于上面的線性函數的構造,我們可以看出模型在以ae2d6c9caf12e763789fe0ef060d219c.png的坐標上是線性的,但是并不表示線性的模型就一定只能用于線性分布問題上。假如我們只有一個特征309c9de7e6f762c2242964f7b60aa9b3.png,而實際上回歸值是86d43b69615c4baac50bc1f72f60bacb.png等,我們同樣可以采用線性模型,因為我們完全可以把輸入空間映射到高維空間4267688c78374d88882990b8d2c063cd.png,其實這也是核方法以及PCA空間變換的一種思想,凡是對輸入空間進行線性,非線性的變換,都是把輸入空間映射到特征空間的思想,所以只需要把非線性問題轉化為線性問題即可。另外一種是局部線性思想,即對每一個樣本構建一個加權的線性模型。局部加權線性回歸考慮到線性回歸的表示能力有限,可能出現欠擬合現象。局部加權線性回歸為每一個待預測的點構建一個加權的線性模型。其加權的方式是根據預測點與數據集中點的距離來為數據集中的點賦權重,當某點距離預測點較遠時,其權重較小,反之較大。由于這種權重的機制引入使得局部加權線性回歸產生了一種局部分段擬合的效果。由于該方法對于每一個預測點構建一個加權線性模型,都要重新計算與數據集中所有點的距離來確定權重值,進而確定針對該預測點的線性模型,計算成本高,同時為了實現無參估計來計算權重,需要存儲整個數據集。局部加權線性回歸,在線性回歸基礎上引入權重,其目標函數(下面的目標函數是針對一個預測樣本的)如下:4f724b06fa3158a3acabab92ed331b3f.png一般選擇下面的權重函數,權重函數選擇并非因為其類似于高斯函數,而是根據數據分布的特性,但權重函數的選取并不一定依賴于數據特性。008c9f1c4f2385dc2ee48ebfba0871ae.png其中是待預測的一個數據點。對于上面的目標函數,我們的目標同樣是求解使得損失函數最小化,同樣局部加權線性回歸可以采用梯度的方法,也可以從最小二乘法的角度給出閉式解。29640f227fef6e1012e2898befc92459.png其中7de67d98200302a6e6326de2b71a5a17.png是對角矩陣,f992a829d4b994d80278476f41aee0f5.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<<"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 場精選專題技術和行業論壇,超強干貨+技術剖析+行業實踐立體解讀,深入解析熱門技術在行業中的實踐落地。【早鳥票】【特惠學生票】限時搶購,掃碼了解詳情!b48b9a2c66b347159ec38cabcf7bb6a8.png

推薦閱讀

  • 100多次競賽后,他研發了一個幾乎可以解決所有機器學習問題的框架

  • 王霸之路:從0.1到2.0,一文看盡TensorFlow“奮斗史”

  • 伯克利人工智能研究院開源深度學習數據壓縮方法Bit-Swap,性能創新高

  • NLP被英語統治?打破成見,英語不應是「自然語言」同義詞

  • TensorFlow2.0正式版發布,極簡安裝TF2.0(CPU&GPU)教程

  • 肖仰華:知識圖譜構建的三要素、三原則和九大策略 | AI ProCon 2019

  • AI落地遭“卡脖子”困境:為什么說聯邦學習是解決良方?

  • 10分鐘搭建你的第一個圖像識別模型 | 附完整代碼

  • 限時早鳥票 | 2019 中國大數據技術大會(BDTC)超豪華盛宴搶先看!

e3541fefa893440619c9b2dd6bea47f6.png

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

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

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

相關文章

springcloud架構特點_打造企業級微服務平臺架構,分布式應用場景管理

微服務平臺架構是一項在云中部署應用和服務的新技術。大部分圍繞微服務的爭論都集中在容器或其他技術是否能很好的實施微服務。微服務系統可以在“自己的程序”中運行&#xff0c;并通過“輕量級設備與HTTP型API進行溝通”。關鍵在于該服務可以在自己的程序中運行。通過這一點我…

linux 看防火墻的啟停日志,LINUX下防火墻iptables的日志管理

iptables的日志(log)由syslogd紀錄和管理。初始存放在 /var/log/messages里面。自動采取循環紀錄(rotation)的方式記錄。但是由于混在 messages中&#xff0c;對于管理和監視產生了不便。這里&#xff0c;我簡單介紹一下我的 iptables日志的管理&#xff0c;循環&#xff0c;和…

怎么判斷一個字符串的最長回文子串是否在頭尾_LeetCode 5 迅速判斷回文串的Manacher算法...

本文始發于個人公眾號&#xff1a; TechFlow題意Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Link: https://leetcode.com/problems/longest-palindromic-substring/翻譯給定一個字符串s&#xff0c…

linux內核沒有iobuf,LINUX2.6.26.6內核下雙口RAM的驅動函數測試成功!

驅動程序&#xff1a;#include //#include #include #include #include #include #include #include //#include #include //#include #include #include #include #include //#include #include #include #include #include #include #include #include MODULE_LICENSE("…

spring和mybatis結合做簡單的增刪查改系統_springbootamp;amp;vue簡單的景點信息管理系統...

springboot&&vue簡單的景點信息管理系統這兩天閑著沒有什么事&#xff0c;就根據陳哥的教程&#xff0c;試著寫了一個springboot和vue的簡單的景點信息管理系統。也就大致實現了最基本的增刪查改。先看看效果圖吧&#xff1a;1、登陸界面&#xff1a; 2、注冊界面&…

linux 內核 丟棄分片包,LINUX內核關于IP分片重組問題請教

最近研究學習IP分片重組&#xff0c;也拜讀了不少dx的閱讀理解。可還是有疑問&#xff0c;請教xdm。源代碼&#xff1a;linux-2.4.26\linux-2.4.26\net\ipv4\ip_fragment.cIP分片的重組大概經過以下幾個函數:0/ ip_defrag1/ ip_find-->ip_frag_create-->ip_frag_intern2/…

spark算子_十、Spark之詳解Action類算子

常用Action類算子列表reduce(func): 通過func函數來對RDD中所有元素進行聚合運算&#xff0c;先運算分區內數據&#xff0c;再運算分區間數據。scala> val rdd1 sc.makeRDD(1 to 100)rdd1: org.apache.spark.rdd.RDD[Int] ParallelCollectionRDD[4] at makeRDD at :24# 對…

linux 庫函數 劫持,Linux hook技術之-Ring3下動態鏈接庫.so函數劫持

劫持普通函數當然沒有什么意思了&#xff01;我們要劫持的是系統函數&#xff01;我們知道&#xff0c;Unix操作系統中對于GCC而言&#xff0c;默認情況下&#xff0c;所編譯的程序中對標準C函數(fopen、printf、execv家族等等函數)的鏈接&#xff0c;都是通過動態鏈接方式來鏈…

await原理 js_「速圍」Node.js V14.3.0 發布支持頂級 Await 和 REPL 增強功能

本周&#xff0c;Nodejs v14.3.0 發布。這個版本包括添加頂級 Await、REPL 增強等功能。REPL 增強通過自動補全改進對 REPL 的預覽支持&#xff0c;例如&#xff0c;下圖中當輸入 process.ver 之后&#xff0c;不需要輸入剩下的實際內容&#xff0c;它幫我們生成了自動補全的輸…

在linux安裝requests庫命令,在Linux--Ubuntu18.04環境下安裝requests庫

之前在服務器上裝過requests庫&#xff0c;但是記憶中花了好大的力氣才成功&#xff0c;現在因為一次意外&#xff0c;服務器重裝系統&#xff0c;現在這些亂七八糟的庫又要重裝一遍&#xff0c;與上次不同的是&#xff0c;這次我裝一遍就成功了。現在分享一下成功的經歷。Pyth…

linux輸入ls后不顯示_零基礎學習之Linux基礎命令小結

安裝完重啟后&#xff0c;沒有像sery所說在圖形界面崩潰了&#xff0c;由于我沒有安裝X-WINDOWS而是直接進入了文本界面。如果你想做linux管理的話&#xff0c;最好在文本界面下工作&#xff0c;這樣會適應如下圖:第一行顯示的是我們所安裝的linux是Red Hat 企業4第二行顯示的是…

redhat enterprise linux 哪個版本好,Red Hat Enterprise Linux 版本顯示中(Santiago)是啥意思?...

樓主的邏輯還有問題。1、linux跟windows都是一種操作系統&#xff0c;但是它用的分區格式是ext3的&#xff0c;ntfs和fat都不合適。安裝過程中你可以自己選擇刪除現有分區創建新分區&#xff0c;但如果你不了解&#xff0c;很可能把所有的分區都清了。2、redhat分區多大合適看你…

.gitignore文件_【第1739期】為Git倉庫里的.idea文件夾正名

前言.idea該不該提交到代碼倉庫中呢&#xff1f;你的意見呢&#xff1f;今日早讀文章由《Flask Web開發》作者李輝分享。正文從這開始&#xff5e;&#xff5e;在網絡上&#xff0c;我曾多次看到人們對于Git倉庫中的.idea文件夾的偏見。最近的一次是在某個博客中技術專家對于志…

監控linux時間不對,shell 計算故障時間 配合web監控

#!/bin/bash#checkfail.log 為SHELL監控網站時間存放的日志文件 https://blog.51cto.com/junhai/2437965fail_time(){starttimetail -n 1000 checkfail.log |grep "$url"|grep "第1次"|tail -n 3|head -n 1|awk {print $1, $2} #取網站掛掉的時間endtimet…

linux redis清空數據恢復,Redis數據恢復--誤刪數據后一次嚇尿的經歷

1、起因&#xff0c;一個flushdb命令因為誤操作&#xff0c;輸入了一個flushdb命令&#xff0c;導到redis里0號庫里的數據全部清空&#xff0c;OMG&#xff0c;這里有不少重要信息&#xff0c;如果被領導知道&#xff0c;必開除2、appendonly留有生機仔細想想&#xff0c;當時數…

c語言 枚舉類型 uint32_淺談C語言枚舉類型 | 附自創用法分享

經濟學家說過&#xff0c;路邊是不會有100元的&#xff1b;但如果有&#xff0c;你還是要撿起來。同理&#xff0c;在貌似萬物免費的網絡時代&#xff0c;你是很難找到有針對性的好資料&#xff1b;但是如果有&#xff0c;希望你能認真學習吸收。比如筆者今天寫的這一篇一今天這…

linux在bin下加入ssh,移植?ssh?到開發板

2》編譯/home/arm下新建目錄sshwork&#xff0c;并且將源碼復制到該目錄下mkdir /home/arm/sshworkcp zlib-1.2.3.tar.gz openssl-0.9.8d.tar.gz openssh-4.6p1.tar.gz/home/arm/sshwork/home/arm/sshwork下新建目錄lib&#xff0c;用來保存生成的庫文件。mkdir /home/arm/sshw…

java pdf增刪改查_如何利用Java代碼操作索引庫?

今天是劉小愛自學Java的第161天。感謝你的觀看&#xff0c;謝謝你。學習計劃安排如下&#xff1a;學了幾天的Elasticserch&#xff0c;但都是它本身的知識點&#xff0c;如何通過Java語言去操作它呢&#xff1f;這就好比以前學數據庫&#xff0c;在數據庫工具中通過sql語句也能…

linux shell 第幾行,Linux shell 獲得字符串所在行數及位置

shell 獲得字符串所在行數及位置01 獲取字符串所在的行數方式一&#xff1a;用grep -n[rootroot]# cat testapplebitcreatedelectexeflowgood[rootroot]# cat test | grep -n exe5:exe[rootroot]# cat test | grep -n exe | awk -F ":" {print $1}5方式二&#xff1a…

sublime text3 怎么配置、運行python_SublimeText3按ctrl+b執行python無反應

最后更新時間&#xff1a;2017-09-14 現象&#xff1a; 在Sublime中打開.py文件&#xff0c;按”ctrlb”執行時無反應。點擊工具->編譯系統中已經有且識別到Python&#xff0c;但執行”run&#xff08;ctrlshiftb&#xff09;”時無反應&#xff0c;Sublime左下角提示”No B…