機器學習算法實踐:標準與局部加權線性回歸

2021-02-20 Python開發者

(點擊上方藍字,快速關注我們)

來源:伯樂在線 - iPytLab

如有好文章投稿,請點擊 → 這裡了解詳情

前言

最近開始總結學習回歸相關的東東了,與分類的目標變量是標稱型不同,回歸是對連續型數據進預測。當然還是從最簡單的線性回歸開始,本文主要介紹無偏差的標準線性回歸和有偏局部加權線性回歸的理論基礎以及相應的Python實現。

標準線性回歸

標準線性回歸的理論知識很簡單,我們既可以寫出它的標量表達式也可以寫成矩陣的形式,其中矩陣的形式也可以通過投影矩陣進行推到得到。本部分就對標準線性回歸的表達式進行下簡單的推導。

給定一組數據其中包括特徵矩陣X, 目標變量向量y:


其中X第一列為截距項,我們做線性回歸是為了得到一個最優回歸係數向量w使得當我們給定一個x能夠通過y=xw預測y的值。其中

最小二乘法獲取回歸係數

那麼怎樣的w才是最優的呢?在標準線性回歸中我們需要找到是誤差最小的w, 即預測的y值與真實的y值之間的差值,為了避免簡單累加造成的正負差值相互抵消,這裡採用了平方誤差:

對於上述式子f(w)可以通過梯度下降等方法得到最優解。但是使用矩陣表示將會是的求解和程序更為簡單:

將f(w)對w求導可得:

使其等於0,便可得到:

通過投影矩陣獲取回歸係數

除了通過最小平方差的方法推導得到w的表達式,我們還可以通過投影矩陣(Projection Matrix)來得到。

我們知道如果我們能夠求得一個w使得Xw=y肯定是最好的,但是實際情況中y一般並不在矩陣X的列空間中,也就是此方程無解,於是我們希望通過將向量y投影到X的列空間中得到投影矩陣p, 然後求解Xw=p來獲取一個最接近的一個解, 矩陣X的投影矩陣形式為

於是得到y在X列空間的投影為

此時方程Xw=p是有解的,得到最接近Xw=y的解為:

標準線性回歸的Python實現

通過矩陣形式我麼可以很方便的通過Numpy的接口進行矩陣運算獲取線性回歸係數向量ŵ , 實現如下:

def std_linreg(X, Y):

    xTx = X.T*X

    if np.linalg.det(xTx) == 0:

        print('xTx is a singular matrix')

        return

    return xTx.I*X.T*Y

