具有拉格朗日乘数估计的Python非线性方程

时间:2011-10-19 12:59:05

标签: python math probability newtons-method

我已经在这件事上挣扎了几天......但无济于事。我不太擅长困难的数学,更不用说这种难度了。

我正在尝试为我的毕业作业实现python中彩票的最大熵应用程序,尽管该项目的重点是实现一些数据挖掘技术(决策树,Apriori,kmeans)一些alreadey完成,我只是没有机会去做更高级的事......但我想这对我来说太先进了。

所以,我的问题是如何从下面的论文中解决非线性方程(8)

reference1:http://eprints.ecs.soton.ac.uk/901/01/paper05.pdf

该方法基于以下论文

reference2:http://www.stanford.edu/~cover/papers/paper91.pdf

任何帮助(理论上的或°)都将深表感谢。 感谢

1 个答案:

答案 0 :(得分:4)

您需要结合使用公式7到9。方程中唯一未知的是拉格朗日乘数,即lambda。其他一切都取决于可用的经验数据,因此只是数字。

给定lambdas的一组值,可以计算G(j,r)和雅可比J(j,i,r,s)。反过来,如果你知道残差和雅可比,你可以使用牛顿方法,在等式9中给出,找到方程组的根,即λ的那些值,使得G(j,r)= 0。

因此,您使用lambda值的初始猜测来计算其他术语,然后使用这些术语来更新您的猜测。使用等式7和8完全没有概念上的挑战 - 只需插入值 - 但它们会增加很多数字,所以需要注意一些。

等式9有点棘手,因为它写得不是很清楚。由于本文描述了一个方程组,你通常希望求解一个线性方程:

J * d_lambda = -G

其中d_lambda是猜测变化的向量,G是函数值的向量,J是雅可比值的矩阵。论文中的符号非常混乱,模糊了应该是一个简单的表达。您可以通过引入统一索引 a 来替换索引 i s ,从而使其更清晰;作者在该方法的讨论中提到了这一变化,给出了第4页第二段中计算综合指数的公式。

总的来说,程序变为(使用统一索引):

  1. 选择一些lambdas作为您的初步猜测。可能是零或随机数。
  2. 评估G(a)和J(a,b)。
  3. 解决线性方程组,以获得对猜测的更新。
  4. 如果与您的猜测相比更新很小,请停止。否则,确定新的猜测并返回步骤2.
  5. 使用Numpy看起来非常可行。本文讨论了使用并行计算策略,但这是十多年前的事了;这似乎是今天一个小得多的问题。