為什么我們需要學習線性回歸呢?
線性回歸是解決回歸類問題最常使用的演算法模型,其演算法思想和基本原理都是由多元統計分析發展而來,但在資料挖掘和機器學習領域中,也是不可多得的行之有效的演算法模型,一方面,線性回歸蘊藏的機器學習思想非常值得借鑒和學習,并且隨著時間發展,在線性回歸的基礎上還誕生了許多功能強大的非線性模型,
可見,學習線性回歸確實非常重要,
目錄
- 為什么我們需要學習線性回歸呢?
- 1 概述
- 2 線性回歸與機器學習
- 3 線性回歸的機器學習表示方法
- 3.1 核心邏輯
- 3.2 優化目標
- 3.3 最小二乘法
- 3.3.1 回顧一元線性回歸的求解程序
- 3.3.2 多元線性回歸求解引數
- 結束語
1 概述
在正式進入到回歸分析的相關演算法討論之前,我們需要對有監督學習演算法中的回歸問題進行進一步的分析和理解,雖然回歸問題和分類問題同屬于有監督學習范疇,但實際上,回歸問題要遠比分類問題更加復雜,
首先是關于輸出結果的對比,分類模型最終輸出結果為離散變數,而離散變數本身包含資訊量較少,其本身并不具備代數運算性質,因此其評價指標體系也較為簡單,最常用的就是混淆矩陣以及ROC曲線,而回歸問題最終輸出的是連續變數,其本身不僅能夠代數運算,且還具有更"精致"的方法,希望對事物運行的更底層原理進行挖掘,即回歸問題的模型更加全面、完善的描繪了事物客觀規律,從而能夠得到更加細粒度的結論,因此,回歸問題的模型往往更加復雜,建模所需要資料所提供的資訊量也越多,進而在建模程序中可能遇到的問題也越多,
2 線性回歸與機器學習
我們在進行機器學習演算法學習程序中,仍然需要對線性回歸這個統計分析演算法進行系統深入的學習,但這里需要說明的是,線性回歸的建模思想有很多理解的角度,此處我們并不需要從統計學的角度來理解、掌握和應用線性回歸演算法,很多時候,利用機器學習的思維來理解線性回歸,會是一種更好的理解方法,這也將是我們這部分內容講解線性回歸的切入角度,
3 線性回歸的機器學習表示方法
3.1 核心邏輯
任何機器學習演算法首先都有一個最底層的核心邏輯,當我們在利用機器學習思維理解線性回歸的時候,首先也是要探究其底層邏輯,值得慶辛的是,雖然線性回歸源于統計分析,但其演算法底層邏輯和機器學習演算法高度契合,
在給定n個屬性描繪的客觀事物 z = ( x 1 , x 2 , . . . , x n ) z=(x_1,x_2,...,x_n) z=(x1?,x2?,...,xn?)中,每個 都用于描繪某一次觀測時事物在某個維度表現出來的數值屬性值,當我們在建立機器學習模型捕捉事物運行的客觀規律時,本質上是希望能夠綜合這些維度的屬性值來描繪事物最終運行結果,而最簡單的綜合這些屬性的方法就是對其進行加權求和匯總,這即是線性回歸的方程式表達形式: y ^ = w 0 + w 1 x i 1 + w 2 x i 2 + . . . + + w n x i n \hat y=w_0+w_1x_{i1}+w_2x_{i2}+...++w_nx_{in} y^?=w0?+w1?xi1?+w2?xi2?+...++wn?xin? w w w被統稱為模型的引數,其中 w 0 w_0 w0?被稱為截距(intercept), w 1 w_1 w1?~ w n w_n wn?被稱為回歸系數(regression coeffiffifficient),有時也是使用 β \beta β或者 θ \theta θ來表示,這個運算式,其實就和我們小學時就無比熟悉的 y = a x + b y=ax+b y=ax+b是同樣的性質,其中 x i 1 x_{i1} xi1?是我們的目標變數,也就是標簽, 是樣本 i i i上的特征不同特征,如果考慮我們有m個樣本,則回歸結果可以被寫作: y ^ = w 0 + w 1 x 1 + w 2 x 2 + . . . + + w n x n \hat y=w_0+w_1x_{1}+w_2x_{2}+...++w_nx_{n} y^?=w0?+w1?x1?+w2?x2?+...++wn?xn?其中 y y y是包含了m個全部的樣本的回歸結果的列向量(結構為(m,1),由于只有?列,以列的形式表示,所以叫做列向量),注意,我們通常使用粗體的小寫字母來表示列向量,粗體的大寫字母表示矩陣或者行列式,我們可以使用矩陣來表示這個方程,其中 可以被看做是?個結構為(n+1,1)的列矩陣, 是?個結構為(m,n+1)的特征矩陣,則有: [ y ^ 1 y ^ 2 y ^ 3 . . . y ^ m ] = [ 1 x 11 x 12 x 13 . . . x 1 n 1 x 21 x 22 x 23 . . . x 2 n 1 x 31 x 32 x 33 . . . x 3 n . . . 1 x m 1 x m 2 x m 3 . . . x m n ] ? [ w ^ 1 w ^ 2 w ^ 3 . . . w ^ n ] \begin{bmatrix} \hat y_1 \\ \hat y_2 \\ \hat y_3 \\ ... \\ \hat y_m \\ \end{bmatrix}=\begin{bmatrix} 1 & x_{11} & x_{12} & x_{13} & ... & x_{1n} \\ 1 & x_{21} & x_{22} & x_{23} & ... & x_{2n} \\ 1 & x_{31} & x_{32} & x_{33} & ... & x_{3n} \\ ... \\ 1 & x_{m1} & x_{m2} & x_{m3} & ... & x_{mn}\end{bmatrix} * \begin{bmatrix} \hat w_1 \\ \hat w_2 \\ \hat w_3 \\ ... \\ \hat w_n \\ \end{bmatrix} ???????y^?1?y^?2?y^?3?...y^?m?????????=???????111...1?x11?x21?x31?xm1??x12?x22?x32?xm2??x13?x23?x33?xm3??............?x1n?x2n?x3n?xmn?????????????????w^1?w^2?w^3?...w^n????????? y ^ = X w \hat y = Xw y^?=Xw線性回歸的任務,就是構造?個預測函式來映射輸入的特征矩陣 和標簽值 的線性關系,這個預測函式在不同的教材上寫法不同,可能寫作 f ( x ) f(x) f(x), y w ( x ) y_w(x) yw?(x) ,或者 h ( x ) h(x) h(x)等等形式,但無論如何,這個預測函式的本質就是我們需要構建的模型,
3.2 優化目標
對于線性回歸而言,預測函式 y ^ = X w \hat y = Xw y^?=Xw就是我們的模型,在機器學習我們也稱作 “決策數”,其中只有 w w w是未知的,所以線性回歸原理的核心就是找出模型的引數向量 w w w ,但我們怎樣才能夠求解出引數向量呢?我們需要依賴一個重要概念:損失函式,
在之前的演算法學習中,我們提到過兩種模型表現:在訓練集上的表現,和在測驗集上的表現,我們建模,是追求模型在測驗集上的表現最優,因此模型的評估指標往往是?來衡量模型在測驗集上的表現的,然而,線性回歸有著基于訓練資料求解引數 的需求,并且希望訓練出來的模型能夠盡可能地擬合訓練資料,即模型在訓練集上的預測準確率越靠近100%越好,
因此,我們使用損失函式這個評估指標,來衡量系數為 w w w的模型擬合訓練集時產生的資訊損失的大小,并以此衡量引數 w w w的優劣,如果用一組引數建模后,模型在訓練集上表現良好,那我們就說模型擬合程序中的損失很小,損失函式的值很小,這一組引數就優秀;相反,如果模型在訓練集上表現糟糕,損失函式就會很大,模型就訓練不足,效果較差,這一組引數也就比較差,即是說,我們在求解引數 w w w時,追求損失函式最小,讓模型在訓練資料上的擬合效果最優,即預測準確率盡量靠近100%,
(注意:對于非引數模型沒有損失函式,比如KNN、決策樹)
對于有監督學習演算法而言,建模都是依據有標簽的資料集,回歸類問題則是對客觀事物的?個定量判別,這里以 y i y_i yi?作為第 i i i行資料的標簽,且 y i y_i yi?為連續變數, x i x_i xi?為第 i i i行特征值所組成的向量,則線性回歸建模優化方向就是希望模型判別的 y ^ i \hat y_i y^?i?盡可能地接近實際的 y i y_i yi?,而對于連續型變數而言,鄰近度度量方法可采用 S S E SSE SSE來進行計算, S S E SSE SSE稱作「殘差平方和」,也稱作「誤差平方和」或者「離差平方和」,
因此我們的優化目標可用下述方程來進行表示: m i n w ∑ i = 1 m ( y i ? y ^ i ) 2 = m i n w ∑ i = 1 m ( y i ? X i w ) 2 \underset {w}{min}\sum_{i=1}^{m}{(y_i-\hat y_i)^2}=\underset {w}{min}\sum_{i=1}^{m}{(y_i-X_iw)^2} wmin?i=1∑m?(yi??y^?i?)2=wmin?i=1∑m?(yi??Xi?w)2來看?個簡單的?例子,假設現在 w w w為[1,2]這樣?個向量,求解出的模型為 y = x 1 + 2 x 2 y=x_1+2x_2 y=x1?+2x2?,
| 樣本 | 特征1 | 特征2 | 真實標簽 |
|---|---|---|---|
| 0 | 1 | 0.5 | 3 |
| 1 | -1 | 0.5 | 2 |
則我們的損失函式的值就是: ( 3 ? ( 1 ? 1 + 2 ? 0.5 ) ) 2 + ( 2 ? ( 1 ? ( ? 1 ) + 2 ? 0.5 ) ) 2 ( y 1 ? y ^ 1 ) 2 + ( y 2 ? y ^ 2 ) 2 (3-(1*1+2*0.5))^2+(2-(1*(-1)+2*0.5))^2 \\ (y_1- \hat y_1)^2 + (y_2- \hat y_2)^2 (3?(1?1+2?0.5))2+(2?(1?(?1)+2?0.5))2(y1??y^?1?)2+(y2??y^?2?)2
3.3 最小二乘法
現在問題轉換成了求解 S S E SSE SSE最小化的引數向量 w w w,這種通過最小化真實值和預測值之間的 S S E SSE SSE來求解引數的方法叫做最小二乘法,
3.3.1 回顧一元線性回歸的求解程序
下面我們來用代碼嘗試一下,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#生成橫坐標 范圍 0 -10
np.random.seed(420)
x = np.random.rand(50) * 10 #50個點
x
# y = 2x - 5
#添加擾動項
np.random.seed(420)
y = 2 * x - 5 + np.random.randn(50) #正太分布下的亂數
plt.plot(x,y,'o')

