Python中線性回歸的完整指南

2021-02-20 相約機器人

作者 | Marco Peixeiro

來源 | Medium

編輯 | 代碼醫生團隊

介紹

本文試圖成為理解和執行線性回歸所需的參考。雖然算法很簡單,但只有少數人真正理解了基本原理。

 

首先,將深入研究線性回歸理論,以了解其內在運作。然後,將在Python中實現該算法來模擬業務問題。

 

理論

 

將如何研究線性回歸

線性回歸可能是統計學習的最簡單方法。對於更先進的方法來說,這是一個很好的起點,事實上,許多花哨的統計學習技術可以看作是線性回歸的擴展。因此理解這個簡單的模型將為繼續採用更複雜的方法奠定良好的基礎。

 

線性回歸非常適合回答以下問題:

 

2個變量之間是否存在關係?

關係有多強?

哪個變量貢獻最大?

如何準確估計每個變量的影響?

能準確預測目標嗎?

這種關係是線性的嗎?(杜)

有互動效應嗎?

估計係數

假設只有一個變量和一個目標。然後線性回歸表示為:

 

具有1個變量和1個目標的線性模型的方程

在上面的等式中,beta是係數。這些係數是需要的,以便用模型進行預測。

 

那麼如何找到這些參數呢?

 

為了找到參數,需要最小化最小二乘或誤差平方和。當然線性模型並不完美,它不能準確預測所有數據,這意味著實際值和預測之間存在差異。錯誤很容易通過以下方式計算:

 

從真實值中減去預測

但為什麼誤差平方?

 

對誤差進行平方,因為預測可以高於或低於真值,分別導致負差異或正差異。如果沒有對誤差進行平方,則由於負差異而導致的誤差總和可能會減少,而不是因為模型非常適合。

 

此外平方誤差會對較大的差異造成不利影響,因此最小化平方誤差會「保證」更好的模型。

 

看一下圖表以便更好地理解。

 

線性擬合數據集

在上圖中,紅點是真實數據,藍線是線性模型。灰線表示預測值和真值之間的誤差。因此藍線是最小化灰線平方長度之和的線。

 

在對本文過於沉重的一些數學運算之後,最終可以使用以下等式估算係數:

 

其中x bar和y bar代表平均值。

 

估計係數的相關性

既然有係數,那麼如何判斷它們是否與預測目標相關?

 

最好的方法是找到p值。該p值來定量統計學意義; 它允許判斷零假設是否被拒絕。

 

零假設?

 

對於任何建模任務,假設是特徵與目標之間存在某種相關性。因此零假設是相反的:特徵與目標之間沒有相關性。

 

因此,找到每個係數的p值將表明該變量在預測目標方面是否具有統計意義。作為一個經驗一般規則,如果p值是小於0.05:有變量和目標之間有很強的關係。

 

評估模型的準確性

通過查找其p值發現變量具有統計顯著性。

 

現在如何知道線性模型是否有用?

 

為了評估這一點,通常使用RSE(殘差標準誤差)和R²統計量。

 

RSE公式

R²配方

第一個誤差度量很容易理解:殘差越小,模型越適合數據(在這種情況下,數據越接近線性關係)。

 

對於R²度量,它測量目標中可變性的比例,可以使用特徵X來解釋。因此假設線性關係,如果特徵X可以解釋(預測)目標,則比例高並且R 2值將接近1.如果相反,則R 2值接近0。

 

多元線性回歸理論

在現實生活中,永遠不會有一個功能來預測目標。那麼一次對一個特徵進行線性回歸嗎?當然不是。只需執行多元線性回歸。

 

該方程與簡單線性回歸非常相似; 只需添加預測變量的數量及其相應的係數:

 

多元線性回歸方程。p是預測變量的數量

評估預測變量的相關性

以前在簡單線性回歸中,通過查找其p值來評估特徵的相關性。

 

在多元線性回歸的情況下,使用另一個度量:F統計量。

 

F統計公式。n是數據點的數量,p是預測變量的數量

這裡針對整體模型計算F統計量,而p值對於每個預測值是特定的。如果存在強關係,則F將遠大於1.否則,它將大約等於1。

 

如何大於 1足夠大?

 

這很難回答。通常如果存在大量數據點,則F可能略大於1並表明存在強關係。對於小數據集,則F值必須大於1以表示強關係。

 

為什麼不能在這種情況下使用p值?

 

由於擬合了許多預測變量,需要考慮一個有很多特徵(p很大)的情況。有了大量的預測因子,即使它們沒有統計學意義,也總會有大約5%的預測因子偶然會有非常小的p值。因此使用F統計量來避免將不重要的預測因子視為重要的預測因子。

 

