主頁 >  其他 > 線性回歸的基本概念以及正規方程

線性回歸的基本概念以及正規方程

2022-02-10 08:20:17 其他

目錄

  • 前言
  • 1.基本概念
    • 1.1 連續值
    • 1.2 離散值
    • 1.3 簡單線性回歸
    • 1.4 基本名詞的定義
    • 1.5 多元線性回歸
  • 2.正規方程
    • 2.1 最小二乘法的矩陣表示
    • 2.2 多元一次方程舉例
      • 2.2.1 二元一次方程
      • 2.2.2 三元一次方程
      • 2.2.3 八元一次方程
      • 2.2.4 s k l e a r n sklearn sklearn 演算法使用
      • 2.2.5 帶截距的線性方程
        • 2.2.5.1 增加截距 12 12 12
        • 2.2.5.2 修改資料 X X X
    • 2.3 矩陣轉置公式與求導公式
    • 2.4 推導正規方程 θ \theta θ 的解
    • 2.5 凸函式判定

前言

本文屬于 線性回歸演算法【AIoT階段三】(尚未更新),這里截取自其中一段內容,方便讀者理解和根據需求快速閱讀,

線性回歸是機器學習中有監督機器學習下的一種演算法, 回歸問題主要關注的是因變數(需要預測的值,可以是一個也可以是多個)和一個或多個數值型的自變數(預測變數)之間的關系,

需要預測的值:即目標變數,target,y,連續值預測變數,

影響目標變數的因素: X 1 X_1 X1? X n X_n Xn?,可以是連續值也可以是離散值,

因變數和自變數之間的關系:即模型,model,是我們要求解的,

1.基本概念

1.1 連續值

🚩連續值就是連續的一連串數字,是可以無限細分下去的一段,比如我們的身高,你可以說你身高在 175 175 175 185 185 185,繼續細分下去也是可以的,你甚至可以說你的身高在 175.003 175.003 175.003 182.231 182.231 182.231 甚至繼續下分下去也沒可以的,這就被稱為是連續值,
在這里插入圖片描述

1.2 離散值

🚩離散值就是單個孤立的點,比如我國共計34個省級行政區,我們絕不可以說成我國共計34.3個省級行政區,或者是33.6個省級行政區,必須是 34 整個,這就是離散值,
在這里插入圖片描述

1.3 簡單線性回歸

🚩什么是演算法?研究演算法說白了還是在研究公式,簡單線性回歸屬于一個演算法,它所對應的公式: y = w x + b y = wx + b y=wx+b,這個公式中, y y y 是目標變數即未來要預測的值, x x x 是影響 y y y 的因素, w , b w,b w,b 是公式上的引數即要求的模型,其實 b b b 就是咱們的截距, w w w 就是斜率嘛! 所以很明顯如果模型求出來了,未來影響 y y y 值的未知數就是一個 x x x 值,也可以說影響 y y y 值 的因素只有一個,所以這是就叫簡單線性回歸的原因,如下圖所表示的直線,就是一個簡單線性回歸的意思:

在這里插入圖片描述

1.4 基本名詞的定義

A c t u a l v a l u e Actual value Actualvalue:真實值,一般使用 y y y 表示,

P r e d i c t e d v a l u e Predicted value Predictedvalue:預測值,是把已知的 x x x 帶入到公式里面和出來的引數 w , b w,b w,b 計算得到的,一般使用 y ^ \hat{y} y^? 表示,

E r r o r Error Error:誤差,預測值和真實值的差距,一般使用 ε \varepsilon ε 表示

最優解:盡可能的找到一個模型使得整體的誤差最小,整體的誤差通常叫做損失 L o s s Loss Loss

L o s s Loss Loss:整體的誤差, L o s s Loss Loss 通過損失函式 L o s s Loss Loss f u n c t i o n function function 計算得到,

1.5 多元線性回歸