現在對上圖資料進行擬合:
from sklearn.linear_model import LinearRegression
#實體化
lr = LinearRegression(fit_intercept=True)
x2 = x.reshape(-1,1)
# 訓練模型
lr.fit(x2, y)
# 生成繪制直線的橫坐標
xfit = np.linspace(0,10,100) #從0到10 生成100個
xfit2 = xfit.reshape(-1,1)
yfit = lr.predict(xfit2) #預測
#畫出點的直線
plt.plot(xfit,yfit)
#畫出原來訓練集的點
plt.plot(x,y,'o')

看上去效果還是不錯的,
假設該擬合直線為 y ^ = w 0 + w 1 x \hat y = w_0+w_1x y^?=w0?+w1?x,現在我們的目標是使得該擬合直線的總的殘差和達到最小,也就是最小化 S S E SSE SSE,
我們令該直線是以均值為核心的「均值回歸」,即散點的 x ˉ \bar x xˉ 和 y ˉ \bar y yˉ? 必經過這條直線: y ˉ = w 0 + w 1 x ˉ \bar y = w_0+w_1 \bar x yˉ?=w0?+w1?xˉ對于真實值y來說,我們可以得到: y = w 0 + w 1 x + ? y = w_0+w_1 x + \epsilon y=w0?+w1?x+?這里的 ? \epsilon ?即為「殘差」,對其進行變形,則殘差平?和 S S E SSE SSE就為: ∑ ? 2 = ∑ ( y ? w 0 ? w 1 x ) 2 \sum{\epsilon^2=\sum (y-w_0-w_1x)^2} ∑?2=∑(y?w0??w1?x)2要求得殘差平方和最小值,我們通過微積分求偏導算其極值來解決,這?我們計算殘差最小對應的引數 w 1 w_1 w1?:

此時,使得
S
S
E
SSE
SSE最小的量
w
^
0
\hat w_0
w^0?,
w
^
1
\hat w_1
w^1?稱為總體引數
w
0
w_0
w0?,
w
1
w_1
w1?的最小?乘估計值,預測?程
y
^
=
w
^
0
+
w
^
1
x
\hat y = \hat w_0+\hat w_1x
y^?=w^0?+w^1?x 稱為最小?乘直線,
3.3.2 多元線性回歸求解引數
更?般的情形,還記得我們剛才舉的小例子么?如果我們有兩列特征屬性,則損失函式為: ( y 1 ? y ^ 1 ) 2 + ( y 2 ? y ^ 2 ) 2 (y_1-\hat y_1)^2+(y_2-\hat y_2)^2 (y1??y^?1?)2+(y2??y^?2?)2這樣的形式如果矩陣來表達,可以寫成: [ ( y 1 ? y ^ 1 ) ( y 2 ? y ^ 2 ) ] ? [ ( y 1 ? y ^ 1 ) ( y 2 ? y ^ 2 ) ] = ( y ? X w ) T ( y ? X w ) \begin{bmatrix} (y_1-\hat y_1)(y_2-\hat y_2) \\ \end{bmatrix}*\begin{bmatrix} (y_1-\hat y_1) \\ (y_2-\hat y_2) \\ \end{bmatrix} \\ =(y-Xw)^T(y-Xw) [(y1??y^?1?)(y2??y^?2?)?]?[(y1??y^?1?)(y2??y^?2?)?]=(y?Xw)T(y?Xw)矩陣相乘是對應未知元素相乘相加,就會得到和上面的式子一模一樣的結果,
我們同時對
w
w
w求偏導:
可得到:

我們讓求導后的一階導數為0:

到了這里,我們希望能夠將
w
w
w留在等式的左邊,其他與特征矩陣有關的部分都放到等式的右邊,如此就可以求出
w
w
w的最優解了,這個功能非常容易實作,只需要我們左乘
X
T
X
X^TX
XTX的逆矩陣就可以,
在這里,逆矩陣存在的充分必要條件是特征矩陣不存在多重共線性,我們將會在后面詳細講解多重共線性這個主題,
假設矩陣的逆是存在的,此時我們的 w w w就是我們引數的最優解,求解出這個引數向量,我們就解出了我們的 X w Xw Xw,也就能夠計算出我們的預測值 y ^ \hat y y^?了,
結束語
如果看到這里開始有點亂了,沒有關系,本次介紹線性回歸的重點是在于讓你從機器學習的角度來理解和使用線性回歸,如果統計學的知識你感覺不好掌握的話,可以后面再多花點時間去鞏固,無須自我否定,
在下一篇文章中,我會詳細講解如何利用Python實作線性回歸,以及如何評估回歸模型的好壞,當然也會進一步介紹多重共線性及其應用,也歡迎大家關注我下面推薦的專欄,
推薦關注的專欄
👨?👩?👦?👦 機器學習:分享機器學習實戰專案和常用模型講解
👨?👩?👦?👦 資料分析:分享資料分析實戰專案和常用技能整理
機器學習系列往期回顧
💙 你真的了解分類模型評估指標都有哪些嗎?【附Python代碼實作】
🖤 一文帶你用Python玩轉決策樹 ??畫出決策樹&各種引數詳細說明??決策樹的優缺點又有哪些?
🧡 開始學習機器學習時你必須要了解的模型有哪些?機器學習系列之決策樹進階篇
💚 開始學習機器學習時你必須要了解的模型有哪些?機器學習系列之決策樹基礎篇
?? 以??簡單易懂??的語言帶你搞懂有監督學習演算法【附Python代碼詳解】機器學習系列之KNN篇
💜 開始學習機器學習之前你必須要了解的知識有哪些?機器學習系列入門篇
往期內容回顧
🖤 我和關注我的前1000個粉絲“合影”啦!收集前1000個粉絲進行了一系列資料分析,識訓滿滿
💚 MySQL必須掌握的技能有哪些?超細長文帶你掌握MySQL【建議收藏】
💜 Hive必須了解的技能有哪些?萬字博客帶你掌握Hive??【建議收藏】
CSDN@報告,今天也有好好學習
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299913.html
標籤:AI
