线性回归的最直接目标就是最小二乘,也即均方误差最小。sum( (y-x.T*w)**2)最小
这个式子是极值点,导数为0,我们求得w=(xTx)-1 * x * y
关键在于矩阵的划分,
一般的线性关系,可以理解为y=wx+b
通过进一步抽象可以转换为y= [w,b]*[x,1] .T = WX
from numpy import *
'''
filename文件格式类似
1 0.12134 0.2141
1 0.62131 0.9222
1 0.13134 0.7333
'''
def txt2data(filename):
filename='ex0.txt'
lineArray=open(filename).readlines()
yArr=[]
xArr=[]
#y=wx+b ---可转换成--> y=[w,b]*[x,1].T---可转换成-->y=WX
for line in lineArray:
pointData=line.strip().split('\t') #去除\n,分割字串
xBlock=[]
xBlock.append(float(pointData[0]))
xBlock.append(float(pointData[1]))
xArr.append(xBlock)
yArr.append(float(pointData[2]))
return xArr,yArr
def linearRegression(xArr,yArr):
xMat=mat(xArr) #200*2
yMat=mat(yArr).T #200*1
xTx=xMat.T*xMat
w=xTx.I*xMat.T*yMat # [2*2] [2*200] [200*1] =[2*1]
yHat=xMat*w #200*2 2*1=200*1
coefMat=corrcoef(yMat.T,yHat.T)
return w, coefMat
参考资料---《机器学习实战》