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
m1i
=0∑m
(x(
i)θ−
y(i)
)2=2
m1i
=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
1i=
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.進行特徵縮放的注意事項 總結 目前為止,我們 了單變數 特徵的回歸模型,現在我們對房價模型增加更多的特徵...