僅用 8 行代碼即可建立一個線性回歸模型

2021-02-15 AI前線

我用 Python 理解並實現基本線性回歸模型的簡單指南。

本文最初發表在 Towards Data Science 博客,經原作者 Braden Riggs 授權,InfoQ 中文站翻譯並分享。

數學建模和機器學習常常會讓人感覺像是難以探索和學習的課題,尤其是對那些不熟悉計算機科學和數學領域的人來說尤為如此。我很驚訝地從我的非理工科的朋友那裡聽到,他們在自己的項目中嘗試使用基本的建模技術時感到不知所措,而且他們可能會陷入這個領域的語義中。這是一種恥辱,因為線性建模在許多情況下都是非常有用的,並且加上網際網路上的所有開放原始碼,實現自己的模型從未如此簡單過。因此,下面是我用 Python 理解並實現基本線性回歸模型的簡單指南。

線性回歸是一種數學建模的一種形式,通常用於評估因變量(如體重)和自變量(如身高)之間的關係。我們的大腦能夠很自然地做到這一點,只是以一種不太精確的方式而已。如果我讓你判定 189 釐米和 158 釐米的人哪個人體重更重,你可能會選擇 189 釐米的人。當然,158 釐米的人也可能會更重,但我敢打賭,在你與人交往的經歷中,你已經確定了人的身高與體重之間的某種關係。線性回歸就是建立這種關係並從中提取意義的一種精確的數學方法。

線性回歸的工作原理是通過創建一條最佳擬合線。最佳擬合線是最能捕捉 X 軸和 Y 軸之間關係的直線。例如,這種關係可以是,隨著「X」的增加,「Y」也會隨之增加:

隨著 X 增加,Y 也隨之增加。

或者,這種關係也可以是:隨著「X」增加,「Y」也隨之減少。

隨著 X 增加,Y 也隨之減少。

在上面的示例中,確定趨勢的大致方向是很容易的。但是,根據數據,它可能會變得更加複雜。此外,這條線的精確細節可能很難手工計算。在許多情況下,得到直線的精確方程會非常有幫助,使我們能夠理解這兩個變量之間的關係,並根據另一個變量的值來推測另一個變量的值。

為了使線性回歸有效發揮作用,你至少需要兩個變量:一個你認為可能是因變量的變量,如 NBA 球員的體重(以公斤為單位),另一個你認為可能是影響該因變量的變量,比如 NBA 球員的身高(以釐米為單位)。

一個 Pandas 數據幀,包含與 NBA 球員有關的各種數據點,其中包括身高和體重

如果這兩個變量都是連續的,那麼線性回歸的效果最好。我所說的連續是指兩個值之間有一個連續性。有些人的體重可以是 68.49 公斤,或 68.95 公斤,或 68.72 公斤,或 68.82 公斤,等等。這不同於離散的或分類變量(例如電影分級或課堂上給出的分數)。還有其他技術可以處理這些類型的數據,但我們現在將重點放在線性回歸。

身高和體重是連續變量素數之間建立線性關係的兩個完美示例。如果你使用的是 Python,請確保這兩個連續變量都是 浮點型 的,這將對後面的步驟有所幫助。

如果你有興趣使用已經清理過的數據集進行嘗試這一操作,你可以跟隨我正在使用的 NBA 數據集(可以在 這裡 找到)。

為了加載數據,我推薦使用 Python 的 Pandas 包:

import pandas as pd #Load the Pandas package
df = pd.read_csv("archive/all_seasons.csv") #Read the NBA file
df.head() #Display the NBA file's data

輸出應該與上面所示的表類似。

現在,我們已經加載了數據,讓我們來看看 NBA 球員的體重和身高之間的關係:

df.plot.scatter("player_height","player_weight", figsize=(15,10))

NBA 球員身高(X 軸)和體重(Y 軸)的散點圖。

除了一些離群值外,我們已經可以看到,NBA 球員的身高和體重之間存在著直接的相關性。正如我們上面所揭示的,線性回歸就像從圖的左邊到圖的右邊繪製出了一條最符合數據關係的直線。以我們的 NBA 球員為例,我們可以猜測,最佳擬合線應該是從 60 公斤左右的某處開始,然後向右上角移動。問題在於,我們人類遠遠不夠精確,無法繪製出一條能夠完美捕捉數據趨勢的直線。取而代之的是,讓我們使用一個工具。

Scikit-Learn,或稱 SKLearn,是一個 Python 包,包含了各種機器學習工具,其中有一種用於以簡單有效的方式構建線性回歸模型的工具。要使用 SKLearn,我們需要從 Pandas 數據幀中分離出兩個變量:

from sklearn import linear_model
#By calling to_numpy() we convert the series into a numpy array
#We then reshape the numpy array into a format parsable for sklearn
X = df["player_height"].to_numpy().reshape(-1, 1)
y = df["player_weight"].to_numpy().reshape(-1, 1)

我們的數據現在是 NumPy 數組格式。

正如你所見,「X」數組包含了所有的身高,「Y」數組包含了所有的體重。現在,我們可以對模型進行擬合了。在這種情況下,對模型進行擬合意味著我們正將數據呈現給函數,並允許 SKLearn 找到最能捕捉「X」和「Y」之間關係的直線。

#First we call the linear regression function from SKLearn linear_model
#Then using this object we fit the data to a linear model.
lm = linear_model.LinearRegression()
model = lm.fit(X,y)

現在模型已經擬合好,讓我們看看它產生了什麼樣的結果。

在我們的模型完成擬合之後,是時候看看它從我們提供的數據中建立了什麼。首先,讓我們看看它為數據評估的參數:

print(model.coef_) #prints the slope of the line
[1]: [[1.13557995]]
print(model.intercept_) #prints the intercept of the line
[2]: [-127.40114263]

對於熟悉數學的人來說,你可能還記得直線斜率的公式是 y = mx + b。在這種情況下,「b」是截距,可以認為是直線與 Y 軸相交的位置,而「m」是直線的斜率。因此,對於我們擬合的線性回歸模型,方程式大致為 y = 1.13x - 127.4。這意味著,「x」每增加一個數字,「y」就增加 1.13,或者更確切地說,球員身高每增加 1 釐米,球員的體重就應該增加 1.13 公斤。從視覺上看,如果我們在 NBA 球員身高和體重的散點圖上繪製出這條直線,我們就會得到:

import numpy as np #numpy can be used for creating a lsit of numbers
X = np.arange(150,250) # create a list of example values
#plot
df.plot.scatter("player_height","player_weight", figsize=(15,10)).plot(X, model.predict(X.reshape(-1,1)),color='k')

NBA 球員身高(X 軸)與體重(Y 軸)的散點圖,這一次包括我們的線性回歸模型創建的最佳擬合線。

在這種情況下,黑線是我們已經對數據擬合的直線。根據這條直線,我們可以推測,一個身高 180 釐米的球員大約在 70 公斤左右。但是,使用 SKLearn 和我們創建的模型,我們可以估算出:

model.predict(np.array(180).reshape(-1,1))
[3]: array([[77.00324856]])

因此,身高 180 釐米的球員應該大約有 77 公斤重。

現在這個模型已訓練好,你可以用任何值進行嘗試。下面是我在 NBA 的體重:

model.predict(np.array(188).reshape(-1,1))
[4]: array([[86.08788817]])

雖然這只是一個微不足道的例子,但線性回歸對於許多任務和項目都非常有用,因此,每個人都應該儘可能掌握線性回歸。我這個項目的完整代碼如下所示,我鼓勵你自己嘗試一下。另外,如果你還想了解更多有關信息,我在下面提供了一些參考資料。

import pandas as pd
from sklearn import linear_model
df = pd.read_csv("archive/all_seasons.csv")
X = df["player_height"].to_numpy().reshape(-1, 1)
y = df["player_weight"].to_numpy().reshape(-1, 1)
lm = linear_model.LinearRegression()
model = lm.fit(X,y)
model.predict(np.array(188).reshape(-1,1))

哇!只需 8 行代碼!!

延伸閱讀:

Braden Riggs,澳大利亞人,加利福尼亞大學聖地牙哥分校數據科學系留學生,GSI Technology 實習生。

原文連結:

https://towardsdatascience.com/a-guide-to-building-your-first-regression-model-in-just-8-lines-of-code-2d1a2a755811

