Python 拟合多重分布

Python 拟合多重分布,python,numpy,scipy,data-fitting,Python,Numpy,Scipy,Data Fitting,我有一种情况,两个或多个nd数组,带有一些系数,应该加起来(大致)成为第三个数组 array1*c1 + array2*c2 ... = array3 我正在寻找使前两个数组最接近的c1和c2。我确信在scipy中存在这样做的方法,但我不确定从哪里开始。是否有具体的模块我应该开始 这只是线性回归(http://en.wikipedia.org/wiki/Ordinary_least_squares) 让矩阵Abe具有array1、array2、… 将向量a设为array3并将x设为列向量[c1

我有一种情况,两个或多个nd数组,带有一些系数,应该加起来(大致)成为第三个数组

array1*c1 + array2*c2 ... = array3

我正在寻找使前两个数组最接近的
c1
c2
。我确信在scipy中存在这样做的方法,但我不确定从哪里开始。是否有具体的模块我应该开始

这只是线性回归(http://en.wikipedia.org/wiki/Ordinary_least_squares)

让矩阵
A
be具有
array1、array2、…
将向量
a
设为
array3
并将
x
设为列向量
[c1,c2,…]”

您想解决问题
min{x}(Ax-a)^2

求导数并将其设置为零将得到
0=A'Ax-A'A
,这将给出解决方案
x=(A'A)^{-1}A'A

在numpy中,这是
numpy.linalg.solve(numpy.dot(A.T,A),numpy.dot(A.T,A))
为您解决这个问题。该函数的面向对象包装器以及更高级的回归模型在和中都可用


(免责声明:我是一名scikit学习开发人员,因此这不是有史以来最公正的建议。)

不确定如何实现,但请查看scipy中的
optimize.fsolve
。制作一个返回
array3-array1*c1+array2*c2(…)
的函数,因为fsolve找到根(即,其中function=0),并通过初始猜测传递fsolve此函数。您可能必须在返回之前对数组求和,这可能会导致不良行为,例如,数组包含相等的+ve和-ve值。因此,这只是一个建议。允许错误与数组值关联的东西也会有所帮助,我假设后面的选项会这样做?@Shep:你这是什么意思?基本上是在寻找一种方法来加权我拟合的值。但也许这是另一个问题,你的意思是每个样本的重量,它决定了它对发现的功能有多大的影响?我认为scikit中的一些回归学习者可以做到这一点,但我不确定它们对您有多有用(我更喜欢分类而不是回归)。权重在分类中也绝对重要,所以我假设它存在。