参照程序清单8-2操作时,错误的把“.I”写成了“.T”,导致最终结果完全不对。
#程序清单8-2 局部加权线性回归函数 20180424
def lwlr(testPoint,xArr,yArr,k=1.0):
xMat = mat(xArr);yMat = mat(yArr).T
m =shape(xMat)[0]
weights = mat(eye((m))) #创建对角矩阵
for j in range(m):
diffMat = testPoint - xMat[j,:]
weights[j,j] = exp(diffMat*diffMat.T/(-2.0*k**2))
xTx = xMat.T * (weights* xMat)
if linalg.det(xTx) == 0.0:
print("This matrix is singular,cannot do inverse")
return
ws = xTx.T * (xMat.T *(weights * yMat))
return testPoint*ws
运行结果:
>>> regression.lwlr(xArr[0],xArr,yArr,1.0)
matrix([[149003.91869237]])
>>> regression.lwlr(xArr[0],xArr,yArr,0.001)
matrix([[44.52806988]])
修改语句:
#程序清单8-2