如何理解最小二乘法?

2021-02-08 Python與統計分析
文章同步在個人博客網站:https://changshuitaotao.github.io/歡迎訪問

無論是傳統的統計學,還是時下火熱的機器學習,線性回歸都是最基礎但又十分重要的模型之一。線性回歸使用了最小二乘法來估計模型參數,如何理解最小二乘法將成為掌握線性回歸的關鍵。最小二乘法可以從定義、線性代數、概率論三個角度來理解,本文對此進行簡單的整理。這樣的整理不僅有助於我們學習線性回歸,也有助於我們理解ridge回歸、lasso回歸等很多模型。接下來,我們就開始吧。

從定義看最小二乘法

簡單線性回歸模型通常設定為:

我們的目的是求解a和b,但是我們希望求解出來的a和b能使得總的誤差儘可能的小。也就是說,我們需要定義一個目標函數測量總誤差,目標函數達到最小時的a和b,就是我們想要的a和b。

單條觀測數據的誤差可以直接定義為

這種定義目標函數的方法就是最小二乘法,最小就是求解最小值,二乘就是乘兩次,同一個數據乘兩次就是平方,這就是最小二乘法的基本含義,正因為如此,最小二乘法又被稱為最小平方法。有了目標函數,接下來就是求解參數a和b,這是一個最優化問題,需要一些微積分的知識:

微積分中,函數的極值往往在導數為0處出現。參數b看上去求解更加簡單,可以先進行求解,令:

這是一個複合函數求導問題,根據鏈式求導法則,可知:

由此可得:

對上面公式再進行進一步的簡化,我們就得到了參數b的解:

然後我們求解參數a,令:

將b帶入上式中:

利用公式

這就得到了簡單線性回歸模型的參數a和b。

從線性代數看最小二乘法

以上我們從定義層面看了一下最小二乘法,並使用微積分工具求解了回歸模型的參數,接下來我們從線性代數的角度來看一下線性回歸問題。我們重寫一下線性回歸模型:

用線性代數來表達上面的模型為:

其中,

從線性代數的角度來說,


從而得到:

這就是線性回歸的線性代數解。從線性代數的角度來理解最小二乘法,其實更加簡單和直觀。

從概率論來看最小二乘法

現在我們將考慮問題的方式切換到概率的角度。概率論中,我們常常將事件的發生假定服從一個概率分布,然後我們可以藉助極大似然法來估計這一概率分布的參數。線性回歸問題中,我們採集的每一條數據都可以視為一個隨機事件,可以假定每條數據都服從一個相同的分布,我們最先想到的應該是正態分布,畢竟正態分布非常常見,即

很顯然這裡的

根據極大似然估計的思想,在滿足獨立同分布的假定下,我們寫出似然函數:

稍作變換可得:

現在我們的目標是使

可以看到,這個函數和根據最小二乘定義構造的目標函數完全相同。因此,我們很清楚了:最小二乘估計等價於數據服從正態分布時的極大似然估計。

總結

以上就是線性回歸的不同理解,我們總結一下。從定義上來看,最小二乘法定義為最小化離差平方和;從線性代數得角度來看,最小二乘法本質上是在求解因變量在設計矩陣列空間的投影,從概率論的角度來看,最小二乘估計等價於數據付出從正態分布時的極大似然估計。

最後我們根據求解的公式來設計一個我們自己的簡單線性回歸類,初步考慮,線性回歸類應該至少包括三個方法:

import numpy as np

class SimpleLinearRegression:
    def __init__(self, x, y):
        assert len(x) == len(y), \
            'Simple linear regression reqires the length of x is equal to the length of y'
        self.x = x
        self.y = y
        self._a = None
        self._b = None

    def __str__(self):
        return '{},you can fit a simple linear regression by calling the method of fit and make a prediction by calling the method of predict'.format(self.__class__)

    def __repr__(self):
        return 'Simple Linear Regression class at {}'.format(hex(id(self)))

    def fit(self):
        """you can use this method to fit a simple linear regression"""
        x_mean = np.mean(self.x)
        y_mean = np.mean(self.y)
        num = 0
        den = 0
        for x_i, y_i in zip(x, y):
            num += (x_i - x_mean) * (y_i - y_mean)
            den += (x_i - x_mean) ** 2

        self._a = num / den
        self._b = y_mean - self._a * x_mean
        return self

    def fit2(self):
        """you can use this method to fit a simple linear regression"""
        x_mean = np.mean(self.x)
        y_mean = np.mean(self.y)
        num = np.dot(x-x_mean,y-y_mean)
        den = np.dot(x-x_mean,x-x_mean)
        self._a = num/den
        self._b = y_mean - self._a * x_mean
        return self

    def predict(self, x_predict):
        assert self._a is not None and self._b is not None, \
            'Please fit the model before calling the predict function'
        if isinstance(x_predict,int):
            return self.__predict(x_predict)
        else:
            return np.array([self.__predict(i) for i in x_predict])

    def __predict(self, x_predict_i):
        return self._a * x_predict_i + self._b
    
    
>[0.45293553 0.85601313 1.66216834]
<class '__main__.SimpleLinearRegression'>,you can fit a simple linear regression by calling the method of fit and make a prediction by calling the method of predict
0.40307760585901276
0.049857919190661626
0.4529355250496744
<class '__main__.SimpleLinearRegression'>,you can fit a simple linear regression by calling the method of fit and make a prediction by calling the method of predict
0.40307760585901276
0.049857919190661626

這裡設計了fit和fit2兩個方法來擬合模型,前者使用循環來實現累加運算,後者使用numpy的向量化運算來求解模型參數,顯然後者的性能更高一些。

相關焦點

  • 最小二乘法
    微積分應用課題一 最小二乘法  從前面的學習中, 我們知道最小二乘法可以用來處理一組數據, 可以從一組測定的數據中尋求變量之間的依賴關係, 這種函數關係稱為經驗公式. 本課題將介紹最小二乘法的精確定義及如何尋求 與 之間近似成線性關係時的經驗公式.
  • 最小二乘法的本質是什麼?
    .最小二乘法的一種常見的描述是殘差滿足正態分布的最大似然估計模型具有如下形式:(用愛因斯坦的話來說就是空間曲率為0)為什麼最小二乘法好使?因為我們處於空間曲率近似為0的空間,多數的物理量和物理定理都滿足歐氏空間的特性。實際上,高斯對於最小二乘法的認識,很有欽定的意味:假定最小二乘法最優,那麼如何如何。至於為什麼它最優,抱歉,高斯本人也不知道。第一個真正證明最小二乘法最優的是Maxwell。他的證明主要基於空間對稱性,而這正是歐氏空間的特點。
  • 最小二乘法的數學公式
    之前在德輝學堂介紹過最小二乘法,但是有很多好學的小夥伴總是追問,最小二乘法的數學公式究竟是怎麼樣的?      本期的這一篇文章,我們將介紹一個簡潔的最小二乘法數學公式,慢慢剖析它,爭取讓好學的小夥伴們能認識它,然後再結合Excel利用它來做一些計算。
  • 手把手教你最小二乘法
    今天這期推送的主題是介紹最小二乘法以及如何利用最小二乘法對已有數據進行擬合。之所以會想到這個主題,是因為前段時間在準備美賽時看到很多最小二乘法的應用,但多數關於其原理的帖子要麼晦澀難懂要麼不夠清楚,就像下面這樣,於是乎萌生出這個想法。        (全文共2479字,我也不知道什麼時候能看完。
  • 偏最小二乘法到底是什麼?
    今天就給大家推薦一種量化研究神兵利器——偏最小二乘法(PLS)偏最小二乘法發展較SEM稍晚,最早是由 Wold (1975) 基於經濟計量分析需求所提出,但卻在化學計量領域獲得重視與普及,目前在經管、營銷、商學領域普遍通行。
  • 最小二乘法(附MATLAB代碼)
    前幾天有一些小夥伴需要小編講一下最小二乘法,小編依稀記得當年數值計算這門課學習過這個知識點,但無奈小編忘得一乾二淨,於是在知乎上看到這位大神對最小二乘法的講解,各位小夥伴如果想直接看這位大神講解的話,可以點擊下方閱讀原文直接進行學習。
  • 最小二乘法的前世今生,及其與平均值的關係
    為了能夠直觀理解,我們先來作一個簡圖。現在我們要找到一個合適的y值,使得它能替代這5次成績。一個好的想法是讓y到這五個點的豎直距離之和最小。總結一下,為了找出最能代表5次月考成績的真值y,我們使用了到y值的「距離平方的和」最小的原理。用今天我們熟悉的稱呼叫做「最小二乘法(least square method)」,這裡的二乘就是平方的意思。
  • GD&T乾貨|最小二乘法的數學公式詳解
    (GZHl:智慧汽車供應鏈)之前在德輝學堂介紹過最小二乘法,但是有很多好學的小夥伴總是追問,最小二乘法的數學公式究竟是怎麼樣的?本期的這一篇文章,我們將介紹一個簡潔的最小二乘法數學公式,慢慢剖析它,爭取讓好學的小夥伴們能認識它,然後再結合Excel利用它來做一些計算。
  • Python實現最小二乘法
    上一篇文章講了最小二乘算法的原理。這篇文章通過一個簡單的例子來看如何通過Python實現最小乘法的線性回歸模型的參數估計。王松桂老師《線性統計模型——線性回歸與方差分析》一書中例3.1.3。回歸模型的參數估計一元線性模型的一般公式為一元線性回歸模型我們使用最小二乘法估算出α、β即可求出經驗回歸方程。
  • 利用最小二乘法實現曲線擬合
    簡介在工程問題的計算中,我們經常需要處理一些離散數據的擬合問題,而最小二乘法是處理曲線擬合問題的常用方法。目前,許多軟體都提供有基於最小二乘法進行曲線擬合的功能,例如在Origin和Excel中均可直接利用離散數據進行曲線擬合。然而,這些軟體只能處理一些簡單函數的擬合問題,當需要擬合的函數較為複雜時,或者無法用簡單的表達式來表述時,則往往無法直接進行擬合。
  • 偏最小二乘法是什麼?全新SmartPLS 3.3X統計方法來了!
    你也許了解最小二乘法,但是你聽過偏最小二乘法嗎?它到底是個什麼東西?又是幹嘛用的呢?它和最小二乘法僅一字之差,卻大不相同!隨著社會科學的發展,在經濟管理、教育學、社會科學、醫學中,多元線性回歸分析已經成為一種普遍應用的統計分析和預測方法。
  • 最小二乘法原理(中):似然函數求權重參數
    似然估計本質本質便是根據已有的大量樣本(實際上就是利用已知的條件)來推斷事件本身的一些屬性參數的方法,最大估計更是最能反映這些出現的樣本的,所以這個參數值也是最可靠和讓人信任的,得到這個參數值後,等來了一個新樣本 X(i+1) 後,我們可以預測它的標籤值。
  • 學習回歸——最小二乘法
    我們將訓練數據中的廣告費代入函數,把得到的點擊量與訓練數據中的點擊量相比較,找出使二者得差最小的θ。這麼做就是為了找到使E(θ)的值最小的θ/這樣的問題稱之為最優化問題;為什麼要計算誤差的平方?最小二乘法:https://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95
  • 量化分析的神兵利器:偏最小二乘法(SmartPLS)實戰研討會
    但是,當自變量之間存在多重相關性的時候,我們常用的最小二乘法就會失效,即使採用主成分分析,也無法很好的彌補。那就沒有別的辦法了嗎?當然不是。偏最小二乘法(Partial Least Square, PLS)為結構方法模型(Structural Equational Modeling, SEM)就是應這種實際需求的另一個分支的多變量統計分析技巧,它是一種多因變量對多自變量的回歸建模方法。可以較好的解決許多以往用普通多元回歸無法解決的問題。主要的應用都是潛變量分析。
  • 常用算法知識:最小二乘的幾何意義及投影矩陣
    拿來拼湊肯定是不行的,最小二乘法告訴我們,這個多項式的係數應該讓每個點的誤差的平方之和最小。(百度百科)最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。
  • 回歸系列(二)|最小二乘法真有那麼複雜嗎?
    因為我們希望回歸直線儘可能最優,所以就需要做出的直線離各散點的綜合距離最小。如下圖中的u1、u2,代表了散點與回歸直線的距離。如下圖,我們根據肉眼觀察,對關節炎的數據畫出來兩條線:藍線和紅線,問題是到底選擇哪一條線呢?
  • 乘法造句和解釋_乘法的例句有哪些 - 小孩子點讀
    乘法(chéng fǎ)。最簡單的是自然數的乘法,可以理解為是把一個數擴大若干倍的運算。是除法的逆運算。如a乘以b等於c,記作a×b=c,a·b=c,或ab=c,a叫做被乘數,b叫做乘數,×叫乘號,c叫做a與b的乘積,也叫積。
  • 線性回歸採用最小二乘作為loss的解釋
    對於一元特徵,很容易理解,結果只和某一個特徵相關,比方說房價只和房屋面積相關,用公式表示就是:y = ax+b,其中,a,b就是根據數據集學習到的最優參數。
  • 高考數學:統計二輪微專題——用最小二乘法求線性回歸方程
    最小二乘法主要用來求解兩個具有線性相關關係的變量的回歸方程,該方法適用於求解與線性回歸方程相關的問題,如求解回歸直線方程,並應用其分析預報變量的取值等.破解此類問題的關鍵點如下:①析數據,分析相關數據,
  • 【SPSS數據分析】最小二乘回歸模型在生物醫藥統計分析中的應用詳解(2)——【杏花開生物醫藥統計】
    最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。