從只含一個自變量X的情況開始,成為一元線性回歸。假定回歸模型為
Y=b0+b1X+e
b0,b1為未知參數(shù)视搏,b0為常數(shù)項或截距亥啦,b1為回歸系數(shù),e為隨機(jī)誤差喷鸽。實(shí)際工作中,也常使用變量變換法。即在散點(diǎn)圖與直線趨勢差距較大時异吻,設(shè)法對自變量乃至因變量進(jìn)行適當(dāng)?shù)淖儞Q,使變換后的散點(diǎn)圖更加接近與直線喜庞。這樣對變化后的新變量進(jìn)行線性回歸分析诀浪,再回到原變量。
假定Y = b0+b1X+e
л和э分別為x和y的算術(shù)平均延都,故可以改寫為Yi=β0+β1(Xi-л)+ei (i = 1,....,n)
其關(guān)系是β0=b0+b1л,β1=b1雷猪,故如估計了β0和β1,可以得到b0和b1的估計晰房。
當(dāng)X=Xi處取值為Yi,估計值我們有Γ表示求摇,這樣我們就有偏離Yi-Γ,我們當(dāng)然希望偏離越小越好殊者。衡量這種偏離大小的一個合理的單一指標(biāo)為他們的平方和(通過平方去掉符號的影響与境,若簡單求和,則正負(fù)偏離抵消了)
最優(yōu)猖吴,即導(dǎo)數(shù)等于0.
我們將這個平方和求導(dǎo)摔刁,且認(rèn)定該導(dǎo)數(shù)為0,得到的β0海蔽,β1,使得偏離最小共屈。
用線性代數(shù)的思想就是,假定輸入數(shù)據(jù)存在矩陣X中党窜,而回歸系數(shù)存放在向量w中拗引。那么對于給定的數(shù)據(jù)X1,預(yù)測結(jié)果將會通過Y1=(X.transpose)w給出。偏差的平方為
如果對w求導(dǎo)幌衣,得到
為求最優(yōu)矾削,令其等于0,則
上述公式中包含
因此這個方程只在逆矩陣存在的情況使用。因為矩陣的逆矩陣可能不存在怔软,因此必須要在代碼中對此作出判斷垦细。
用python進(jìn)行代碼的實(shí)現(xiàn)
from numpy import *
def loadDataSet(filename):
numFeat = len(open(filename).readline().split(','))-1
datMat = []; labelMat = []
fr = open(filename)
for line in fr.readlines():
lineArr = []
curLine = line.strip().split(',')
for i in range(numFeat):
lineArr.append(float(curLine[i]))
datMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return datMat,labelMat
def standRegres(xArr,yArr):
xMat = mat(xArr);yMat = mat(yArr).T
xTx = xMat.T*xMat
if linalg.det(xTx) == 0.0:
print("This matrix is singular, can not inverse")
return
ws = xTx.I * (xMat.T*yMat)
return ws
xArr,yArr = loadDataSet('gmvusers3.csv')
print("xArr is ",xArr)
print("yArr is ",yArr)
ws = standRegres(xArr,yArr)
print(ws)
xMat = mat(xArr)
yMat = mat(yArr)
yHat =xMat*ws
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xMat[:,1].flatten().A[0],yMat.T[:,0].flatten().A[0])
xCopy = xMat.copy()
xCopy.sort(0)
yHat=xCopy*ws
ax.plot(xCopy[:,1],yHat,'b-')
print(corrcoef(yHat.T,yMat))
plt.show()
感謝高斯,或者勒讓德挡逼,歷史無法評說括改,但這種思想是一種用于數(shù)據(jù)擬合的霸氣方法。這個事情的精妙之處就是將數(shù)理統(tǒng)計和矩陣完美的結(jié)合在了一起家坎,通過矩陣對最小二乘法的描述嘱能,為數(shù)據(jù)擬合找到了簡單粗暴的路徑,線性回歸虱疏。
下面簡要列出梯度下降法和最小二乘法的主要區(qū)別
梯度下降法 | 最小二乘法 |
---|---|
必須指定learning rate | 無需指定learning rate |
必須訓(xùn)練多次 | 無需訓(xùn)練多次 |
無 | 必須可逆XTX |
對多維度數(shù)據(jù)效果好 | 多維度數(shù)據(jù)效果差(維度>1000) |