評估模型的準確性

就像簡單的線性回歸一樣,R²可以用於多元線性回歸。但是要知道添加更多預測變量總是會增加R²值,因為模型必然更適合訓練數據。

 

然而這並不意味著它在測試數據上表現良好(對未知數據點進行預測)。

 

添加互動

在線性模型中具有多個預測變量意味著某些預測變量可能對其他預測變量產生影響。

 

例如想要預測一個人的工資,了解她的年齡和在學校度過的年數。當然這個人年齡越大,這個人在學校度過的時間就越多。那麼如何模擬這種互動效應呢?

 

考慮這個有兩個預測變量的非常簡單的例子:

 

多元線性回歸中的交互效應

簡單地將兩個預測變量相乘並關聯一個新係數。簡化公式,現在看到係數受另一個特徵值的影響。

 

作為一般規則,如果包含交互模型,應該包括特徵的單獨效果,即使它的p值不重要。這被稱為分層原則。這背後的基本原理是,如果兩個預測變量相互作用,那麼包括它們的個體貢獻將對模型產生很小的影響。

 

好的!現在知道它是如何工作的,讓它讓它工作!將通過Python中的簡單和多元線性回歸進行研究,並將展示如何在兩種情況下評估參數的質量和整體模型。

 

可以在此處獲取代碼和數據。

https://github.com/marcopeix/ISL-linear-regression

強烈建議按照並重新創建Jupyter筆記本中的步驟,以充分利用本教程。

介紹

該數據集包含有關廣告花費和生成的銷售額的信息。錢花在電視,廣播和報紙廣告上。

 

目標是使用線性回歸來了解廣告支出如何影響銷售。

 

導入庫

使用Python的優勢在於可以訪問許多庫,這些庫允許快速讀取數據,繪製數據並執行線性回歸。

 

喜歡在筆記本上導入所有必要的庫,以保持一切井井有條。導入以下內容:

 

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_scoreimport statsmodels.api as sm

閱讀數據

假設下載了數據集,請將其放在data項目文件夾中的目錄中。然後,像這樣讀取數據:

data = pd.read_csv("data/Advertising.csv")

要查看數據的外觀,執行以下操作:

 

應該看到這個:

 

該列Unnamed: 0是多餘的。因此刪除它。

data.drop(['Unnamed: 0'], axis=1)

好吧數據很乾淨,可以進行線性回歸!

 

簡單線性回歸

造型

對於簡單的線性回歸,只考慮電視廣告對銷售的影響。在直接進入建模之前,看一下數據的樣子。

 

使用matplotlib 一個流行的Python繪圖庫來製作散點圖。

plt.figure(figsize=(16, 8))plt.scatter(    data['TV'],    data['sales'],    c='black')plt.xlabel("Money spent on TV ads ($)")plt.ylabel("Sales ($)")plt.show()

運行此代碼單元格,應該看到此圖表:

 

分散在電視廣告和銷售上花錢的情節

電視廣告和銷售額之間存在明顯的關係。

 

看看如何生成這些數據的線性近似。

 

X = data['TV'].values.reshape(-1,1)y = data['sales'].values.reshape(-1,1)reg = LinearRegression()reg.fit(X, y)print("The linear model is: Y = {:.5} + {:.5}X".format(reg.intercept_[0], reg.coef_[0][0]))

將直線擬合到數據集並查看等式的參數就很簡單。在這種情況下

 

簡單線性回歸方程

想像一下這條線如何適合數據。

 

predictions = reg.predict(X)plt.figure(figsize=(16, 8))plt.scatter(    data['TV'],    data['sales'],    c='black')plt.plot(    data['TV'],    predictions,    c='blue',    linewidth=2)plt.xlabel("Money spent on TV ads ($)")plt.ylabel("Sales ($)")plt.show()

而現在看到:

 

線性擬合

從上圖可以看出,簡單的線性回歸似乎可以解釋花在電視廣告和銷售上的金額的一般影響。

 

評估模型的相關性

看看模型是否有用,需要查看R²值和每個係數的p值。

 

是這樣做的:

X = data['TV']y = data['sales']X2 = sm.add_constant(X)est = sm.OLS(y, X2)est2 = est.fit()print(est2.summary())

這給這個可愛的輸出:

 

R²和p值

看兩個係數,得到一個非常低的p值(雖然它可能不完全是0)。這意味著這些係數與目標(銷售額)之間存在很強的相關性。

 

然後看看R²值,有0.612。因此,大約60%的銷售可變性是由電視廣告花費的金額來解釋的。這沒關係,但絕對不是能夠準確預測銷售額的最佳方法。當然,報紙和廣播廣告的支出必然會對銷售產生一定的影響。

 

讓看看多元線性回歸是否會表現得更好。

 

多元線性回歸

模型

就像簡單的線性回歸一樣,將定義特徵和目標變量,並使用scikit-learn庫來執行線性回歸。

Xs = data.drop(['sales', 'Unnamed: 0'], axis=1)y = data['sales'].reshape(-1,1)reg = LinearRegression()reg.fit(Xs, y)print("The linear model is: Y = {:.5} + {:.5}*TV + {:.5}*radio + {:.5}*newspaper".format(reg.intercept_[0], reg.coef_[0][0], reg.coef_[0][1], reg.coef_[0][2]))

從這個代碼單元格中,得到以下等式:

 

多元線性回歸方程

無法想像所有三種媒介對銷售的影響,因為它總共有四個維度。

 

請注意,報紙的係數是負數,但也相當小。它與模型有關嗎?通過計算每個係數的F統計量,R²值和p值來看。

 

評估模型的相關性

此處的過程與在簡單線性回歸中所做的非常相似。

X = np.column_stack((data['TV'], data['radio'], data['newspaper']))y = data['sales']X2 = sm.add_constant(X)est = sm.OLS(y, X2)est2 = est.fit()print(est2.summary())

得到以下內容:

 

R²,p值和F統計量

R²遠高於簡單線性回歸,其值為0.897!

 

此外F統計量為570.3。這遠遠大於1,並且由於數據集相當小(僅200個數據點),它表明廣告支出與銷售之間存在很強的關係。

 

最後因為只有三個預測變量,可以考慮p值來確定它們是否與模型相關。當然注意到第三個係數(報紙的係數)具有較大的p值。因此報紙上的廣告支出在統計上並不顯著。刪除該預測器會略微降低R²值,但可能會做出更好的預測。

 

如前所述,這可能不是表現最佳的算法,但對於理解線性回歸非常重要,因為它構成了更複雜的統計學習方法的基礎。

推薦閱讀

使用TensorFlow進行線性回歸

《深度學習之TensorFlow:入門、原理與進階實戰》和《Python帶我起飛——入門、進階、商業實戰》兩本圖書是代碼醫生團隊精心編著的 AI入門與提高的精品圖書。配套資源豐富:配套視頻、QQ讀者群、實例源碼、 配套論壇:http://bbs.aianaconda.com 。更多請見:https://www.aianaconda.com

點擊「閱讀原文」圖書配套資源

相關焦點

  • python多重線性回歸分析
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • python機器學習--線性回歸
    python機器學習--線性回歸線性回歸是最簡單的機器學習模型,其形式簡單,易於實現,同時也是很多機器學習模型的基礎。對於一個給定的訓練集數據,線性回歸的目的就是找到一個與這些數據最吻合的線性函數。針對線性回歸算法在之前的數模案例也有涉及喔,歡迎去看看上一篇博客數學建模預測模型實例--大學生體測數據模型在這裡插入圖片描述OLS線性回歸Ordinary Least Squares 最小二乘法一般情況下,線性回歸假設模型為下,其中w為模型參數
  • python線性回歸
    一.理論基礎1.回歸公式  對於單元的線性回歸,我們有:f(x) = kx + b 的方程(k代表權重,b代表截距)。
  • Python機器學習算法入門之梯度下降法實現線性回歸
    背景        文章的背景取自An Introduction to Gradient Descent and Linear Regression,本文想在該文章的基礎上,完整地描述線性回歸算法。部分數據和圖片取自該文章。沒有太多時間摳細節,所以難免有什麼缺漏錯誤之處,望指正。
  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。__version__)3.線性回歸分析Y= aX + b + e ,e表示殘差。
  • Python 機器學習:多元線性回歸
    python機器學習:線性回歸往下講,這篇文章要講解的多元線性回歸。1、什麼是多元線性回歸模型?當y值的影響因素不唯一時,採用多元線性回歸模型。例如商品的銷售額可能不電視廣告投入,收音機廣告投入,報紙廣告投入有關係,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.
  • 多重線性回歸
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:Multivariate Linear Regression數據準備#多重線性回歸#數據準備
  • 線性回歸:簡單線性回歸詳解
    【導讀】本文是一篇專門介紹線性回歸的技術文章,討論了機器學習中線性回歸的技術細節。線性回歸核心思想是獲得最能夠擬合數據的直線。
  • 用Python實現線性回歸,8種方法哪個最高效?
    即便往前推10年,SVM、boosting等算法也能在準確率上完爆線性回歸。那麼,為什麼我們還需要線性回歸呢?一方面,線性回歸所能夠模擬的關係其實遠不止線性關係。線性回歸中的「線性」指的是係數的線性,而通過對特徵的非線性變換,以及廣義線性模型的推廣,輸出和特徵之間的函數關係可以是高度非線性的。
  • Python 實戰多元線性回歸模型,附帶原理+代碼
    來源 | 早起Python( ID:zaoqi-python )「多元線性回歸模型」非常常見,是大多數人入門機器學習的第一個案例,儘管如此,裡面還是有許多值得學習和注意的地方。其中多元共線性這個問題將貫穿所有的機器學習模型,所以本文會「將原理知識穿插於代碼段中」,爭取以不一樣的視角來敘述和講解「如何更好的構建和優化多元線性回歸模型」。主要將分為兩個部分:
  • 了解線性回歸的數學原理:線性回歸背後的微積分
    線性回歸通常是任何機器學習課程的起點。目的是預測輸入變量與目標變量之間的線性關係。天真的情況是穿過空間原點的直線。在這裡,我們僅限於二維空間,即笛卡爾平面。讓我們從y = mx格式開始逐步發展,然後從y = mx + c回歸開始。
  • 8種用Python實現線性回歸的方法,究竟哪個方法最高效?
    線性回歸中的「線性」指的是係數的線性,而通過對特徵的非線性變換,以及廣義線性模型的推廣,輸出和特徵之間的函數關係可以是高度非線性的。另一方面,也是更為重要的一點,線性模型的易解釋性使得它在物理學、經濟學、商學等領域中佔據了難以取代的地位。
  • 用 Python 進行多元線性回歸分析(附代碼)
    很多人在做數據分析時會經常用到一元線性回歸,這是描述兩個變量間統計關係的最簡單的回歸模型。但現實問題中,我們往往會碰到多個變量間的線性關係的問題,這時就要用到多元線性回歸,多元線性回歸是一元回歸的一種推廣,其在實際應用中非常廣泛,本文就用python代碼來展示一下如何用多元線性回歸來解決實際問題。圖1.
  • 線性回歸的正則化 ——嶺回歸與LASSO回歸
    本文作者:王   歌文字編輯:孫曉玲在《基於廣義線性模型的機器學習算法——線性回歸》中我們介紹了如何使用線性回歸算法來擬合學習器
  • 8種方法用Python實現線性回歸,為你解析最高效選擇
    沒錯,作為數據科學界元老級的模型,線性回歸幾乎是所有數據科學家的入門必修課。拋開涉及大量數統的模型分析和檢驗不說,你真的就能熟練應用線性回歸了麼?未必!在這篇文章中,小編將介紹8種用Python實現線性回歸的方法。了解了這8種方法,就能夠根據不同需求,靈活選取最為高效的方法實現線性回歸。
  • 機器學習sklearn線性回歸
    回歸算法是機器學習的一個基礎算法,簡單的就是線性回歸,還有非線性回歸。本節我們講解簡單的線性回歸。
  • 8種用Python實現線性回歸的方法
    為什麼我們還需要線性回歸呢?一方面,線性回歸所能夠模擬的關係其實遠不止線性關係。線性回歸中的「線性」指的是係數的線性,而通過對特徵的非線性變換,以及廣義線性模型的推廣,輸出和特徵之間的函數關係可以是高度非線性的。
  • 回歸系列(四)|一個完整的線性回歸是怎樣做的
    作者:丁點helper 來源:丁點幫你前面的文章主要介紹了回歸的一些關鍵詞,比如回歸係數、樣本和總體回歸方程、預測值和殘差等,今天我們結合一個案例來看看如何做完整的回歸分析,準確而言,是多重線性回歸(Multiple Linear Regreesion)。
  • 用Python的Scikit-Learn庫實現線性回歸
    在本文中,我們將簡要研究線性回歸是什麼,以及如何使用Scikit-Learn(最流行的Python機器學習庫之一)在兩個變量和多個變量的情況下實現線性回歸。線性回歸理論代數學中,術語「線性」是指兩個或多個變量之間的線性關係。如果在二維空間中繪製兩個變量之間的關係,可以得到一條直線。
  • Python數據科學:線性回歸
    本次介紹:線性回歸:多個連續變量與一個連續變量間的關係。其中線性回歸分為簡單線性回歸和多元線性回歸。/ 01 / 數據分析與數據挖掘資料庫:一個存儲數據的工具。/ 02 / 回歸方程01 簡單線性回歸簡單線性回歸只有一個自變量與一個因變量。含有的參數有「回歸係數」「截距」「擾動項」。其中「擾動項」又稱「隨機誤差」,服從均值為0的正態分布。線性回歸的因變量實際值與預測值之差稱為「殘差」。