線性回歸(Linear Regression)的理解及原理


線性回歸的基本含義

  在統計學中,線性回歸(Linear Regression)是利用稱為線性回歸方程的最小平方函數對一個或多個 自變量因變量之間關系進行建模的一種 回歸分析。這種函數是一個或多個稱為回歸系數的模型參數的線性組合。只有一個自變量的情況稱為簡單回歸,大於一個自變量情況的叫做多元回歸。(這反過來又應當由多個相關的因變量預測的多元線性回歸區別,而不是一個單一的標量變量。)
  在線性回歸中,數據使用線性預測函數來建模,並且未知的模型參數也是通過數據來估計。這些模型被叫做線性模型。最常用的線性回歸建模是給定X值的y的條件均值是X的仿射函數。不太一般的情況,線性回歸模型可以是一個中位數或一些其他的給定X的條件下y的條件分布的分位數作為X的線性函數表示。像所有形式的回歸分析一樣,線性回歸也把焦點放在給定X值的y的條件概率分布,而不是X和y的聯合概率分布(多元分析領域)。
  例如,房子的面積  x與房子的價格 y具有一定的線性關系,也就是說,我們可以畫出能夠大致表示 x與 y關系的一條直線,如下圖:

  在該直線中,房子的面積 x為自變量,房子的價格 y為因變量。而“線性回歸”的目的就是,利用自變量 x與因變量 y,來學習出這么一條能夠描述兩者之間關系的對於一元線性回歸來說就是學習出一條直線,而對於多元線性回歸來說則是學習出一個超平面

 

一元線性回歸模型

在概念上理解了線性回歸是什么之后,我們就需要將線性回歸的問題進行抽象化,轉換成我們能夠求解的數學問題。
在上面的例子中,我們可以看出自變量 x與因變量 y致成線性關系,因此我們可以對因變量做如下假設(hypothesis):

 

或者記作:

      其中 i=1,2,...,mi=1,2,...,m
   在這里使用是由於通過觀察,我們可以發現直線並沒有完全擬合數據,而是存在一定的誤差。該假設即為一元線性函數的模型函數,其中含有兩個參數。其中可視為斜率, 直線在y 軸上的截距。接下來的任務就是如何求得這兩個未知參數。

優化算法

在這里我們將使用兩種方法進行參數的求解:(1)最小二乘法(2)梯度下降法

1、最小二乘法

  最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。

 

 

 

 簡單推導過程:

 

 2、梯度下降法

  如下圖所示,將梯度下降的原理形象地描述為下山,直到獲得一個局部或者全局最小值。在每次迭代中,根據給定的學習速率和梯度的斜率,能夠確定每次移動的步幅,按照步幅沿着梯度方向前進一步。

 

簡單代碼實現如下:

 1 class LinearModel(object):
 2     def __init__(self):
 3 #       初始值
 4         self.w = np.random.randn(1)[0]
 5         self.b = np.random.randn(1)[0]
 6         
 7     def model(self,x):#線性模型
 8         return self.w * x + self.b
 9     
10     def cost(self,x,y):
11         c = (self.model(x) - y)**2
12 #       偏導數(包含導數) = 梯度
13         dw = 2*(self.model(x) - y)*x
14         db = 2*(self.model(x) - y)*1
15         return c,dw,db
16 #       梯度下降更新數據
17     def gradient_descent(self,dw,db,step):
18         self.w -= dw*step
19         self.b -= db*step
20         
21     def fit(self,X,y):
22         w_last = self.w + 0.1
23         b_last = self.b + 0.1
24         length = len(X)
25         count = 1
26         while True:
27             if (abs(self.w - w_last) < 1e-4) and (abs(self.b - b_last) < 1e-4):
28                 print('*********************')
29                 break
30             cost_ = 0
31             derivative_w = 0
32             derivative_b = 0
33             for xi,yi in zip(X,y):
34                 c_,dw_,db_ = self.cost(xi[0],yi)# 求解的是每一個樣本的損失、w偏導、b偏導
35                 cost_ += c_/length
36                 derivative_w += dw_/length
37                 derivative_b += db_/length
38 #           cost_、derivative_w、derivative 整體的損失,偏導
39             w_last = self.w
40             b_last = self.b
41 
42             self.gradient_descent(derivative_w,derivative_b,0.01)
43 
44             print('--------------------------------梯度下降更新次數是:%d。損失是:%0.4f'%(count,cost_))
45             count +=1
46             
47         print('++++++++++++++++++++++++++++++++++梯度下降計算的斜率是:%0.4f。計算的截距是:%0.4f'%(self.w,self.b))
48 
49 linear_model = LinearModel()
50 linear_model.fit(X,y)

 

 

線性回歸算法的優缺點

優點:

    (1)思想簡單,實現容易。建模迅速,對於小數據量、簡單的關系很有效;
    (2)是許多強大的非線性模型的基礎。
    (3)線性回歸模型十分容易理解,結果具有很好的可解釋性,有利於決策分析。
    (4)蘊含機器學習中的很多重要思想。
    (5)能解決回歸問題。

缺點:

    (1)對於非線性數據或者數據特征間具有相關性多項式回歸難以建模.
    (2)難以很好地表達高度復雜的數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM