吳恩達機器學習之線性回歸

2021-10-05 18:37:27 字數 3510 閱讀 9598

x代表屬性的矩陣,x(i

)x^x(i)

代表x的第i行,xj(

i)x^_j

xj(i)​

代表x第i行第j列,θ

\theta

θ是引數向量。

估計函式h(x

)=∑i

=0mx

(i)θ

=xθh(x)=\sum_^mx^\theta=x\theta

h(x)=i

=0∑m

​x(i

)θ=x

θ代價函式j(θ

)=12

m∑i=

0m(x

(i)θ

−y(i

))2=

12m∑

i=0m

(xθ−

y)2j(\theta) = \frac\sum^m_(x^\theta - y^)^2=\frac\sum_^m(x\theta - y)^2

j(θ)=2

m1​i

=0∑m

​(x(

i)θ−

y(i)

)2=2

m1​i

=0∑m

​(xθ

−y)2

上述代價函式其實就是是預估值與真實值得偏差,除2m而不是m得原因是為了之後好求導。(當然求解的方法中不是所有都要求導的)

線性回歸的目標:求得合適的θ

\theta

θ,使得j(θ

\theta

θ)最小。得到的θ

\theta

θ代回到h(x)中,就可以得到線性的模型。

求解方法

梯度下降法

根據偏導得定義,使用迭代的方法求解。首先給θ

\theta

θ乙個初值,然後根據以下公式進行迭代:θ(i

)=θ(

i)−α

δjδθ

(i)\theta^ = \theta^-\alpha\frac}

θ(i)=θ

(i)−

αδθ(

i)δj

​其中δjδ

θ(i)

\frac}

δθ(i)δ

j​是θ (i

)\theta^

θ(i)

方向的偏導,α

\alpha

α為學習效率,這個值得大小需要手動嘗試。如果α

\alpha

α太大。可能不收斂,α

\alpha

α太小那麼收斂速度太慢。可以嘗試0.001,0.01,0.1,0.3,1等值

為了好表示,上述的i記為j

式中δ jδ

θ(j)

=1m∑

i=0m

(x(i

)θ−y

(i))

xj(i

)\frac} = \frac\sum_^m(x^\theta - y^)x^_j

δθ(j)δ

j​=m

1​i=

0∑m​

(x(i

)θ−y

(i))

xj(i

)​上述的求導公式比較繁瑣,可以用矩陣的方式表示:θ=θ

−αm(

xθ−y

)x\theta = \theta - \frac(x\theta - y)x

θ=θ−mα

​(xθ

−y)x

有了以上公式就可以很容易的使用python的numpy庫進行運算了。可以設定迭代次數為終止條件,也可以設定前一次和這一次θ

\theta

θ的變化量小於某個值(比如0.01)作為終止條件。

以下是乙個簡單的實現,求解的問題屬性只有1個,除了預設的1.

import numpy as np

import matplotlib.pyplot as plt

#樣本x = np.array([1

,3,5

,7,8

,10])

y = np.array([3

,6,9

,12,15

,20])

#矩陣x

x = np.column_stack(

(np.array([1

,1,1

,1,1

,1])

,x))

#m為樣本的數量

m = x.shape[0]

#學習效率

alpha =

0.01

#初始化theta

theta =[0

,0]#更新theta

newtheta = theta - alpha / m *

(x @ theta - y) @ x

#計數,判斷迭代了多少次

cnt =

1#迭代的總次數

total =

100#代價函式的截斷誤差

precision =

0.01

#迭代while np.

any(newtheta - theta > precision)

and cnt < total:

theta = newtheta

newtheta = theta - alpha / m *

(x @ theta - y) @ x

cnt = cnt +

1#獲得估計的y值

predy = x @ newtheta

plt.scatter(x, y)

plt.plot(x, predy)

plt.show(

)

線性回歸的結果如下:

2.使用正規方程

θ =(

xtx)

−1xt

y\theta = (x^tx)^x^ty

θ=(xtx

)−1x

ty這個方法實現起來簡單,但是當規模太大的時候,複雜度太高。吳恩達對這個問題表示當特徵值的個數大於萬以上,就考慮其他方法了。

以下是這個方法的實現,直接使用梯度下降法的例子,我們可以直觀的看到他們的回歸的結果。為了**的簡練,只寫了這個演算法求解θ

\theta

θ的**。

theta1 = np.linalg.inv(x.t@x)@x.t@y

predy1 = x @ theta1

影象如下:

藍色的直線是上述梯度下降法求解的歸回直線,橙色的是正規方程求解的直線,我們可以看到,兩條直線十分接近,幾乎重疊了。

吳恩達機器學習筆記 多元線性回歸

之前的文章中已經講述了簡單的一元線性回歸的基礎知識,現在我們來繼續討論多元線性回歸。本文針對吳恩達機器學習第二週課程多元線性回歸部分。所謂多元線性回歸正如其名字一樣,就是說這裡的變數是多個的,下面介紹一下如何表示含有多個變數情況下的假設函式 h theta x theta 0 theta 1x 1 ...

吳恩達 多元線性回歸

練習1還包括乙個房屋 資料集,其中有2個變數 房子的大小,臥室的數量 和目標 房子的 我們使用我們已經應用的技術來分析資料集 匯入資料集並檢視 把資料進行歸一化 處理資料得到x,y與theta data2.insert 0,one 1 cols data2.shape 1 x2 data2.iloc...

吳恩達機器學習筆記 多變數線性回歸

目錄前言 一 多維特徵 二 多變數梯度下降 1.代價函式 2.批量梯度下降演算法 3.演示 未驗證 三 特徵縮放 幫助梯度下降演算法更快收斂 1.為什麼要進行特徵縮放 2.特徵縮放的幾種方法 3.進行特徵縮放的注意事項 總結 目前為止,我們 了單變數 特徵的回歸模型,現在我們對房價模型增加更多的特徵...