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

2021-01-11 專知

【導讀】本文是一篇專門介紹線性回歸的技術文章,討論了機器學習中線性回歸的技術細節。線性回歸核心思想是獲得最能夠擬合數據的直線。文中將線性回歸的兩種類型:一元線性回歸和多元線性回歸,本文主要介紹了一元線性回歸的技術細節:誤差最小化、標準方程係數、使用梯度下降進行優化、殘差分析、模型評估等。在文末給出了相關的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),加入專知主題人工智慧群交流!

相關焦點

  • 線性回歸分析詳解10(完結篇):線性回歸分析預測的十大步驟
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第10章,這是本專欄的最後一章,是專欄的完結篇:用線性回歸分析做預測,多元線性回歸分析預測的十大步驟。線性回歸分析專格欄總目錄請見上圖,前9章,我分別講述了回歸分析及與回分析相關的概念,一元、多元線性回歸分析的公式與計算方法,以及多重共線性、回歸方程的精度、顯著性驗證和置信區間等進行回歸分析的重要步驟及其計算方法。至此,以回歸分析進行需求預測的各項知識點及各項準備工作全部完成,我們可以正式的以回歸分析進行需求預測。
  • 簡單線性回歸模型
    2 基礎回顧回歸的概念來源於實際問題,那麼現在我們所說的線性回歸分析問題具體指的是什麼呢?3 求解線性回歸模型函數3.1 極大似然法最小二乘法和極大似然法都可以用來求解線性回歸模型,我們在往期文章中討論過最小二乘法,這裡對似然法進行簡單介紹。
  • 簡單線性回歸(二)
    線性回歸相關知識:簡單線性回歸(一)線性回歸步驟線性回歸需滿足的條件①因變量Y與自變量X呈線性關係②每個個體觀察值之間互相獨立③在一定範圍內,任意給定X值,其對應的隨機變量Y均服從正態分布④在一定範圍內,不同X值所對應的隨機變量Y的方差相等某研究者測量了16名成年男子的體重(Kg)和臀圍(cm)數據,欲探求成年男子的體重與臀圍是否可以建立線性回歸模型。
  • 簡單線性回歸(一)
    回歸分析(regression analysis )是研究一個變量如何隨另一些變量變化的方法。例如,學習成績會受努力的時間,方法,個人的智慧,教育資源等因素影響;疾病的發生與生活環境,方式,遺傳因素,自身體質等影響。常見的回歸分析有 線性回歸、非線性回歸、多重線性回歸、Logistic回歸等等。
  • 簡單線性回歸分析
    我們還是採用之前的數據,介紹SPSS進行線性回歸分析的具體步驟。 打開上節保存的」Pearson相關性分析.sav」文件選擇【分析】→【回歸】→【線性】以『體重』為因變量,『身高』為自變量,在彈出的【線性回歸】對話框中,將『體重』納入【因變量】,『身高』納入【自變量】【方法】下來菜單中選擇【進入】(『進入』的意思是,將全部變量一次性納入回歸方程,這裡只有一個變量
  • SPSS|簡單線性回歸(一)
    即,本研究中簡單線性回歸的觀測值具有相互獨立性,滿足假設4。但不得不說,Durbin-Watson檢驗不是萬能的。它僅適用於對鄰近觀測值相關性的檢驗(1st-order autocorrelation)。舉例來說,我們一般按照調查順序錄入數據,將第一位受試者錄入到第一行,再將第二位受試者錄入到第二行。
  • 7種執行簡單的線性回歸的分析與討論!
    由於scikit-learn是一種免費的機器學習庫,它具有回歸、分類、聚類、模型選擇和降維等功能,所以常用的方法是從該庫調用線性模型類並擬合數據。雖然這可以為應用機器學習的其他流水線特性(例如數據規範化,模型係數正則化,將線性模型提供給另一個下遊模型)提供額外的優勢,但這通常不是確定回歸係數(和一些基本的相關統計)最快或最乾淨、簡單的方法。
  • SPSS-線性相關與多重線性回歸
    對服從正態分布的定量資料,我們探討線性相關,對計數和等級資料,我們探討秩相關,今天的內容,便是定量資料的相關與回歸。1 簡單線性相關與回歸:例:探討身高與前臂長的相關性① 繪製散點圖(直觀的反應兩者關係):② 求相關係數(兩變量相關關係的方向及密切程度):
  • 線性回歸
    1、標準化對於多元線性回歸需要對各個自變量進行標準化,排除單位的影響。標準化方法:即將原始數據減去相應變量的均數後再除以該變量的標準差,而標準化得到的回歸方程稱為標準化回歸方程,相應得回歸係數為標準化回歸係數。
  • 多元線性回歸分析:納入多元回歸自變量的確定及求解多元回歸方程
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第五章,多元線性回歸分析:如何求解多元線性回歸方程。在前面的章節中我講到,實際需求預測場景中,通常,影響需求的因素不止一個,對需求影響的因素可能多種多樣,也就是說自變量多種多樣,很少能用單一的變量(也即一元線性回歸分析)來做好需求預測。這時,我們需要用到多元線性回歸分析。回歸分析在需求預測的應用,也主要是多元線性回歸分析。對需求預測而言,多元線性回歸更具有實用性和有效性。
  • 【線性回歸】多變量分析:多元回歸分析
    實際上大部分學習統計分析和市場研究的人的都會用回歸分析,操作也是比較簡單的,但能夠知道多元回歸分析的適用條件或是如何將回歸應用於實踐,可能還要真正領會回歸分析的基本思想和一些實際應用手法!下面我們就來談談多元回歸分析,這張圖是利用多元線性回歸製作的策略分析圖,你可以理解X軸是重要性,Y軸是表現;首先,多元回歸分析應該強調是多元線性回歸分析!
  • Python環境下的8種簡單線性回歸算法
    選自Medium作者:Tirthajyoti Sarkar機器之心編譯參與:晏奇、劉曉坤本文中,作者討論了 8 種在 Python 環境下進行簡單線性回歸計算的算法,不過沒有討論其性能的好壞,而是對比了其相對計算複雜度的度量。
  • 線性回歸模型
    回歸問題就是擬合輸入變量x與數值型的目標變量y之間的關係,而線性回歸就是假定了x和y之間的線性關係,公式如下:          如下圖所示,我們可以通過繪製繪製(x,y)的散點圖的方式來查看x和y之間是否有線性關係,線性回歸模型的目標是尋找一條穿過這些散點的直線,讓所有的點離直線的距離最短。
  • 8 種進行簡單線性回歸的方法分析與討論
    8 種進行簡單線性回歸的方法分析與討論 Tirthajyoti Sarkar 發表於 2018-01-05 08:18:57 本文中,作者討論了 8 種在 Python 環境下進行簡單線性回歸計算的算法,不過沒有討論其性能的好壞
  • 機器學習的線性回歸分析
    打開APP 機器學習的線性回歸分析 是DRR啊 發表於 2020-01-23 17:33:00 概述 線性回歸是利用數理統計中回歸分析
  • Python數據科學:線性回歸
    本次介紹:線性回歸:多個連續變量與一個連續變量間的關係。其中線性回歸分為簡單線性回歸和多元線性回歸。/ 01 / 數據分析與數據挖掘資料庫:一個存儲數據的工具。/ 02 / 回歸方程01 簡單線性回歸簡單線性回歸只有一個自變量與一個因變量。含有的參數有「回歸係數」「截距」「擾動項」。其中「擾動項」又稱「隨機誤差」,服從均值為0的正態分布。線性回歸的因變量實際值與預測值之差稱為「殘差」。
  • 線性回歸分析詳解7:多元回歸方程的精度,R平方與調整後的R平方
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第七章,回歸方程的精度,R平方與調整後的R平方。多元線性回歸分析,我們在求出多元線性回歸方程後,這個方程到底怎麼樣,能不能起到效果,需要對求出的回歸方程進行一系列評價和評估。這些評價和評估,首先要做的,是確認回歸方程的精度。本章,我將分如下三個小節講述回歸方程的精度,歡迎閱讀與探討。我的《線性回歸分析》專欄總目錄見下圖。
  • 線性回歸分析思路總結!簡單易懂又全面!
    線性回歸是一種研究影響關係的方法,在實際研究裡非常常見。本文就來梳理下線性回歸分析的分析流程,閒話少說,我們開始吧!線性回歸回歸分析實質上就是研究一個或多個自變量X對一個因變量Y(定量數據)的影響關係情況。
  • 入門機器學習之線性回歸
    回歸分析是研究相關關係的是一種數學工具,是用一個變量取得的值去估計另一個變量所取得的值。回歸分析按照涉及的變量的多少,分為一元回歸和多元回歸分析;按照因變量的多少,可分為簡單回歸分析和多重回歸分析;按照自變量和因變量之間的關係類型,可分為線性回歸分析和非線性回歸分析。
  • 範例分析:多元線性回歸分析
    基礎回顧簡單線性和多元線性回歸理論基礎請回顧:相關與回歸分析基礎;一元(簡單線性)相關分析與回歸分析