问题标签 [apache-commons-math]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
714 浏览

java - 线程安全警告

org.apache.commons.math3.distribution.NormalDistribution在一个大型分布式 Scala & Akka 应用程序中使用。在调试过程sample()中,我发现偶尔会返回 NaN,它会默默传播并导致线程挂起org.apache.commons.math3.ode.nonstiff.DormandPrince853Integrator

NaN 可以通过并行集合简单地复制(不会在顺序代码中发生):

显然,移动val normal内部foreach解决了这种情况下的问题。

我查看了文档,但看不到任何警告我此类问题的内容。我是否未能掌握有关线程安全的更基本概念?不用说我现在正在检查 NaN。

0 投票
1 回答
2179 浏览

java - 如何使用 apache 的 commons.math FastFourierTransformer 进行时间序列预测

我想使用 FastFourierTransformation 来识别模式,从而预测我的监控指标的未来值。我想做的是:

我监控传入的流量负载,这是季节性重复的(白天的高选择),在一周内有一个额外的趋势(周末的流量较低,也是季节性重复的)。虽然我尝试了一些增强回归算法,但我也想使用 FFT 来识别最重要的系数,从而识别这两个最重要的频率,然后尝试推断以预测流量不久的将来。apache.commons.math3.transform.FastFourierTransformation尽管我在数学方面的理论背景给我带来了一些麻烦,但我正在为此苦苦挣扎。假设我使用 adoube [] array来存储观察到的时间范围内的最新流量负载,我使用以下代码:

double [] initialSignal = getMonitoringData(timeslide);

FastFourierTransformer fft = new FastFourierTransformer(DftNormalization.STANDARD);

Complex [] result = fft.transform(initialSignal, TransformType.FORWARD);

但是我不熟悉Complex []数组代表什么。数组中每个 Complex 对象的虚属性是否代表相关的正弦系数?那么,如果我想采用去噪的初始信号,我只需将 Complex [] 结果数组的不太重要的系数设置为零?但是,如果我有以下

Complex [] denoised = fft.transform(importantCoefficiants, TransformType.INVERSE);

结果仍然是一个复杂的数组。如何获得时间序列的新转换的 x(t) 值?x(t+1), x(t+2) ... x(t+n) values在对初始时间序列进行去噪后,我如何推断以预测?

0 投票
1 回答
429 浏览

java - Java中的公式计算

我确实有数学公式,例如,

(3.14*2.500^2)/4

IF(45.0=0,0,1/42.9^2)

这是从Excel公式派生的公式。

我只需要使用 java 来获得这些公式的结果。

我遇到有用的链接

你能告诉我最好的方法吗?

  1. 我们有什么可以直接输入这个公式并得到结果的地方吗?
  2. 我是否需要对字符串进行 Tokanize 并使用基本的 Java Math 包进行计算?
  3. 如果我只需要 Tokanize,那么哪个是最好的基本数学包或 Commons Math?
0 投票
1 回答
1890 浏览

java - 计算 t 逆

我正在尝试使用 commons-math 计算 2 尾学生分布的倒数。我正在使用 Excel 来比较值并验证我的结果是否正确。

所以使用 excel 计算 5 个自由度和 95.45% 的 TINV 我使用

并得到结果:2.64865

像这样使用公共数学:

我得到结果:2.08913

我可能显然做错了什么。我并不是那么精通数学,但我需要将一个 Excel 工作表公式移植到 Java 以用于一个项目并且被困在这个问题上。

我应该使用什么来获得与 TINV 值完全相同的结果?我错过了什么。

0 投票
1 回答
1168 浏览

java - 增量浮点均值算法的选择(java)

我想计算双打流的平均值。这是一个简单的任务,只需要存储一个 double 和一个 int。我正在使用 apache commons SummaryStatistics 类来执行此操作。但是,在测试时,我注意到 SummaryStatistics 的平均值有浮点错误,而我自己的 python 实现没有。经过进一步检查,我发现 commons 正在使用以下算法的一个版本:

这有时会导致小的浮点错误,例如

这也是番石榴实用程序 DoubleMath.mean 使用的均值算法。我觉得很奇怪,他们都使用上述算法而不是更天真的算法:

我可以想到为什么人们可能更喜欢前一种算法的原因有两个。一个是,如果您在流式传输期间大量查询平均值,则只需要复制一个值可能比进行除法更有效,除非更新步骤似乎要慢得多,这几乎总是超过这个成本(注意,我实际上并没有计时差异)。

另一种解释是前者防止溢出问题。浮点数似乎并非如此,至多这应该会导致均值下降。如果出现此错误,我们应该能够将结果与使用 BigDecimal 类完成的相同 cumMean 进行比较。这导致以下功能:

这应该是我们能得到的最准确的平均值。从以下代码的一些轶事运行来看,平均值和最准确的代码之间似乎没有显着差异。有趣的是,它们往往与数字上的准确平均值不同,而且两者总是比另一个更接近。

有没有人有理由解释为什么 apache commons 和 guava 都选择了前一种方法而不是后者?

编辑:我的问题的答案似乎很清楚,答案是 Knuth 在 The Art of Programming Vol II 4.2.2 (15) 中提出了它(感谢 Louis Wasserman 提供查看番石榴源的提示)。然而,在书中,Knuth 提出了这种计算均值的方法来引导标准差的稳健计算,不一定说这是最优均值计算。基于阅读更多章节,我实现了第四个意思:

