1

通常我使用以下代码进行线性拟合或二次拟合。有时需要使用 weight=2 对模型 1/x2 进行加权。我想知道我是否可以通过添加一些矩阵代数来强制模型通过原点(显然,如果 weight=0)。谢谢。

import numpy
from pylab import *
data=loadtxt('...')

degree=1
weight=0

x,y,w=data[:,0],data[:,1],1/data[:,0]**weight
n=len(data)
d=degree+1

f=zeros(n*d).reshape((n,d))
for i in range(0,n):
    for j in range(0,d):
        f[i,j]=x[i]**j

q=diag(w)
fT=dot(transpose(f),q)
fTx=dot(fT,f)
fTy=dot(fT,y)
coeffs=dot(inv(fTx),fTy)
4

1 回答 1

1

对于这种情况,通过更改为来weight=0摆脱特征向量中的常数项 。for j in range(0,d)for j in range(1,d)

对于较大的weight术语值,与术语相关的权重1/x^p必须为零,这在普通最小二乘解决方案中可能不会发生。

为了获得最佳 numpy 实践,我建议您zeros(n*d).reshape((n,d))使用zeros( (n,d) )dot(inv(fTx),fTy)替换linalg.solve(fTx,fTy)

于 2013-04-06T16:15:17.650 回答