線性回歸:簡單線性回歸詳解

2021-02-20 專知

【導讀】本文是一篇專門介紹線性回歸的技術文章,討論了機器學習中線性回歸的技術細節。線性回歸核心思想是獲得最能夠擬合數據的直線。文中將線性回歸的兩種類型:一元線性回歸和多元線性回歸,本文主要介紹了一元線性回歸的技術細節:誤差最小化、標準方程係數、使用梯度下降進行優化、殘差分析、模型評估等。在文末給出了相關的GitHub地址。

Linear Regression — Detailed View

詳細解釋線性回歸

線性回歸用於發現目標與一個或多個預測變量之間的線性關係。 有兩種類型的線性回歸 – 一元線性回歸(Simple)和多元線性回歸(Multiple)。

一元線性回歸

一元線性回歸對於尋找兩個連續變量之間的關係很有用。一個是預測變量或自變量,另一個是響應或因變量。它尋找統計關係而不是確定性關係。如果一個變量可以被另一個變量精確地表達,那麼兩個變量之間的關係被認為是確定性的。例如,使用攝氏度的溫度,可以準確地預測華氏溫度。統計關係在確定兩個變量之間的關係時並不準確,例如,身高和體重之間的關係。

線性回歸核心思想是獲得最能夠擬合數據的直線。擬合度最高的直線是總預測誤差(所有數據點)儘可能小的直線。誤差是用在原始點以及預測點之間的距離來衡量。

完整代碼:

https://github.com/SSaishruthi/Linear_Regression_Detailed_Implementation


實例

我們有一個數據集,其中包含有關「學習小時數」與「獲得的分數」之間關係的信息。已經觀察到許多學生,並記錄他們的學習時間和成績。這將是我們的訓練數據。目標是設計一個模型,給定學習時間可以預測成績。使用訓練數據,獲得將會給出最小誤差的回歸線。然後這個線性方程可以用於任何新的數據。也就是說,如果我們將學習時間作為輸入,我們的模型應該以最小誤差預測它們的分數。

Y(pred)= alpha + beta * x

為了使誤差最小化,必須確定alpha和beta。如果平方誤差和被用作評估模型的度量,目標是獲得最小化這個誤差的直線。

如果我們不對這個錯誤進行平方,那么正面和負面的樣本誤差就會相互抵消。

為了估計模型的參數alpha和beta,我們已知一組樣本(yi, xi)(其中i=1,2,…,n),其計算的目標為最小化殘差平方和:

使用微分法求極值:將上式分別對alpha 和 beta 做一階偏微分,並令其等於0:

此二元一次線性方程組可用克萊姆法則求解,得解

探索

• 如果> 0,則x(預測變量)和y(目標)具有正相關關係,y隨x的增加而增加。

• 如果 <0,則x(自變量)和y(目標)具有負相關關係,y隨x的增加而減少。

 

探索

• 如果沒有這個項,那麼擬合線將超過原點。 回歸係數和預測都會有偏差。偏置補償了目標值y的平均值(在訓練集)與自變量x平均值和的乘積之間的偏差。

標準方程係數(Co-efficient from Normal equations)

 

除了上述方程外,模型的係數也可以用標準方程計算。

Theta包含所有預測因子的係數,包括常數項。 標準方程通過對輸入矩陣取逆來執行計算。 隨著函數數量的增加,計算的複雜性將會增加。 當樣本特徵維數變大時,求逆會比較耗時。

下面是方程的python實現。

def theta_calc(x_train, y_train):
#Initializing all variables
   n_data = x_train.shape[0]
bias = np.ones((n_data,1))
x_train_b = np.append(bias, x_train, axis=1)
#
   theta_1 = np.linalg.inv(np.dot(x_train_b.T,x_train_b))
theta_2 = np.dot(theta_1, x_train_b.T)
theta = np.dot(theta_2,y_train)
#
   return theta

使用梯度下降進行優化

標準方程的複雜性使其難以使用,可以使用梯度下降進行優化。 對損失函數求偏導數,並給出參數的最優係數值。

梯度下降的Python代碼