🚩多元線性回歸無非就是比簡單線性回歸變得: 多元,所謂多元,就是在某些情況下,影響結果 y y y 的因素不止有一個,比如我們在預測股票的時候,國家的政策起到影響作用,國民的經濟也是影響因素,甚至他國的經濟政策也會影響到我們,等等等等有諸多原因,為此,僅僅一個變數 x x x 就顯得不夠用了,這時,我們的 x x x 就從 1 1 1 個變成了 n n n 個: X 1 X_1 X1? X n X_n Xn?, 同時簡單線性回歸的公式也就不在適用了,多元線性回歸公式如下:
y ^ = w 1 X 1 + w 2 X 2 + … … + w n X n + b \hat{y} = w_1X_1 + w_2X_2 + …… + w_nX_n + b y^?=w1?X1?+w2?X2?++wn?Xn?+b

b是截距,也可以使用 w 0 w_0 w0?來表示

y ^ = w 1 X 1 + w 2 X 2 + … … + w n X n + w 0 \hat{y} = w_1X_1 + w_2X_2 + …… + w_nX_n + w_0 y^?=w1?X1?+w2?X2?++wn?Xn?+w0?

y ^ = w 1 X 1 + w 2 X 2 + … … + w n X n + w 0 ? 1 \hat{y} = w_1X_1 + w_2X_2 + …… + w_nX_n + w_0 * 1 y^?=w1?X1?+w2?X2?++wn?Xn?+w0??1

使用向量來表示, X X X表示所有的變數,是一維向量; w w w 表示所有的系數(包含 w 0 w_0 w0?),是一維向量,根據向量乘法規律,可以這么寫: y ^ = W T X \hat{y} = W^TX y^?=WTX

y ^ = ∣ w 1 w 2 . . . w n w 0 ∣ ? ∣ X 1 X 2 . . . X n 1 ∣ \hat{y} =\left|\begin{matrix}w_1 \\ w_2 \\ ... \\ w_n \\ w_0 \end{matrix}\right| *\left|\begin{matrix}X_1 & X_2 & ... & X_n & 1 \end{matrix}\right| y^?=?w1?w2?...wn?w0?????X1??X2??...?Xn??1??

2.正規方程

2.1 最小二乘法的矩陣表示

🚩最小二乘法可以將誤差方程轉化為有確定解的代數方程組(其方程式數目正好等于未知數的個數),從而可求解出這些未知引數,這個有確定解的代數方程組稱為最小二乘法估計的正規方程,公式如下:
θ = ( X T X ) ? 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)?1XTy 或者 W = ( X T X ) ? 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)?1XTy ,其中的 W 、 θ W、\theta Wθ 即使方程的解!
在這里插入圖片描述
公式是如何推導的在 2.4 推導正規方程 θ \theta θ 的解 中進行詳細講解,

最小二乘法公式如下:
J ( θ ) = 1 2 ∑ i = 0 n ( h θ ( x i ) ? y i ) 2 J(\theta) = \frac{1}{2}\sum\limits_{i = 0}^n(h_{\theta}(x_i) - y_i)^2 J(θ)=21?i=0n?(hθ?(xi?)?yi?)2

使用矩陣表示:

J ( θ ) = 1 2 ∑ i = 0 n ( h θ ( x i ) ? y ) ( h θ ( x i ) ? y ) J(\theta) = \frac{1}{2}\sum\limits_{i = 0}^n(h_{\theta}(x_i) - y)(h_{\theta}(x_i) - y) J(θ)=21?i=0n?(hθ?(xi?)?y)(hθ?(xi?)?y)

J ( θ ) = 1 2 ( X θ ? y ) T ( X θ ? y ) J(\theta) = \frac{1}{2}(X\theta - y)^T(X\theta - y) J(θ)=21?(Xθ?y)T(Xθ?y)

之所以要使用轉置 T T T,是因為,矩陣運算規律是:矩陣 A A A 的一行乘以矩陣 B B B 的一列!

在這里插入圖片描述

2.2 多元一次方程舉例

2.2.1 二元一次方程