相關焦點

  • 原理+代碼|Python實戰多元線性回歸模型
    其中多元共線性這個問題將貫穿所有的機器學習模型,所以本文會「將原理知識穿插於代碼段中」,爭取以不一樣的視角來敘述和講解「如何更好的構建和優化多元線性回歸模型」。原理其實非常簡單,將無法直接用於建模的名義變量轉換成可放入模型的虛擬變量的核心就短短八個字:「四散拆開,非此即彼」。下面用一個只有 4 行的微型數據集輔以說明。
  • 用 Python 進行多元線性回歸分析(附代碼)
    很多人在做數據分析時會經常用到一元線性回歸,這是描述兩個變量間統計關係的最簡單的回歸模型。但現實問題中,我們往往會碰到多個變量間的線性關係的問題,這時就要用到多元線性回歸,多元線性回歸是一元回歸的一種推廣,其在實際應用中非常廣泛,本文就用python代碼來展示一下如何用多元線性回歸來解決實際問題。圖1.
  • Python 實戰多元線性回歸模型,附帶原理+代碼
    其中多元共線性這個問題將貫穿所有的機器學習模型,所以本文會「將原理知識穿插於代碼段中」,爭取以不一樣的視角來敘述和講解「如何更好的構建和優化多元線性回歸模型」。主要將分為兩個部分:,這裡需要轉換一下,而多元線性回歸模型中類別變量的轉換最常用的方法之一便是將其轉化成虛擬變量。
  • 深度學習模型速成,三分鐘解決經典線性回歸模型(附完整代碼)
    每天給小編五分鐘,小編用自己的代碼,帶你輕鬆學習人工智慧!本文將會帶你做完一個深度學習進階項目,讓你熟練掌握線性回歸這一深度學習經典模型,然後在此基礎上,小編將在下篇文章帶你通過此模型實現對股票漲幅的預測。野蠻智能,小白也能看懂的人工智慧。線性回歸乾貨快遞點:線性回歸是什麼?
  • 模型之母:多元線性回歸
    0x00 前言 在線性回歸的前3篇中,我們介紹了簡單線性回歸這種樣本只有一個特徵值的特殊形式,並且了解了一類機器學習的建模推導思想,即:然後通過最優化損失函數或者效用函數,獲得機器學習的模型。然後我們推導並實現了最小二乘法,然後實現了簡單線性回歸。最後還以簡單線性回歸為例,學習了線性回歸的評價指標:均方誤差MSE、均方根誤差RMSE、平均絕對MAE以及R方。
  • 機器學習之多元線性回歸模型梯度下降公式與代碼實現(篇二)
    上一篇我們介紹了線性回歸的概述和最小二乘的介紹,對簡單的一元線性方程模型手推了公式和python代碼的實現。機器學習之線性回歸模型詳細手推公式與代碼實現(篇一)今天這一篇來介紹多元線性回歸模型多元線性回歸模型介紹在回歸分析中,如果有兩個或兩個以上的自變量,就稱為多元回歸
  • [PRML]回歸模型--貝葉斯線性回歸
    獨立的持有(hold-out)數據可以用來確定模型的複雜性,但是這可能在計算上是昂貴的,並且會浪費有價值的數據。因此我們轉向線性回歸的貝葉斯處理,這將避免最大似然的過擬合問題,也將導致僅使用訓練數據自動確定模型複雜度的方法。
  • 如何用線性回歸模型做數據分析?
    編輯導語:在日常工作中,很多時候都會用到數據分析的方法,線性回歸模型看起來非常簡單,但實際上它的十分重要;本文作者分享了關於如何用線性回歸模型做數據分析的方法,我們一起來學習一下。一、什麼是線性回歸線性回歸是利用線性的方法,模擬因變量與一個或多個自變量之間的關係;對於模型而言,自變量是輸入值,因變量是模型基於自變量的輸出值,適用於x和y滿足線性關係的數據類型的應用場景。
  • 多元線性回歸的模型解釋、假設檢驗、特徵選擇
    線性回歸是最流行和討論最多的模型之一,它無疑是深入機器學習(ML)的入門之路。這種簡單、直接的建模方法值得學習,這是進入ML的第一步。在繼續討論之前,讓我們回顧一下線性回歸可以大致分為兩類。簡單線性回歸:當只有一個輸入變量時,它是線性回歸最簡單的形式。
  • 機器學習:回歸分析——多元線性回歸分析
    生活中的現象常常是與多個因素相聯繫的,由多個自變量的最優組合共同來預測或估計因變量,比只用一個自變量進行預測或估計更有效,更符合實際。所以相比一元線性回歸,多元線性回歸的實際意義更大。分析完熱力圖後,將全部變量(X1~X8)作為自變量,Y1作為因變量進行多元線性回歸分析模型的建立,代碼如下:formula = "Y1 ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8"lm = smf.ols(formula, Enb).fit()print(lm.summary())
  • 8 種進行簡單線性回歸的方法分析與討論
    除此之外,我們還可以使用該庫的 pipeline 與 FeatureUnion 功能(如:數據歸一化、模型回歸係數正則化、將線性模型傳遞給下遊模型),但是一般來看,如果一個數據分析師僅需要一個又快又簡單的方法來確定回歸係數(或是一些相關的統計學基本結果),那麼這並不是最快或最簡潔的方法。 雖然還存在其他更快更簡潔的方法,但是它們都不能提供同樣的信息量與模型靈活性。
  • Python環境下的8種簡單線性回歸算法
    除此之外,我們還可以使用該庫的 pipeline 與 FeatureUnion 功能(如:數據歸一化、模型回歸係數正則化、將線性模型傳遞給下遊模型),但是一般來看,如果一個數據分析師僅需要一個又快又簡單的方法來確定回歸係數(或是一些相關的統計學基本結果),那麼這並不是最快或最簡潔的方法。
  • 零基礎的同學如何用stata做一元線性回歸模型?
    stata軟體越來越受研究生的喜歡,很多研究生在做統計研究、學術分析的時候,也多選用此軟體。網上有關stata的教程有很多,但對於沒有基礎的同學來說,學起來稍微就有些吃力了。那麼,零基礎的同學應該如何學習呢?如何用stata做出滿意的一元線性回歸模型呢 ?
  • 零基礎的同學如何用stata做多元線性回歸模型?
    上一期,我們分享了如何用stata做一元線性回歸模型,不知道同學們學的怎麼樣呢?有沒有自己動手操作一遍呢?這一期:我們將學習如何用stata做多元線性回歸模型!這些是小王(邀請者)最近學習計量時的一些心得和體會,希望能與大家一起分享。
  • Excel中的預測建模–如何從頭開始創建線性回歸模型
    當我演示如何利用Excel的靈活特性為我們的數據科學和分析項目構建預測模型時,將以一種難以置信的眼神。讓我問一個問題-您周圍的商店是否開始收集客戶數據,他們是否可以採用基於數據的策略來銷售商品?他們可以預測其銷售量或估計可能銷售的產品數量嗎?現在,您一定想知道他們將如何建立一個可以預測這些事情的複雜統計模型?學習分析或僱用分析師可能超出了他們的範圍。
  • 線性模型(一)普通線性回歸到廣義線性模型
    同時提醒讀者避免只從字面理解「線性」帶來誤會,即線性模型只能解決線性問題。本章將線性模型定位和表述為在數學表達式上具有線性的表示方式的數學模型,包含普通線性回歸模型和廣義線性模型(線性支持向量機本章不進行講述)。
  • 權重不確定的概率線性回歸
    線性回歸是一種基本的統計方法,用來建立一個或多個輸入變量(或自變量)與一個或多個輸出變量(或因變量)之間的線性關係。接下來,讓我們繼續使用TensorFlow構建我們的確定性線性回歸模型。基於TensorFlow的確定性線性回歸用TensorFlow建立一個簡單的線性回歸模型是非常容易的。我們所需要做的就是建立一個沒有任何激活函數的單一全連接層模型。對於成本函數,通常使用均方誤差。
  • [PRML]線性回歸模型--線性基函數模型
    這通常稱為線性回歸(linear regression)。多項式回歸就是這個模型的一個特例,基函數是『tanh』函數的線性組合。在監督學習中如回歸和分類,我們不是尋找輸入變量的分布模型。如果數據集足夠大,那麼使用順序算法(sequential algorithms)可能是值得的,也稱為在線算法(on-line algorithms),在這種算法中,每次考慮一個數據點,並在每次這樣的展示後更新模型參數。順序學習也適用於實時應用,在這種應用中,數據觀察是在一個連續的流中到達的,並且必須在看到所有數據點之前做出預測。
  • spss多元線性回歸模型 - CSDN
    多元線性回歸,主要是研究一個因變量與多個自變量之間的相關關係,跟一元回歸原理差不多,區別在於影響因素(自變量)更多些而已,例如:一元線性回歸方程 為:毫無疑問,多元線性回歸方程應該為:上圖中的 x1,  x2, xp分別代表「自變量」Xp截止,代表有P個自變量
  • 8種用Python實現線性回歸的方法,究竟哪個方法最高效?
    執行線性回歸,大部分人會立刻想到用sklearn的linear_model,但事實是,Python至少有8種執行線性回歸的方法,sklearn並不是最高效的。在這篇文章中,文摘菌將介紹8種用Python實現線性回歸的方法。了解了這8種方法,就能夠根據不同需求,靈活選取最為高效的方法實現線性回歸。