#gradient descent
def grad_descent(s_slope, s_intercept, l_rate, iter_val, x_train, y_train):

for i in range(iter_val):
int_slope = 0
       int_intercept = 0
       n_pt = float(len(x_train))


for i in range(len(x_train)):
int_intercept = - (2/n_pt) * (y_train[i] - ((s_slope * x_train[i]) +
s_intercept))
int_slope = - (2/n_pt) * x_train[i] * (y_train[i] - ((s_slope * x_train[i]) +
s_intercept))

final_slope = s_slope - (l_rate * int_slope)
final_intercept = s_intercept - (l_rate * int_intercept)
s_slope = final_slope
s_intercept = final_intercept


return  s_slope, s_intercept

殘差分析

隨機性和不可預測性是回歸模型的兩個主要組成部分。

預測=確定性+統計(Prediction = Deterministic + Statistic)

確定性部分由模型中的預測變量覆蓋。隨機部分揭示了預期和觀測值不可預測的事實。總會有一些信息被忽略。這些信息可以從殘差信息中獲得。

我們通過一個例子來解釋殘差的概念。考慮一下,我們有一個數據集,可以預測給定當天氣溫,其果汁的銷售量。從回歸方程預測的值總會與實際值有一些差異。銷售額與實際產出值不完全匹配。這種差異稱為residue

殘差示意圖有助於使用殘差值分析模型。它在預測值和residue之間進行繪製。它們的值是標準化的,該點與0的距離指定了該值的預測有多糟糕。如果該值為正值,則預測值較低。如果該值是負值,那麼預測值很高。 0值表示完美的預測。檢測殘差模式可以改善模型。

殘差的特徵

• 殘差不代表任何模式

• 相鄰的殘差不應該是相同的,因為它們表明系統漏掉了一些信息。

殘差示意圖的實現和細節

#Residual plot
plt.scatter(prediction, prediction - y_test, c='g', s = 40)
plt.hlines(y=0, xmin=0, xmax=100)
plt.title('Residual plot')
plt.ylabel('Residual')

模型評估

該值的範圍從0到1。值「1」表示預測變量完全考慮了Y中的所有變化。值「0」表示預測變量「x」在「y」中沒有變化。

總平方和SST (sum of squares for total) 是:

其中

2,回歸平方和SSR (sum of squares for regression)

 

 3,殘差平方和SSE (sum of squares for error) 是:

 

4,總平方和SST又可寫做SSReg和SSE的和:

Python 實現


def rsq(prediction, y_test):
#
   total_data = len(prediction)
#Average of total prediction
   y_avg = np.sum(y_test)/total_data
#total sum of square error
   tot_err = np.sum((y_test-y_avg)**2)
#total sum of squared error of residuals
   res_err = np.sum((y_test-prediction)**2)
#
   r2 = 1 - (res_err / tot_err)
return r2 


#defining slope and intercept value as 0
learning_rate = 0.001
start_slope = 0
start_intercept = 0
iteration = 102
#intial run
grad_slope, grad_intercept = grad_descent(start_slope, start_intercept, learning_rate,
iteration, x_train, y_train)
final_e_value, prediction = mse_calc(grad_slope, grad_intercept, x_test, y_test)
#
print('Slope of the model', grad_slope)
print('Intercept of the model', grad_intercept)
print('Error value of the model', final_e_value)
r2_val = rsq(prediction, y_test)
print('R squared value', r2_val)
#Graph
plt.scatter(x_test, y_test)
plt.plot(x_test, prediction, color='blue', linewidth = 3)
plt.xlabel("Input")
plt.ylabel("Output")
plt.show()

獲得回歸線:

完整代碼:

https://github.com/SSaishruthi/Linear_Regression_Detailed_Implementation

參考連結:https://towardsdatascience.com/linear-regression-detailed-view-ea73175f6e86

人工智慧領域主題知識資料查看獲取【專知薈萃】人工智慧領域26個主題知識資料全集(入門/進階/論文/綜述/視頻/專家等)

同時歡迎各位用戶進行專知投稿,詳情請點擊

誠邀】專知誠摯邀請各位專業者加入AI創作者計劃了解使用專知!

