python - 通过矩阵代数拟合原点

标签 python

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

最佳答案

对于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) .

关于python - 通过矩阵代数拟合原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852079/

相关文章:

python - Keras 密集层中的单位

python - 将列表写入文件以供日后重用

python - 如何使用 pySerial 在 python 中配置 tty?

python - Python中各种容器类型中的__len__方法是如何实现的?

python - pandas 中的数据框成对乘法?

python - 显示一个八进制值作为它的字符串表示

python - 潜入 python 和-或失败

python - 如何使用 Twisted Trial 对 Autobahn 应用程序进行单元测试?

python - Django 的 AuthenticationMiddleware 有什么技巧

python - 对如何在实例之间共享和修改类级别数据感到困惑。