执行与上述相同的测试(几次,没有统计学意义),我得到与 BigDecimal 实现完全相同的结果。我可以想象 knuth 均值更新比使用更复杂的求和方法更快,但更复杂的方法在经验上似乎更准确地估计均值,我天真地期望这也会导致更好的标准差更新。除了可能更快之外,还有其他理由使用 knuth 方法吗?

0 投票
2 回答
107 浏览

java - Commons Math 的内存要求:Apache Commons 数学库

我想知道 Apache Commons Math 中的所有操作是否都在内存操作中。我对 OLSMultipleLinearRegression 并将其用于大数据特别感兴趣。

还有任何现有的 JAVA API 可用于对大数据运行回归。

0 投票
1 回答
745 浏览

java - 您如何使用 Apache Commons Math 3.0+ 通过 Jacobian 矩阵求解 ODE?

关于使用雅可比近似求解 ODE 的特定 Java 库,以前的 Apache Commons Math 库 2.2 很直观,也有一些清晰的示例:

常微分方程积分

但是现在不推荐使用 2.2,最近的库 3.0+

阿帕奇公共数学 3.0

特别是包:

org.apache.commons.math3.ode

org.apache.commons.math3.ode.events

org.apache.commons.math3.ode.nonstiff

是替代品,但似乎要复杂得多。我认为新的 ODE 版本的动机是对数据结构和方法进行概括,但很难理解某些类是如何一起使用的(例如 MainStateJacobianProvider、ExpandableStatefulODE、ParameterizedODE),而且在任何地方都没有它的例子Apache 没有更新他们的信息页面。API 文档的信息量不是很大,而且似乎也很模糊。

因此,我不会听起来像是在抱怨所有事情,而是提出一个具体的问题,您将如何使用 3.0 库从上面使用 2.2 演示的示例之一重新编码相同的问题?

这是代码:

0 投票
2 回答
1053 浏览

algorithm - apache commons math的k-means clusterer是否包含mean方法?

我必须获得 k 均值聚类的方法。目前我正在使用实现 k-means plus plus 聚类算法的 apache commons 数学库。有人知道,是否有一种简单的方法可以在与该库进行集群后获得方法,或者让我自己实现它?
如果没有,你能解释一下如何计算它或给我一个代码示例吗?

0 投票
1 回答
75 浏览

java - 使用 MillerUpdatingRegression 类时的 ArrayIndexOutOfBounds 异常

我们已经尝试在我们的一个项目中使用 MillerUpdatingRegression 类并遇到了问题。在创建类的实例、提供期望的变量数量并从整个样本集中添加观察值后,我们调用“regress(int[])”方法,通知回归过程我们希望包含哪些变量(整个预测器集的子集)。

当我们这样做时,我们会在该过程中收到一个 ArrayIndexOutOfBounds 异常,因为预期的变量数(nvars,在 MillerUpdatingRegression 类被实例化时提供)小于传递给“regress(int[])”方法的变量数. 我们的理解是,这个整数数组可以是所有观察结果的预测指标的子集。

有谁知道我们在这里缺少什么?

==== 已更新代码 ====

double predictorData[][] = new double[n][125]; double predictions[] = new double[n];

//predictorData is a [n x 125] two-dimensional array of //features/predictors with n samples and 125 predictors //predictionsArray is a n-length array of predictions //for the sample set

int numberOfPredictorVariables = 125; boolean includeConstantWhenBuildingModel = true; MillerUpdatingRegression regression = new MillerUpdatingRegression(numberOfPredictorVariables,includeConstantWhenBuildingModel); regression.addObservations(predictorData,predictionsArray)

int predictorsToIncludeInRegression[] = {0,3,9,11}; regression.regress(predictorsToIncludeInRegression); //this is where the ArrayIndexOutOfBounds exception is generated

0 投票
0 回答
310 浏览

java - BobyQA 更改起点并计算次优结果?

我正在尝试使用 Apache Commons Math 的 BobyQA 算法进行有界非线性优化。

我知道最佳值(使用matlab的信任范围反射算法找到它)并且我对以下内容感到困惑:

我将 BobyQA 的起点设置为最佳,它评估的第一个点不是我指定的起点,而是更改的次优起点(它更改了第一个参数)。而且,更进一步,它没有找到最小值。

示例(最优的最小二乘 - 起点):

lsq(optimal) = 5.526374615719567E9 for [1.0141E-7, 81.15, 119.03, 32.0, 0.36652, 4.317, 8.5167, 17.3, 16.470001, 100.13, 11.242, 29.042, 18.871, 29.92, 36.147, 87.826, 21.287]

然后我以该起点运行 BobyQA,并在第一次迭代中修改第一个参数(从 1.0141E-7 到 0.026117):

lsq(1) = 1.7374657025186486E19 for [0.02611793333333286, 81.15, 119.03, 32.0, 0.36652, 4.317, 8.5167, 17.3, 16.496117933333334, 100.13, 11.223249066666666, 29.042, 18.871, 29.92, 36.147, 87.826, 21.287]

最后它在以下位置达到次优解决方案:

lsq(274) = 5.526621213826441E9 for [1.0115737485704292E-7, 81.14883064785045, 119.02964714​​352679, 32.00103316109643, 0.36615877961432247, 4.317235538​​618653, 8.516900515414736, 17.293306813210172, 16.496079045753113, 100.12980568809833, 11.22341107874299, 29.042103684597272, 18.870381140825014, 29.919895452015545, 36.14745517499619, 87.82657624240575, 21.288471755903668]

其中 5.5266E9 大于 5.5263E9。

我究竟做错了什么?

谢谢,

伊戈尔