一、問題闡述
緊接上篇,本文使用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...