gpt4 book ai didi

java - 使用 commons-math 进行 OLS 多元线性回归

转载 作者:行者123 更新时间:2023-11-30 02:55:26 24 4
gpt4 key购买 nike

目前我依赖于 commons-math 2.1,但我想将其升级到 commons-math 3.6。不幸的是,有些测试用例不再有效。我知道是什么导致了我的问题,但我不知道如何相应地更改测试用例以像以前一样测试正确的行为。

我有以下测试代码:

@Test
public void testIdentityMatrix() {
double[][] x = { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 0, 1 }, { 0, 0, 0, 1 } };
double[] y = { 1, 2, 3, 4 };

OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
regression.setNoIntercept(true);
regression.newSampleData(y, x);

double[] b = regression.estimateRegressionParameters();
for (int i = 0; i < y.length; i++)
{
assertEquals(b[i], y[i], 0.001);
}
}

升级到 commons-math 3.6 后,OLSMultipleLinearRegression 检查给定矩阵 x 和 vector y 的有效内容。此验证失败并显示消息:

not enough data (4 rows) for this many predictors (4 predictors)

我需要更改什么来纠正该测试用例?

最佳答案

这是 Commons Math 3.x 中的一个错误。当模型中没有截距时,只要设计矩阵不是奇异的,观测值的数量等于回归变量的数量就应该可以。在您的示例中,我认为您的意思是第三个 x 行为 {0,0,1,0} (否则设计矩阵是奇异的)。对您的数据进行此更改并在 Hipparchus fix 中应用代码补丁你的测试成功了。此错误被跟踪为 MATH-1392在公共(public)数学中。

关于java - 使用 commons-math 进行 OLS 多元线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com