{ x + y = 14 2 x ? y = 10 \begin{cases} x + y=14\\ 2x - y = 10\\ \end{cases} {x+y=142x?y=10?

import numpy as np
import matplotlib.pyplot as plt

X = np.array([[1, 1],
              [2, -1]])
y = np.array([14, 10])

# linalg 線性代數,solve計算線性回歸問題
np.linalg.solve(X, y)

在這里插入圖片描述

我們來根據上述中的正規方程來計算一下: W = ( X T X ) ? 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)?1XTy

A = X.T.dot(X)
B = np.linalg.inv(A)   ## 求逆矩陣
C = B.dot(X.T)
C.dot(Y)

在這里插入圖片描述
可以發現,我們使用正規方程可以同樣有效的進行計算,我們再來舉幾個例子

2.2.2 三元一次方程

{ x ? y + z = 100 2 x + y ? z = 80 3 x ? 2 y + 6 z = 256 \begin{cases} x - y + z = 100\\ 2x + y -z = 80\\ 3x - 2y + 6z = 256\\ \end{cases} ??????x?y+z=1002x+y?z=803x?2y+6z=256?

import numpy as np
import matplotlib.pyplot as plt

X = np.array([[1, -1, 1],
              [2, 1, -1],
              [3, -2, 6]])
y = np.array([100, 80, 256])

# 根據正規方程進行計算:
W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
W

在這里插入圖片描述

2.2.3 八元一次方程

{ 14 x 2 + 8 x 3 + 5 x 5 + ? 2 x 6 + 9 x 7 + ? 3 x 8 = 339 ? 4 x 1 + 10 x 2 + 6 x 3 + 4 x 4 + ? 14 x 5 + ? 2 x 6 + ? 14 x 7 + 8 x 8 = ? 114 ? 1 x 1 + ? 6 x 2 + 5 x 3 + ? 12 x 4 + 3 x 5 + ? 3 x 6 + 2 x 7 + ? 2 x 8 = 30 5 x 1 + ? 2 x 2 + 3 x 3 + 10 x 4 + 5 x 5 + 11 x 6 + 4 x 7 + ? 8 x 8 = 126 ? 15 x 1 + ? 15 x 2 + ? 8 x 3 + ? 15 x 4 + 7 x 5 + ? 4 x 6 + ? 12 x 7 + 2 x 8 = ? 395 11 x 1 + ? 10 x 2 + ? 2 x 3 + 4 x 4 + 3 x 5 + ? 9 x 6 + ? 6 x 7 + 7 x 8 = ? 87 ? 14 x 1 + 4 x 3 + ? 3 x 4 + 5 x 5 + 10 x 6 + 13 x 7 + 7 x 8 = 422 ? 3 x 1 + ? 7 x 2 + ? 2 x 3 + ? 8 x 4 + ? 6 x 6 + ? 5 x 7 + ? 9 x 8 = ? 309 \begin{cases}&14x_2 + 8x_3 + 5x_5 + -2x_6 + 9x_7 + -3x_8 = 339\\&-4x_1 + 10x_2 + 6x_3 + 4x_4 + -14x_5 + -2x_6 + -14x_7 + 8x_8 = -114\\&-1x_1 + -6x_2 + 5x_3 + -12x_4 + 3x_5 + -3x_6 + 2x_7 + -2x_8 = 30\\&5x_1 + -2x_2 + 3x_3 + 10x_4 + 5x_5 + 11x_6 + 4x_7 + -8x_8 = 126\\&-15x_1 + -15x_2 + -8x_3 + -15x_4 + 7x_5 + -4x_6 + -12x_7 + 2x_8 = -395\\&11x_1 + -10x_2 + -2x_3 + 4x_4 + 3x_5 + -9x_6 + -6x_7 + 7x_8 = -87\\&-14x_1 + 4x_3 + -3x_4 + 5x_5 + 10x_6 + 13x_7 + 7x_8 = 422\\&-3x_1 + -7x_2 + -2x_3 + -8x_4 + -6x_6 + -5x_7 + -9x_8 = -309\end{cases} ???????????????????????????????14x2?+8x3?+5x5?+?2x6?+9x7?+?3x8?=339?4x1?+10x2?+6x3?+4x4?+?14x5?+?2x6?+?14x7?+8x8?=?114?1x1?+?6x2?+5x3?+?12x4?+3x5?+?3x6?+2x7?+?2x8?=305x1?+?2x2?+3x3?+10x4?+5x5?+11x6?+4x7?+?8x8?=126?15x1?+?15x2?+?8x3?+?15x4?+7x5?+?4x6?+?12x7?+2x8?=?39511x1?+?10x2?+?2x3?+4x4?+3x5?+?9x6?+?6x7?+7x8?=?87?14x1?+4x3?+?3x4?+5x5?+10x6?+13x7?+7x8?=422?3x1?+?7x2?+?2x3?+?8x4?+?6x6?+?5x7?+?9x8?=?309?

import numpy as np
import matplotlib.pyplot as plt

X = np.array([[0, 14, 8, 0, 5, -2, 9, -3],
              [-4, 10, 6, 4, -14, -2, -14, 8],
              [-1, -6, 5, -12, 3, -3, 2, -2],
              [5, -2, 3, 10, 5, 11, 4, -8],
              [-15, -15, -8, -15, 7, -4, -12, 2],
              [11, -10, -2, 4, 3, -9, -6, 7],
              [-14, 0, 4, -3, 5, 10, 13, 7],
              [-3, -7, -2, -8, 0, -6, -5, -9]])
y = np.array([339, -114, 30, 126, -395, -87, 422, -309])

# 根據正規方程進行計算:
W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
W

在這里插入圖片描述

2.2.4 s k l e a r n sklearn sklearn 演算法使用

🚩沒有安裝這個包的同學在命令列中輸入:pip install sklearn 即可,如果你看過博文:最詳細的Anaconda Installers 的安裝【numpy,jupyter】(圖+文) 或者 資料分析三劍客【AIoT階段一(下)】(十萬字博文 保姆級講解),那么這一步可省略:在安裝 j u p y t e r jupyter jupyter 的時候已經安裝完成,如果你沒有設定以 清華源 為地址進行下載會很慢,配置默認下載從 清華源 下載可見博文:matplotlib的安裝教程以及簡單呼叫

下面還是來計算我們上述的八元一次方程組:

# linear:線性  model:模型、演算法
# LinearRegression: 線性回歸
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

model = LinearRegression()

X = np.array([[0, 14, 8, 0, 5, -2, 9, -3],
              [-4, 10, 6, 4, -14, -2, -14, 8],
              [-1, -6, 5, -12, 3, -3, 2, -2],
              [5, -2, 3, 10, 5, 11, 4, -8],
              [-15, -15, -8, -15, 7, -4, -12, 2],
              [11, -10, -2, 4, 3, -9, -6, 7],
              [-14, 0, 4, -3, 5, 10, 13, 7],
              [-3, -7, -2, -8, 0, -6, -5, -9]])
y = np.array([339, -114, 30, 126, -395, -87, 422, -309])

# X:資料  y:目標值
model.fit(X, y)
# coef_ : 結果、回傳值
# 就是指方程的解、W、系數、斜率
model.coef_

在這里插入圖片描述

我們發現,運行結果和我們用正規方程計算出來的不一樣,這是因為在代碼:

model = LinearRegression()

有一個引數叫做:intercept_,意為截距,即我們呼叫 s k l e a r n sklearn sklearn 自動計算了截距:

# 默認計算截距
model.intercept_

在這里插入圖片描述
但其實我們的八元一次方程是沒有截距的,故我們在代碼改為如下即可:

model = LinearRegression(fit_intercept = False)

完整代碼:

# linear:線性  model:模型、演算法
# LinearRegression: 線性回歸
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

model = LinearRegression(fit_intercept = False)

X = np.array([[0, 14, 8, 0, 5, -2, 9, -3],
              [-4, 10, 6, 4, -14, -2, -14, 8],
              [-1, -6, 5, -12, 3, -3, 2, -2],
              [5, -2, 3, 10, 5, 11, 4, -8],
              [-15, -15, -8, -15, 7, -4, -12, 2],
              [11, -10, -2, 4, 3, -9, -6, 7],
              [-14, 0, 4, -3, 5, 10, 13, 7],
              [-3, -7, -2, -8, 0, -6, -5, -9]])
y = np.array([339, -114, 30, 126, -395, -87, 422, -309])

# X:資料  y:目標值
model.fit(X, y)
# coef_ : 結果、回傳值
# 就是指方程的解、W、系數、斜率
model.coef_

在這里插入圖片描述

此時我們再來計算一下截距:

model.intercept_

在這里插入圖片描述

2.2.5 帶截距的線性方程

2.2.5.1 增加截距 12 12 12

🚩上述八元一次方程的解其實就是:
f ( x ) = x 1 + 5 x 2 + 15 x 3 + 3 x 4 + 8 x 5 + 4 x 6 + 17 x 7 + 12 x 8 {f(x)=x_1+5x_2+15x_3+3x_4+8x_5+4x_6+17x_7+12x_8} f(x)=x1?+5x2?+15x3?+3x4?+8x5?+4x6?+17x7?+12x8?

現在我們不妨讓上式加上一個任意常數,比如 12 12 12
那么方程的解就變成了: f ( x ) = x 1 + 5 x 2 + 15 x 3 + 3 x 4 + 8 x 5 + 4 x 6 + 17 x 7 + 12 x 8 + 12 {f(x)=x_1+5x_2+15x_3+3x_4+8x_5+4x_6+17x_7+12x_8+12} f(x)=x1?+5x2?+15x3?+3x4?+8x5?+4x6?+17x7?+12x8?+12

那么顯然我們的 y y y 要發生改變,即對于 y y y 中的每一個元素都要加上 12 12 12:這時,因為有了截距,我們就需要讓 intercept 置為 True

y = y + 12
display(y)

model = LinearRegression(fit_intercept = True)
# fit:健身,訓練;特質演算法、模型訓練,擬合
# 資料 X 和 y 之間存在規律,擬合出來,找到規律
model.fit(X, y)

b_ = model.intercept_
print('截距是:', b_)
w_ = model.coef_
print('斜率是:', w_)
print('方程的解為:', X.dot(w_) + b_)

在這里插入圖片描述

我們可以看出,求出來的截距雖然不是我們加上的 12 12 12,斜率也不是我們之前求過的解,但是這兩個結合起來確確實實是方程的解,
在這里插入圖片描述

求出的不是我們期望的結果,但是是符合題意的結果,這是因為,一旦我們規定了 fit_intercept = True,那么在計算機進行解方程的時候,就不會使用正規方程去進行運算

2.2.5.2 修改資料 X X X

🚩我們根據 1.5 多元線性回歸 所講過的對 X X X 進行修改:即給 X X X 所代表的矩陣中在最后一列的位置增加一個 1 1 1

X = np.concatenate([X, np.full(shape = (8, 1), fill_value = 1)], axis = 1)
display(X, y)

在這里插入圖片描述

那么這個資料,相比較與最開始的八元一次方程,我們讓 X X X 增加了一列, y y y 增加了 12 12 12,那么接下來進行正規方程的計算:

model = LinearRegression(fit_intercept = False)
model.fit(X, y)
display(model.coef_, model.intercept_)

在這里插入圖片描述

我們發現和我們的預期還是相差甚遠,我們期望的是計算截距為 12 12 12,斜率為: a r r a y ( [ 1. , 5. , 15. , 3. , 8. , 4. , 17. , 12. ] ) array([ 1., 5., 15., 3., 8., 4., 17., 12.]) array([1.,5.,15.,3.,8.,4.,17.,12.]),但是為什么出現了這么大的誤差呢?我們再來用 W = ( X T X ) ? 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)?1XTy 計算一下正規方程:

W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
W

在這里插入圖片描述

可以看出即使是使用我們推匯出的正規方程也和我們期待的相差甚遠,我們來查看一下此時的 X X X

X.shape

在這里插入圖片描述
這意味著,我們有八個方程,但是我們有九個未知數,顯然,對于這樣的一個方程組,我們并非只有一組解,而是有無窮多組解,這也是我們產生偏差的原因,

你或許有疑問,既然有無窮多組解,那么每次運行的結果應該是不同的,為什么對于正規方程每次運行的結果確實相同的:這是因為演算法會默認給我們算出一個 最優解,所以我們要有唯一解,就需要我們人為的添加一個方程:

# w就是標準的解
w = np.array([ 1.,  5., 15.,  3.,  8.,  4., 17., 12.])
# 造一個方程出來
X9 = np.random.randint(-15, 15, size = 8)
display(X9)

在這里插入圖片描述

接下來對于這個方程我們按照增加 12 12 12 截距和修改資料的方法來改變這個方程:

# 上面的8個方程,都有截距12,第九個方程也是如此
X9.dot(w) + 12
y = np.concatenate([y, [X9.dot(w) + 12]])
y
X9 = np.concatenate([X9, [1]])
X9
X = np.concatenate([X, [X9]])
X

在這里插入圖片描述

以上操作后我們就處理好了 X X X y y y,那么接下來,就是見證奇跡的時刻:

# 計算正規方程
np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)

在這里插入圖片描述
使用線性回歸:

model = LinearRegression(fit_intercept = False)
model.fit(X, y)
display(model.coef_)

在這里插入圖片描述
那么這還是有些區別,因為我們想要的是截距以及斜率,但是此時我們只有斜率,故我們可以把 fit_intercept 設定為 True

model = LinearRegression(fit_intercept = True)
model.fit(X, y)
display(model.coef_, model.intercept_)

在這里插入圖片描述
截距是不是離我們的真實值特別靠近啦,此時我們只需要進行四舍五入即可,對于值為 0 0 0 的解,即我們自定義出來的 X 9 X_9 X9? 0 0 0 代表其沒有權重,故我們可以舍去它

model = LinearRegression(fit_intercept = True)
model.fit(X[:,:-1], y)
display(model.coef_, model.intercept_.round())

在這里插入圖片描述

蕪湖!大功告成!!!

2.3 矩陣轉置公式與求導公式

轉置公式如下:

  • ( m A ) T = m A T (mA)^T = mA^T (mA)T=mAT,其中m是常數

  • ( A + B ) T = A T + B T (A + B)^T = A^T + B^T (A+B)T=AT+BT

  • ( A B ) T = B T A T (AB)^T = B^TA^T (AB)T=BTAT

  • ( A T ) T = A (A^T)^T = A (AT)T=A

求導公式如下:

  • ? X T ? X = I \frac{\partial X^T}{\partial X} = I ?X?XT?=I 求解出來是單位矩陣
  • ? X T A ? X = A \frac{\partial X^TA}{\partial X} = A ?X?XTA?=A
  • ? A X T ? X = A \frac{\partial AX^T}{\partial X} = A ?X?AXT?=A
  • ? A X ? X = A T \frac{\partial AX}{\partial X} = A^T ?X?AX?=AT
  • ? X A ? X = A T \frac{\partial XA}{\partial X} = A^T ?X?XA?=AT
  • ? X T A X ? X = ( A + A T ) X ; \frac{\partial X^TAX}{\partial X} = (A + A^T)X; ?X?XTAX?=(A+AT)X; A不是對稱矩陣
  • ? X T A X ? X = 2 A X ; \frac{\partial X^TAX}{\partial X} = 2AX; ?X?XTAX?=2AX; A是對稱矩陣

2.4 推導正規方程 θ \theta θ 的解

  1. 矩陣乘法公式展開
  • J ( θ ) = 1 2 ( X θ ? y ) T ( X θ ? y ) J(\theta) = \frac{1}{2}(X\theta - y)^T(X\theta - y) J(θ)=21?(Xθ?y)T(Xθ?y)

  • J ( θ ) = 1 2 ( θ T X T ? y T ) ( X θ ? y ) J(\theta) = \frac{1}{2}(\theta^TX^T - y^T)(X\theta - y) J(θ)=21?(θTXT?yT)(Xθ?y)

  • J ( θ ) = 1 2 ( θ T X T X θ ? θ T X T y ? y T X θ + y T y ) J(\theta) = \frac{1}{2}(\theta^TX^TX\theta - \theta^TX^Ty -y^TX\theta + y^Ty) J(θ)=21?(θTXTXθ?θTXTy?yTXθ+yTy)

  1. 進行求導(注意X、y是已知量, θ \theta θ 是未知數):
  • J ′ ( θ ) = 1 2 ( θ T X T X θ ? θ T X T y ? y T X θ + y T y ) ′ J'(\theta) = \frac{1}{2}(\theta^TX^TX\theta - \theta^TX^Ty -y^TX\theta + y^Ty)' J(θ)=21?(θTXTXθ?θTXTy?yTXθ+yTy)
  1. 根據上面求導公式進行運算:
  • J ′ ( θ ) = 1 2 ( X T X θ + ( θ T X T X ) T ? X T y ? ( y T X ) T ) J'(\theta) = \frac{1}{2}(X^TX\theta + (\theta^TX^TX)^T-X^Ty - (y^TX)^T) J(θ)=21?(XTXθ+(θTXTX)T?XTy?(yTX)T)
  • J ′ ( θ ) = 1 2 ( X T X θ + X T X θ ? X T y ? X T y ) J'(\theta) = \frac{1}{2}(X^TX\theta + X^TX\theta -X^Ty - X^Ty) J(θ)=21?(XTXθ+XTXθ?XTy?XTy)
  • J ′ ( θ ) = 1 2 ( 2 X T X θ ? 2 X T y ) J'(\theta) = \frac{1}{2}(2X^TX\theta -2X^Ty) J(θ)=21?(2XTXθ?2XTy)
  • J ′ ( θ ) = X T X θ ? X T y J'(\theta) =X^TX\theta -X^Ty J(θ)=XTXθ?XTy
  • J ′ ( θ ) = X T ( X θ ? y ) J'(\theta) =X^T(X\theta -y) J(θ)=XT(Xθ?y) 矩陣運算分配律
  1. 令導數 J ′ ( θ ) = 0 : J'(\theta) = 0: J(θ)=0
  • 0 = X T X θ ? X T y 0 =X^TX\theta -X^Ty 0=XTXθ?XTy

  • X T X θ = X T y X^TX\theta = X^Ty XTXθ=XTy

  1. 矩陣沒有除法,使用逆矩陣進行轉化:
  • ( X T X ) ? 1 X T X θ = ( X T X ) ? 1 X T y (X^TX)^{-1}X^TX\theta = (X^TX)^{-1}X^Ty (XTX)?1XTXθ=(XTX)?1XTy
  • I θ = ( X T X ) ? 1 X T y I\theta = (X^TX)^{-1}X^Ty Iθ=(XTX)?1XTy
  • θ = ( X T X ) ? 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)?1XTy