通過對現有數據進行標準線性回歸併繪製回歸直線得到如下圖(完整代碼和數據見: https://github.com/PytLab/MLBox/tree/master/linear_regression)

w = [3.00774324, 1.69532264]

相關係數(Correlation Coefficient)計算

如何判斷獲得的模型預測能力的好壞呢?我們需要計算模型計算得到的yy的值向量與實際yy值向量的匹配程度, 也就是計算相關係數Correlation Coefficient。

相關係數的計算公式:

也就是兩個數據序列的協方差並除上各自的標準差,本質上就是一種剔除了兩個變量量綱影響、標準化後的特殊協方差。

而協方差便是衡量兩個變量變化趨勢是否相似的一種方法,是同向變化(同時變大或變小)還是反向變化(一個變大一個變小), 同向或者反向的程度如何,計算公式如下:

通過公式可以看出,如果對於向量中的每個x,y同時大於或同時小於各自的期望值,協方差為正,相反則為負。可見如果協方差越大相似程度就越高,協方差越小相似程度就越小。也可以看到如果X,Y相同,協方差就是方差,也就是方差是一種特殊情況下的協方差。

關於協方差與相關係數的通俗解釋可以參考知乎上的回答:如何通俗易懂地解釋「協方差」與「相關係數」的概念?

雖然Numpy中有計算協方差的接口numpy.corrcoef,是分別對兩兩向量進行比較並計算協方差,得到協方差矩陣。為了練習,我還是稍微自己計算了下協方差並只計算兩列不同數據之間的相關係數:

def get_corrcoef(X, Y):

    # X Y 的協方差

    cov = np.mean(X*Y) - np.mean(X)*np.mean(Y)

    return cov/(np.var(X)*np.var(Y))**0.5

通過對上面得到的線性回歸模型得到的預測的值與實際的值進行相關係數計算可以得到相關係數為

Correlation coeffient: 0.9864735622335125

局部加權線性回歸(Local Weighted Linear Regression)

上面的數據點是通過公式y=3+1.7x+0.1sin(30x)添加噪聲生成的數據,而標準的線性回歸是一種無偏差估計,在計算所有點的時候都是無偏差的計算誤差並通過優化方法優化誤差,如果針對不同的點能夠對誤差進行調整便可以一定程度上避免標準線性回歸帶來的欠擬合現象。

也就是引入偏差來降低預測的均方誤差,本部分總結下局部加權線性回歸的方法。當我們獲取某個xx的預測值的時候,我們需要計算回歸係數w,但是如果針對樣本中的數據,距離x越近我們就給個越大的權重,如果距離越遠就給一個小的權重,這樣就會使得針對x的預測值ypredict能夠更貼合樣本數據。

當我們需要對數據點xx相應的目標值進行預測的時候,我們需要給樣本中的每個點賦予一個權重值wi (為了區分權重和回歸係數,在這裡用θ表示回歸係數,w表示權重), 那麼平方誤差的表達式就變成:

通過矩陣可以表示成:

f(θ)對θ求導等於0得到:

通過上面的公式,對於任意給定的未知數據可以計算出對應的回歸係數θθ,並得到相應的預測值y, 其中W是一個對角矩陣,對角線上的元素wii對應樣本點xi的權重值。

使用高斯核來賦值權重

那麼權重的表達式又是怎樣的呢,我們需要距離給定x的樣本點的權重越高,LWRL使用核來對附近的點賦予更高的權重,最常用的是高斯核函數,對應表達式如下:

通過公式可以看到如果xi距離xx的距離越小,wii就會越大,其中參數k決定了權重的大小。k越大權重的差距就越小,k越小權重的差距就很大,僅有局部的點參與進回歸係數的求取,其他距離較遠的權重都趨近於零。如果k去進入無窮大,所有的權重都趨近於1,W也就近似等於單位矩陣,局部加權線性回歸變成標準的無偏差線性回歸,會造成欠擬合的現象;當k很小的時候,距離較遠的樣本點無法參與回歸參數的求取,會造成過擬合的現象。

LWLR的Python實現

本部分對局部加權線性回歸進行Python實現,對於給定數據求取相應回歸係數:

def lwlr(x, X, Y, k):

    ''' 局部加權線性回歸,給定一個點,獲取相應權重矩陣並返回回歸係數

    '''

    m = X.shape[0]

    # 創建針對x的權重矩陣

    W = np.matrix(np.zeros((m, m)))

    for i in range(m):

        xi = np.array(X[i][0])

        x = np.array(x)

        W[i, i] = exp((np.linalg.norm(x - xi))/(-2*k**2))

    # 獲取此點相應的回歸係數

    xWx = X.T*W*X

    if np.linalg.det(xWx) == 0:

        print('xWx is a singular matrix')

        return

    w = xWx.I*X.T*W*Y

    return w

我們對上部分使用的數據進行回歸併繪製回歸曲線:

當k = 0.5, 基本上就是無偏差的標準線性回歸

Correlation coefficient: 0.9869292425124014

當k = 0.1, 可以較好的反應數據的潛在規律

Correlation coefficient: 0.997890402610583

當k = 0.03, 擬合的曲線較多的考慮了噪聲數據導致過擬合的現象

Correlation coefficient: 0.9995975498285312

總結

本文總結了標準線性回歸以及局部加權線性回歸的基礎知識,並對兩張回歸方式給與了Python的實現。可見局部加權線性回歸在取得適當的k,便可以較好的發現數據的內在潛質,但是局部加權線性回歸有個缺點就是類似kNN一樣,每計算一個點的預測值就需要利用所有數據樣本進行計算,如果數據量很大,計算量會是一個問題。

參考

看完本文有收穫?請轉發分享給更多人

關注「大數據與機器學習文摘」,成為Top 1%

相關焦點

  • Python 機器學習算法實踐:嶺回歸和LASSO
    , 本文主要介紹兩種線性回歸的縮減(shrinkage)方法的基礎知識: 嶺回歸(Ridge Regression)和LASSO(Least Absolute Shrinkage and Selection Operator)並對其進行了Python實現。
  • 機器學習套路:線性回歸
    (點擊上方藍字,快速關注我們)轉自:sharkdtuhttp://sharkdtu.com/posts/ml-linear-regression.html好文投稿, 請點擊 → 這裡了解詳情線性回歸可以說是機器學習中最簡單
  • python機器學習--線性回歸
    python機器學習--線性回歸線性回歸是最簡單的機器學習模型,其形式簡單,易於實現,同時也是很多機器學習模型的基礎。對於一個給定的訓練集數據,線性回歸的目的就是找到一個與這些數據最吻合的線性函數。針對線性回歸算法在之前的數模案例也有涉及喔,歡迎去看看上一篇博客數學建模預測模型實例--大學生體測數據模型在這裡插入圖片描述OLS線性回歸Ordinary Least Squares 最小二乘法一般情況下,線性回歸假設模型為下,其中w為模型參數
  • 機器學習——梯度下降、梯度下降的線性回歸算法
    一、梯度下降梯度下降是一個用來求函數最小值的算法,我們將使用梯度下降算法來求出代價函數J(θo,θ1)的最小值。梯度下降算法中要做的就是不停地一點點改變θo和θ1,直到J成為最小值或局部最小值。通常將θo和θ1的初始值設為0。
  • SPSS加權線性回歸案例實踐,解決異方差問題
    線性回歸時要求殘差方差齊次,通俗理解為所有的觀測數據在計算過程中具有相同的貢獻。但是實踐中有時候會出現殘差方差不齊的情況,此時普通最小二乘法不再適用。 通常來說,此類情況可以使用加權的最二乘法(WLS)擬合線性回歸模型。WLS會降低具有較大方差的觀測數據對分析過程的影響。
  • 機器學習算法——線性回歸算法介紹
    1 線性回歸模型簡介線性回歸,就是能夠用一個直線較為精確地描述數據之間的關係。這樣當出現新的數據的時候,就能夠預測出一個簡單的值。線性回歸中最常見的就是房價的問題。一直存在很多房屋面積和房價的數據,如下圖所示:在這種情況下,就可以利用線性回歸構造出一條直線來近似地描述放假與房屋面積之間的關係,從而就可以根據房屋面積推測出房價。2 線性回歸的函數模型通過線性回歸構造出來的函數一般稱之為了線性回歸模型。
  • 入門機器學習之線性回歸
    4、Stepwise Regression逐步回歸在處理多個自變量時,我們可以使用這種形式的回歸。在這種技術中,自變量的選擇是在一個自動的過程中完成的,其中包括非人為操作。這一壯舉是通過觀察統計的值,如R-square,t-stats和AIC指標,來識別重要的變量。逐步回歸通過同時添加/刪除基於指定標準的協變量來擬合模型。
  • 機器學習 | 線性回歸大家族Part1
    目前,機器學習在疾病的鑑別診斷,藥物的生產研究,臨床試驗研究,放射影像學等醫學領域已有十分廣泛的應用。今天推出機器學習系列筆記第20期,本期分享內容為:機器學習之線性回歸大家族Part1。回歸算法源於統計學理論,它可能是機器學習算法中產生最早的算法之一,其在現實中的應用非常廣泛,包括使用其他經濟指標預測股票市場指數,根據噴射流的特徵預測區域內的降水量,根據公司的廣告花費預測總銷售額,或者根據有機物質中殘留的碳-14的量來估計化石的年齡等等,只要一切基於特徵預測連續型變量的需求,我們都使用回歸技術。既然線性回歸是源於統計分析,是結合機器學習與統計學的重要算法。
  • sklearn機器學習心得—線性回歸|粉絲投稿1
    ,也是重要的算法之一,基本上第一次接觸的機器學習算法就是線性回歸了。因為相對其他算法而言,我覺得線性回歸是相對比較容易的算法,從某種意義上來說,在學習函數的時候已經開始接觸線性回歸了,只不過那個時候並沒有涉及到誤差項,其實在中學的時候就有接觸了,學習的最小二乘法就是啦~~1).對於坐標系中給定的點,我們希望用一條線或是一個類似於:f(x)=θ0+θ1*x1+θ2*x2_...θn*xn 方程來擬合這寫數據點,這就是我們說的回歸了2).這次我們要用的是
  • 人工智慧機器學習三大類之回歸模型(RM)
    常見的回歸種類有:線性回歸、曲線回歸、邏輯回歸等。 線性回歸: 如果擬合函數為參數未知的線性函數,即因變量和自變量為線性關係時,則稱為線性回歸。 最終目標是確定每個權值(參數)θ或者通過算法逼近真實的權值(參數)θ。 需要注意的是,線性回歸不是指樣本的線性,樣本可以是非線性的,而是指對參數θ的線性。 線性回歸問題:可能會出現欠擬合、非滿秩矩陣問題等。
  • 機器學習入門篇|面向初學者的十大機器學習算法
    為了舉例說明機器學習的影響,Man group的AHL Dimension計劃是一個51億美元的對衝基金,部分由AI管理。 該基金開始運作後,到2015年,儘管其管理的資產遠遠少於該基金,但其機器學習算法卻貢獻了該基金一半以上的利潤。
  • 數據科學&機器學習的筆記1:分類、線性回歸和邏輯回歸
    第五章開了個頭,講的是「選擇和評價模型」,大抵是介紹機器學習中的常用模型,分清遇到不同數據分析需求時適用的模型。令我失望的是,真的真的只是講了一下模型的種類,告訴你模型可以用來做什麼,連一點點原理都沒有涉及。我希望今天把課程所學溫習,把上學期的實踐課學到的機器學習原理整合進知識框架裡,順道把之前的筆記好好整理一下。
  • FinHack筆記(30)-機器學習算法概要
    常用的回歸算法包括:普通最小二乘回歸(OLSR)線性回歸邏輯回歸逐步回歸多元自適應回歸樣條法(MARS)局部估計平滑散點圖(LOESS)2、基於實例的學習算法機器學習算法中最簡單的算法,它不像其他算法需要在樣本的基礎上建立一般性的推理公式,而是直接通過存儲的數據集進行分類或回歸學習來得到結果。
  • 線性回歸的幾何與概率視角
    Content線性回歸-幾何視角線性回歸-概率視角Pseudo-inverse偽逆的介紹局部加權線性回歸多個output的線性回歸情況很巧合的是,這個與我們一開始的幾何角度建立的loss function是一樣的。小結我們從最大似然估計的角度去看線性回歸,最後得到的loss function與幾何角度OLS得到的結果相一致。這說明OLS,這個看似沒有任何假設的模型,其實隱含著: 各個樣本之間是獨立的。
  • 文科生都能看懂的機器學習教程:梯度下降、線性回歸、邏輯回歸
    於是一名叫Audrey Lorberfeld的畢業生,試圖將大眾與機器學習之間的鴻溝,親手填補上。於是有了這個系列文章。  本系列第一講:梯度下降、線性回歸和邏輯回歸。  算法 vs 模型  在理解開始了解機器學習之前,我們需要先搞懂兩個基礎概念:算法和模型。  我們可以把模型看做是一個自動售貨機,輸入(錢),輸出(可樂)。
  • 機器學習基礎:線性回歸和梯度下降的初學者教程
    ❝線性回歸是尋找數據集的最佳擬合線。繼續調整,直到達到局部最小值,其中平方誤差之和最小。❝梯度下降法是一種通過多次迭代最小化誤差平方和來逼近最小平方回歸線的算法。❞梯度下降算法在機器學習術語中,誤差平方和稱為「成本」。這個成本公式是:
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    上一篇文章中介紹了機器學習的簡單知識,還有python中進行機器學習實踐需要的生態環境,接下來將會通過鳶尾花分類這個例子對機器學習做一個簡要的介紹。通過一步一步地實現這個項目來介紹以下內容。導入和使用python中機器學習的各個方面的類庫。
  • 十大機器學習算法之旅已啟程
    1 - 線性回歸  線性回歸可能是統計學和機器學習中最知名和最易理解的算法之一。  預測建模主要關注最小化模型的誤差或者以可解釋性為代價來做出最準確的預測。我們將借用、重用和竊取包括統計數據在內的許多不同領域的算法,並將其用於這些目的。
  • 機器學習新手十大算法之旅啟程
    1 - 線性回歸  線性回歸可能是統計學和機器學習中最知名和最易理解的算法之一。  預測建模主要關注最小化模型的誤差或者以可解釋性為代價來做出最準確的預測。我們將借用、重用和竊取包括統計數據在內的許多不同領域的算法,並將其用於這些目的。