在Python中对多维数据样本应用非线性回归

在Python中对多维数据样本应用非线性回归,python,numpy,scipy,Python,Numpy,Scipy,我已经安装了Numpy和SciPy,但我不太了解他们关于polyfit的文档 举个例子,下面是我的三个数据示例: [-0.042780748663101636, -0.0040771571786609945, -0.00506567946276074] [0.042780748663101636, -0.0044771571786609945, -0.10506567946276074] [0.542780748663101636, -0.005771571786609945, 0.305065

我已经安装了Numpy和SciPy,但我不太了解他们关于
polyfit
的文档

举个例子,下面是我的三个数据示例:

[-0.042780748663101636, -0.0040771571786609945, -0.00506567946276074]
[0.042780748663101636, -0.0044771571786609945, -0.10506567946276074]
[0.542780748663101636, -0.005771571786609945, 0.30506567946276074]
[-0.342780748663101636, -0.0304077157178660995, 0.90506567946276074]
前两列是示例特征,第三列是输出,我的目标是获得一个函数,该函数可以接受两个参数(前两列)并返回其预测(输出)

有简单的例子吗

===============================编辑======================

请注意,我需要拟合曲线之类的东西,而不仅仅是直线。多项式应该是这样的(n=3):

不是:

x1
x2
x3
是一个样本的特征,
y
是输出

试试像这样的东西

编辑:添加了一个使用线性回归结果估计输出的示例函数

import numpy as np
data =np.array(
[[-0.042780748663101636, -0.0040771571786609945, -0.00506567946276074],
[0.042780748663101636, -0.0044771571786609945, -0.10506567946276074],
[0.542780748663101636, -0.005771571786609945, 0.30506567946276074],
[-0.342780748663101636, -0.0304077157178660995, 0.90506567946276074]])

coefficient = data[:,0:2]
dependent = data[:,-1]

x,residuals,rank,s = np.linalg.lstsq(coefficient,dependent)

def f(x,u,v):
    return u*x[0] + v*x[1]

for datum in data:
    print f(x,*datum[0:2])

>>> x
array([  0.16991146, -30.18923739])
>>> residuals
array([ 0.07941146])
>>> rank
2
>>> s
array([ 0.64490113,  0.02944663])
用你的系数创建的函数

0.115817326583
0.142430900298
0.266464019171
0.859743371665
更多信息可以在我发表评论的网站上找到

编辑2:将数据拟合到任意模型

编辑3:使我的模型成为易于理解的功能

编辑4:使代码更容易阅读/将模型更改为二次拟合,但您应该能够阅读此代码并知道如何使其最小化您现在想要的任何剩余

人为的例子:

import numpy as np
from scipy.optimize import leastsq

data =np.array(
[[-0.042780748663101636, -0.0040771571786609945, -0.00506567946276074],
[0.042780748663101636, -0.0044771571786609945, -0.10506567946276074],
[0.542780748663101636, -0.005771571786609945, 0.30506567946276074],
[-0.342780748663101636, -0.0304077157178660995, 0.90506567946276074]])

coefficient = data[:,0:2]
dependent = data[:,-1]

def model(p,x):
    a,b,c = p
    u = x[:,0]
    v = x[:,1]
    return (a*u**2 + b*v + c)

def residuals(p, y, x):
    a,b,c = p
    err = y - model(p,x)
    return err

p0 = np.array([2,3,4]) #some initial guess

p = leastsq(residuals, p0, args=(dependent, coefficient))[0]

def f(p,x):
    return p[0]*x[0] + p[1]*x[1] + p[2]

for x in coefficient:
    print f(p,x)
给予


@我建议使用Python的GEKKO包来执行非线性多元回归分析。这里可以找到它的应用示例:这个
f(x,u,v)
只适合直线,是吗?我需要拟合一条曲线。好的,我将添加到我的答案中。好的,添加了任意模型示例。(尽管你在题目中明确提到了线性回归)谢谢@seth,我认为线性回归包括任意直线和曲线。不是吗?线性回归:-)。一个变量是直线,两个变量是我们熟悉的可视化平面,更高的维度也是平面,但是超平面。
N
维度线性回归将尝试使用最小二乘法
y=px
,即
y=p1*x1+p2*x2+。。。pn*xn
其中p是模型的参数,如
a,b,c,
x1…xn
N
维输入向量的元素
y
是依赖向量。看见
0.115817326583
0.142430900298
0.266464019171
0.859743371665
import numpy as np
from scipy.optimize import leastsq

data =np.array(
[[-0.042780748663101636, -0.0040771571786609945, -0.00506567946276074],
[0.042780748663101636, -0.0044771571786609945, -0.10506567946276074],
[0.542780748663101636, -0.005771571786609945, 0.30506567946276074],
[-0.342780748663101636, -0.0304077157178660995, 0.90506567946276074]])

coefficient = data[:,0:2]
dependent = data[:,-1]

def model(p,x):
    a,b,c = p
    u = x[:,0]
    v = x[:,1]
    return (a*u**2 + b*v + c)

def residuals(p, y, x):
    a,b,c = p
    err = y - model(p,x)
    return err

p0 = np.array([2,3,4]) #some initial guess

p = leastsq(residuals, p0, args=(dependent, coefficient))[0]

def f(p,x):
    return p[0]*x[0] + p[1]*x[1] + p[2]

for x in coefficient:
    print f(p,x)
-0.108798280153
-0.00470479385807
0.570237823475
0.413016072653