<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          機(jī)器學(xué)習(xí)線性回歸:談?wù)劧嘀毓簿€性問題及相關(guān)算法

          共 6534字,需瀏覽 14分鐘

           ·

          2021-03-25 10:14

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          本文轉(zhuǎn)自 | 深度學(xué)習(xí)這件小事
          當(dāng)用最小二乘法進(jìn)行線性回歸時(shí),在面對(duì)一堆數(shù)據(jù)集存在多重共線性時(shí),最小二乘法對(duì)樣本點(diǎn)的誤差極為敏感,最終回歸后的權(quán)重參數(shù)方差變大。這就是需要解決的共線性回歸問題,一般思想是放棄無偏估計(jì),損失一定精度,對(duì)數(shù)據(jù)做有偏估計(jì),這里介紹兩種常用的算法:脊回歸和套索回歸。


          基本概念

          多重共線性(Multicollinearity)是指線性回歸模型中的自變量之間由于存在高度相關(guān)關(guān)系而使模型的權(quán)重參數(shù)估計(jì)失真或難以估計(jì)準(zhǔn)確的一種特性,多重是指一個(gè)自變量可能與多個(gè)其他自變量之間存在相關(guān)關(guān)系。

          例如一件商品的銷售數(shù)量可能與當(dāng)?shù)氐娜司杖牒彤?dāng)?shù)厝丝跀?shù)這兩個(gè)其他因素存在相關(guān)關(guān)系。

          在研究社會(huì)、經(jīng)濟(jì)問題時(shí),因?yàn)閱栴}本身的復(fù)雜性,設(shè)計(jì)的因素很多。在建立回歸模型時(shí),往往由于研究者認(rèn)識(shí)水平的局限性,很難在眾多因素中找到一組互不相關(guān),又對(duì)因變量 y 產(chǎn)生主要影響的變量,不可避免地出現(xiàn)所選自變量出現(xiàn)多重相關(guān)關(guān)系的情形。

          在前面的介紹中,我們已經(jīng)知道普通最小二乘法(OLS)在進(jìn)行線性回歸時(shí)的一個(gè)重要假設(shè)就是數(shù)據(jù)集中的特征之間不能存在嚴(yán)重的共線性。最迫切的是,我們?cè)谀玫揭欢褦?shù)據(jù)集時(shí),該如何診斷這些特征間是不是存在共線性問題呢? 

          如何診斷多重共線性

          根據(jù)已有的參考文獻(xiàn),常用的多重共線性的診斷方法包括:方差膨脹因子法,特征根分析法,相關(guān)系數(shù)法等,基于這些方法的啟發(fā),本文初步地闡述個(gè)人的一些方法,不一定準(zhǔn)確,僅代表個(gè)人的理解。

          我們可以繪制每個(gè)特征與 y 間的關(guān)系圖,然后肉眼對(duì)比每個(gè)特征對(duì) y 的影響情況,關(guān)系走勢(shì)圖相近的那些特征就是可能存在共線性的。 


          例如,下面所示的一個(gè)例子是房子的價(jià)值與兩個(gè)影響它的特征:特征1和特征2,方便起見我們選取了10個(gè)樣本點(diǎn)來進(jìn)行兩個(gè)特征間的相關(guān)性分析,在 Jupyter notebook中做了測(cè)試,代碼如下:


          #導(dǎo)入兩個(gè)常用模塊
          import numpy as np
          import matplotlib.pyplot as plt
          #2個(gè)特征的樣本X
          X=np.array([[20.5,19.8],[21.2,20.4],[22.8,21.1],
                     [18.2,23.6],[20.3,24.9],[21.8,26.7],
                     [25.2,28.9],[30.7,31.3],[36.1,35.8],
                     [44.3,38.2]])
          #標(biāo)簽值 y
          y=np.array([7.8,8.6,8.7,7.9,8.4,8.9,10.4,11.6,13.9,15.8])
          #繪制特征1和y的散點(diǎn)圖
          plt.scatter(X[:,0],y)
          plt.show()


          #繪制特征2和y的散點(diǎn)圖
          plt.scatter(X[:,1],y)
          plt.show()
          從散點(diǎn)圖中可以看出,這兩個(gè)特征和y的關(guān)系趨勢(shì)很相似,進(jìn)一步放到一起繪制折線圖: 
          plt.plot(X,y,marker='o')
          plt.show()


          可以看到這兩個(gè)特征與y的關(guān)系呈現(xiàn)出相同的曲線走勢(shì),我們初步這兩個(gè)特征可能具有相關(guān)性,這僅僅是在一個(gè)觀察層面。

          怎么進(jìn)行量化分析呢?我們考慮具有一般性的公式,通常兩個(gè)變量間的相關(guān)系數(shù)的定義如下:
          將上述公式,實(shí)現(xiàn)為代碼,如下所示:


          #特征1和特征2的協(xié)方差
          cov = np.cov(X[:,0],X[:,1])
          cov
          array([[ 70.44544444,  49.15144444],
                 [ 49.15144444,  41.24455556]])
          #特征1的標(biāo)準(zhǔn)差
          sigmaX1 = cov[0,0]**0.5
          #特征2的標(biāo)準(zhǔn)差
          sigmaX2 = cov[1,1]**0.5
          #相關(guān)系數(shù)
          r = cov[0,1]/(sigmaX1*sigmaX2)
          r
          0.9118565340789303
          相關(guān)系數(shù)為0.911,說明特征1與特征2之間有高度的線性正相關(guān)關(guān)系。當(dāng)相關(guān)系數(shù)為0時(shí),表明沒有關(guān)系,為負(fù)數(shù)時(shí),表明特征1與特征2之間有負(fù)相關(guān)關(guān)系,即有一個(gè)這樣的你增我減,你減我增的趨勢(shì)。

          如果忽略這個(gè)問題,還是要采取普通最小二乘法來進(jìn)行回歸,可能導(dǎo)致的問題簡(jiǎn)單來說是造成權(quán)重參數(shù)估計(jì)值的方差變大。比如,樣本的特征如下:
          A =np.array([[0.9999,2],[2,4],[4,8]]),y = np.array([1,2,3]),可以看到此時(shí)是強(qiáng)線性相關(guān)的,直接用直接求權(quán)重公式la.inv((A.T.dot(A))).dot(A.T).dot(y),得出參數(shù):
          array([-1999.9998031,  1000.3999014]),
          再降低一些線性相關(guān)強(qiáng)度:
          A =np.array([[0.9900,2],[2,4],[4,8]]),得出參數(shù):
          array([-20. ,  10.4])
          再降低,A =np.array([[0.900,2],[2,4],[4,8]]),得出參數(shù):
          array([-2. ,  1.4])
          再降低A =np.array([[0.8,2],[2,4],[4,8]]),得出參數(shù):
          array([-1. ,  0.9])
          再降低A =np.array([[0.5,2],[2,4],[4,8]]),得出參數(shù):
          array([-0.4,  0.6])
          畫出以第一個(gè)權(quán)重參數(shù)隨著線性相關(guān)性的增加的趨勢(shì)圖:可以看到在0.9999時(shí)驟降,表明方差突然變大,變化幅度為2000左右。
          拿掉0.9999這個(gè)特征取值后,變化幅度為20。
          因此驗(yàn)證了多重共線性越強(qiáng),造成的后果:參數(shù)方差越大。

          接下來,嘗試改進(jìn)普通最小二乘法來解決共線性問題。


          添加正則化項(xiàng)解決共線性

          正則化在機(jī)器學(xué)習(xí)中扮演者重要的角色,一方面它有可能解決經(jīng)常出現(xiàn)的過擬合問題,另一方面能解決上文提到這種病態(tài)矩陣,也就是不適定問題。對(duì)于正則化的理解,將會(huì)是以后機(jī)器學(xué)習(xí)需要反復(fù)仔細(xì)體會(huì)的一項(xiàng)重要技術(shù)。


          在普通最小二乘法的基礎(chǔ)上,將代價(jià)函數(shù)加一個(gè)正則化項(xiàng),就可以解決共線性問題,這個(gè)方法犧牲了權(quán)重參數(shù)的精度,帶來的收益是解決了共線性帶來的不穩(wěn)定。如果添加一個(gè)L1正則項(xiàng),算法稱為套索回歸,如果添加一個(gè)L2正則化項(xiàng),稱為脊回歸,公式分別表示為:


          套索回歸
          脊回歸



          下面在Jupyter Notebook,直接調(diào)用sklearn庫中的回歸分析的API,分析上面的共線性數(shù)據(jù)在使用普通最小二乘,L1最小二乘(套索),L2最小二乘(脊回歸)下回歸樣本后,對(duì)新來的數(shù)據(jù)的預(yù)測(cè)精度。


          我們用上節(jié)例子來闡述正則化項(xiàng)的作用,用的測(cè)試樣本如下所示:
          X =np.array([[0.9999,2],[2,4],[4,8]])
          y = np.array([1,2,3])
          直接調(diào)用sklearn的接口:
          from sklearn import linear_model
          #OLS
          reg = linear_model.LinearRegression()
          reg.fit(X,y)
          得到的權(quán)重參數(shù):
          array([ 5000.00000002, -2499.75000001])
          #脊回歸
          ridreg = linear_model.Ridge (alpha = .5)
          ridreg.fit (X, y) 
          得到的權(quán)重參數(shù):
          array([ 0.12589929,  0.25173425])
          #套索回歸
          ridreg = linear_model.Lasso(alpha = 0.1)
          ridreg.fit (X, y) 
          得到的權(quán)重參數(shù):
          array([ 0.        ,  0.30535714])

          可以看到脊回歸和套索回歸由于正則化項(xiàng)不同,最終導(dǎo)致的權(quán)重參數(shù)也一樣,最令人印象深刻的是,套索回歸由于使用了L1正則化,直接將特征1的權(quán)重參數(shù)置為0,也就是將強(qiáng)線性相關(guān)項(xiàng)中的某一個(gè)直接拋棄掉,只取其中一個(gè)特征項(xiàng)作為主特征項(xiàng)進(jìn)行分析計(jì)算。

          OLS算法得出的權(quán)重參數(shù)在上節(jié)已經(jīng)驗(yàn)證過,稍微改變一下線性相關(guān)的強(qiáng)度,導(dǎo)致的權(quán)重參數(shù)改變巨大,也就是參數(shù)的方差很大,這說明它的不穩(wěn)定性。

          總結(jié)

          在上節(jié)中,我們闡述了如何診斷多重共線性問題,以及通過添加正則化項(xiàng)為什么可以解決這個(gè)問題,在本文的論證中我們舉的例子是兩個(gè)特征間的共線性,這種方法簡(jiǎn)單直觀地進(jìn)一步驗(yàn)證了OLS權(quán)重參數(shù)的方差和共線性的關(guān)系,以及脊回歸和套索回歸加上正則化項(xiàng)后發(fā)揮的作用。


          在本文論述中有些術(shù)語可能不夠精確,還請(qǐng)各位多包涵。謝謝各位的閱讀。
               


          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  女人天堂中文字幕 | 国产裸体视频网站女69 | www.爱搞搞 | 西西www444大胆无码视频 | 亚洲在线视频观看 |