文章来源:http://pocore.com/blog/article_529.html
链接普通最小二乘法
系数求法公式:
矩阵的逆可能并不存在,因此必须要在代码中对此作出判断
xMat.T是xMat的转置 2*n
矩阵行列式 xTx=xMat.T*xMat 2*n * n*2 =2*2
xTx:
[[200. 97.6638 ]
[ 97.6638 64.76838373]]
求矩阵的行列式,矩阵行列式|A|=0,则矩阵不可逆
判断 np.linalg.det(xTx)==0.0
求得为:3415.4589150723973
按照公式求出系数矩阵
ws=xTx.I*(xMat.T*yMat)
ws=
[[3.00774324]
[1.69532264]]
画出散点和拟合直线
XMat:n*2
YMat:n*1
yHat=XMat*ws; 求出用拟合系数得到的y值
对照公式解释如下:
[[1. 0.067732]
[1. 0.42781 ]
….]
* [[3.00774324]
[1.69532264]]
y=ax+b来说,
1. 是b的系数 3.00774324是b
0.067732是x 1.69532264是a
求得的yHat如下,对应上面公式的一系列y值
[[3.12257084]
[3.73301922]
….]
作图参数:
x:XMat[:,1].flatten().A[0]
y:YMat.T[:,0].flatten().A[0]
ax.scatter(XMat[:,1].flatten().A[0],YMat.T[:,0].flatten().A[0])
ax.plot(XMat[:,1].flatten().A[0],yHat)
画出最终图如下:
出现新的点需要预测则带入yHat=XMat*ws;求出即可
评估拟合直线的好坏(相关系数)
NumPy库提供了相关系数的计算方法 corrcoef(yEstimate,
yActual)
前一个是参数预测值,后一个参数是真实值,相关系数越大则拟合效果越好
上面这个例子的相关系数corrcoef计算得到
relate=np.corrcoef(yHat.T,
YMat);
[[1. 0.98647356]
[0.98647356 1. ]]
即相关系数为0.98647356
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177859.html原文链接:https://javaforall.net
