機器學習 線性回歸的最小二乘法

2021-07-15 04:40:24 字數 1992 閱讀 6336

一、問題闡述

緊接上篇,本文使用python語言測試該演算法。因此演算法原理不再贅述。上篇博文已經提及損失函式j(θ),對其求關於θ的偏導數並令其等於0,得:

以下演算法便用到此式。

計算過程涉及很多線性代數的定理,主要用到此式:

其中tr表示矩陣的跡(trace)。

二、**實現

from numpy import *

# load data 匯入資料

defloaddataset

(filename):

numfeat = len(open(filename).readline().split('\t')) - 1

datamat = ; labelmat =

fd = open(filename)

for line in fd.readlines():

linearr =

curline = line.strip().split('\t')

for i in range(numfeat):

return datamat, labelmat

# linear regression 計算回歸係數

deflinearregres

(xvec, yvec):

xmat = mat(xvec);ymat = mat(yvec).t;

xtx = xmat.t * xmat;

if linalg.det(xtx) == 0: # 奇異矩陣不能求逆

print('this matrix is singular, cannot do inverse')

return

theta = xtx.i * xmat.t * ymat

return theta

該資料集是《機器學習實戰》第8章中的例子。該例輸入是乙個二維向量x=[x0, x1],輸出為y。其中第一維輸入x0的值總為1.0,表示乙個為常數的偏移量,第二維輸入x1是橫座標值。計算出回歸係數後最終得到模型:y = θ[0] + θ[1] * x1(x0 = 1.0)。繪出散點圖和回歸模型圖程式如下:

import matplotlib.pyplot as plt

from linear_regression import linearregression as lr

from numpy import *

xvec, yvec = lr.loaddataset('ex0.txt')

theta = lr.linearregres(xvec, yvec)

xmat = mat(xvec)

ymat = mat(yvec)

yhat = xmat * theta

fig = plt.figure()

ax = fig.add_subplot(1, 1, 1)

ax.scatter(xmat[:,1].flatten().a[0],ymat.t[:,0].flatten().a[0])

xcopy = xmat.copy()

xcopy.sort(0) # 把點按公升序排列

yhat = xcopy * theta

ax.plot(xcopy[:,1],yhat)

plt.show()

執行結果如下圖:

三、總結

終於跨進機器學習領域的大門啦!剛開始感覺也沒有想象中那麼難,主要是數學基礎要紮實,在此基礎之上多加琢磨,應該不難理解演算法的原理。幸好放假之前惡補了概率論和線性代數,目前課程裡講的一些數學概念我還能聽懂,可能往後學習還要繼續把數學補一補呢!

線性回歸,最小二乘法

回歸的定義 對於乙個點集,使用乙個函式去擬合該點集,使點集與擬合函式間的誤差最小,如果這個函式曲線是一條直線,則是線性回歸,如果曲線是二次曲線,則是二次回歸。廣義線性回歸 廣義線性模型是線性模型的擴充套件,其特點是不強行改變資料的自然度量,資料可以具有非線性和非恆定方差結構 59 主要是通過聯結函式...

線性回歸 最小二乘法(二)

上篇文章中介紹了單變數線性回歸,為什麼說時單變數呢,因為它只有單個特徵,其實在很多場景中只有單各特徵時遠遠不夠的,當存在多個特徵時,我們再使用之前的方法來求特徵係數時是非常麻煩的,需要乙個特徵係數乙個偏導式,而卻最要命的時特性的增長時及其迅猛的,幾 十 幾百 幾千 單變數線性回歸 多變數線性回歸 所...

線性回歸之最小二乘法

線性回歸是很常見的一種回歸,線性回歸可以用來 或者分類,主要解決線性問題。線性回歸過程主要解決的就是如何通過樣本來獲取最佳的擬合線。最常用的方法便是最小二乘法,它是一種數學優化技術,它通過最小化誤差的平方和尋找資料的最佳函式匹配。假設擬合直線為y ax b 對任意樣本點 x i,yi 誤差為e yi...