請PC登錄www.zhuanzhi.ai或者點擊閱讀原文,註冊登錄專知,獲取更多AI知識資料

請掃一掃如下二維碼關注我們的公眾號,獲取人工智慧的專業知識!

請加專知小助手微信(Rancho_Fang),加入專知主題人工智慧群交流!

相關焦點

  • 利用python實現簡單的線性回歸
    當我說簡單的線性回歸,你在想什麼?讓我猜猜:當我說簡單線性回歸的時候,也許我以上的分析你都猜測過,也許上述假設在技術上是合理的。但有一個特別的理由稱之為簡單的線性回歸。首先,讓我們來了解為什麼我們稱之為簡單的線性回歸。然後我們可以開始我最喜歡的部分,在python中編寫簡單的線性回歸。
  • 計量筆記 | 簡單線性回歸
    簡單線性回歸總體回歸函數(PRF)與樣本回歸函數(SRF)可使用蒙特卡洛法進行模擬,所謂「蒙特卡羅法」(Monte Carlo Methods,MC),是通過計算機模擬,從總體抽取大量隨機樣本的計算方法。
  • 第三天:線性回歸
    下面再回到今天的問題,「線性回歸」就是指用線性模型來解決回歸問題。線性模型是指自變量例如自變量是房屋面積,因變量是房屋價格,我們可以簡單判斷,房屋價格隨房屋面積的增大而增加。因此,所謂的線性模型就是找到一條直線來擬合已有的數據。因為線性分類更加直觀,我們以一個簡單的案例來了解這個問題,這是一個遊戲公司對目標推廣人群進行分析,橫軸是目標用戶的年齡,縱軸是每天玩遊戲的時間長度,紅色用戶代表喜歡玩遊戲,藍色用戶代表不喜歡玩遊戲,那麼如何判斷綠色用戶是否喜歡玩遊戲呢?
  • python線性回歸
    一.理論基礎1.回歸公式  對於單元的線性回歸,我們有:f(x) = kx + b 的方程(k代表權重,b代表截距)。
  • 線性回歸
    根據給定數據,用線性回歸方法擬合數據。從本周19教技學生作業來看,第1、5、7、8、10組同學完成的不錯。以下是她們各組整合後的代碼。
  • python|線性回歸問題
    線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法。可以解釋為,利用線性回歸方程的最小平方函數對一個或多個自變量和因變量之間的關係進行數學建模。這種函數是一個或多個稱為回歸係數的模型參數的線性組合。
  • 多重線性回歸分析
    指描述一個因變量與多個自變量的依存關係的回歸分析,其基本形式為:x1,…,xp為p個自變量,β0為常數項,β1,…,βp為偏回歸係數,ε為隨機誤差,又稱為殘差,是y的變化中不能用自變量解釋的部分。 通過樣本估計的多重線性回歸方程:
  • 多元線性回歸分析
    在線性回歸中,殘差是一個非常重要的概念,它是估計值與觀測值之差,表示因變量中除了分析的自變量外其他所有未進入模型的因素引起的變異,即不能由分析自變量估計的部分,在圖形上表示觀測值到擬合線的距離(注意不是垂直於擬合線的距離)。適用條件(1)線性趨勢。
  • Python環境下的8種簡單線性回歸算法
    但是,由於該函數的目的是為了執行專門的任務,所以當我們遇到簡單的線性回歸分析時,這是最快速的方法之一。除了已擬合的係數和截距項(intercept term)外,它還會返回基本的統計學值如 R² 係數與標準差。
  • TensorFlow與PyTorch — 線性回歸
    在本練習中,將展示使用這兩個框架實現的最簡單的神經網絡(線性回歸)並比較其結果。起源PyTorch是基於Torch庫的開源機器學習庫。PyTorch主要由Facebook的AI研究實驗室(FAIR)開發。它是一個免費的開源軟體。
  • 機器學習套路:線性回歸
    (點擊上方藍字,快速關注我們)轉自:sharkdtuhttp://sharkdtu.com/posts/ml-linear-regression.html好文投稿, 請點擊 → 這裡了解詳情線性回歸可以說是機器學習中最簡單
  • 對線性回歸,logistic回歸和一般回歸的認識
    前四節主要講述了回歸問題,回歸屬於有監督學習中的一種方法。該方法的核心思想是從連續型統計數據中得到數學模型,然後將該數學模型用於預測或者分類。該方法處理的數據可以是多維的。講義最初介紹了一個基本問題,然後引出了線性回歸的解決方法,然後針對誤差問題做了概率解釋。之後介紹了logistic回歸。最後上升到理論層次,提出了一般回歸。
  • 線性回歸進階——嶺回歸和lasso回歸
    說起線性回歸大家肯定都不陌生,我們經常用這種手段來揭示一組變量間的相關性,一般情況下,我們用線性函數來對數據做出擬合,通過殘差來計算差異度
  • 機器學習理論 | 第三章 線性回歸之單變量線性回歸
    3.1 單變量線性回歸 Linear Regression with One Variable3.1.1 模型表示在監督學習裡,我們有一個數據集,被稱為「訓練集」,✍ 我們需要使用一些符號:m:表示訓練樣本的數量 Number of training
  • Python數據科學 | 線性回歸診斷
    Python數據科學:線性回歸多元線性回歸的前提條件:/ 01 / 殘差分析殘差分析是線性回歸診斷的重要環節。殘差應服從的前提條件有三個:殘差方差齊性殘差獨立同分布殘差不能和自變量相關(不能檢驗)通過查看殘差圖來查看殘差情況。
  • 一元線性回歸分析
    回歸模型最重要的兩個應用場景就是預測分析和因果關係分析,比如我們上學的時候學過的一元一次方程組y = kx + b就是一個最簡單的回歸模型,當我們知道一個x時,比如此時的x是月份,就可以通過方程求出這個這個x對應的y,這裡的y可以是銷量,這個通過x求取y的過程就是一個預測的過程。回歸模型主要分為一元線性回歸和多元線性回歸,這一節先給大家講一下一元線性回歸。
  • SPSS:簡單線性回歸分析(圖文案例)
    線性回歸是用直線回歸方程表示兩個數量變量間依存關係的統計分析方法。如果某一個變量隨著另一個變量的變化而變化,並且它們的變化在直角坐標系中呈直線趨勢,就可以用一個直線方程來定量地描述它們之間的數量依存關係。線性回歸分析中兩個變量的地位不同,其中因變量(y)是依賴自變量(x)而變化。
  • 邏輯回歸or線性回歸,傻傻分不清楚
    線性回歸作為一種常用的關聯分析工具,其功能強大,解釋度高,但是其缺點也是很明顯的。其只適用於處理連續型的變量,無法處理離散型的變量,比如對於case/control的實驗設計,患病與否的臨床信息,線性回歸就無能無力了,此時我們就需要另外一種方法-邏輯回歸。線性回歸是屬於回歸分析的一種,從名稱上來,邏輯回歸好像也屬於回歸分析,其實不然。
  • SPSS分析技術:線性回歸分析
    回歸分析類型回歸分析根據自變量個數,自變量冪次以及變量類型可以分為很多類型,常用的類型有:線性回歸;曲線回歸;二元Logistic回歸技術;線性回歸原理回歸分析就是建立變量的數學模型,建立起衡量數據聯繫強度的指標,並通過指標檢驗其符合的程度。線性回歸分析中,如果僅有一個自變量,可以建立一元線性模型。
  • Excel中的數據預測——線性回歸預測
    今天我們來了解下Excel中數據預測的一種方法:線性回歸預測。首先理解下什麼是線性回歸預測,其實很簡單,就是尋找自變量和因變量之間的關係,建立二者之間的線性回歸方程,然後利用此方程進行預測。說白了就是大家初中時就學過的二元一次方程:y=kx+a如果你的已知數據符合線性趨勢或者趨近於線性趨勢,那就可以用線性回歸法進行預測。比如:以上案例中,通過前五年的數據發現使用年限和機器的損耗率明顯呈現線性關係,要預測第6年機器的損耗率,用Excel中的FORECAST.LINEAR函數即可。