到此為止,公式推匯出來了~

在這里插入圖片描述

2.5 凸函式判定

🚩判定損失函式是凸函式的好處在于我們可能很肯定的知道我們求得的極值即最優解,一定是全域最優解,

在這里插入圖片描述
如果是非凸函式,那就不一定可以獲取全域最優解,如下圖:
在這里插入圖片描述
來一個更加立體的效果圖:
在這里插入圖片描述

判定凸函式的方式: 判定凸函式的方式非常多,其中一個方法是看 黑塞矩陣 是否是 半正定 的,

黑塞矩陣 ( h e s s i a n (hessian (hessian m a t r i x ) matrix) matrix)是由目標函式在點 X X X 處的二階偏導陣列成的對稱矩陣,

對于我們的式子來說就是在導函式的基礎上再次對 θ \theta θ 來求偏導,結果就是 X T X X^TX XTX,所謂正定就是 X T X X^TX XTX 的特征值全為正數,半正定就是 X T X X^TX XTX 的特征值大于等于 0 0 0, 就是半正定,

J ′ ( θ ) = X T X θ ? X T y J'(\theta) =X^TX\theta -X^Ty J(θ)=XTXθ?XTy
J ′ ′ ( θ ) = X T X J''(\theta) =X^TX J(θ)=XTX

這里我們對 J ( θ ) J(\theta) J(θ) 損失函式求二階導數的黑塞矩陣是 X T X X^TX XTX ,得到的一定是半正定的,自己和自己做點乘嘛!

這里不用數學推導證明這一點,在機器學習中往往損失函式都是凸函式,到深度學習中損失函式往往是非凸函式,即找到的解未必是全域最優,只要模型堪用就好!機器學習特點是:不強調模型 100 % 100\% 100% 正確,只要是有價值的,堪用的,就 O k a y ! Okay! Okay

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423604.html

標籤:AI

上一篇:影像特征—FAST關鍵點

下一篇:python使用matplotlib可視化歸一化的直方圖(histogram)、Y軸坐標為比例、而非頻率、自定義直方圖箱圖不填充(normalizing a histogram)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more