首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有公域数学的OLS多元线性回归

具有公域数学的OLS多元线性回归
EN

Stack Overflow用户
提问于 2016-05-19 10:05:03
回答 3查看 1.5K关注 0票数 1

目前,我有一个公共-数学2.1的依赖,但我想升级到共用-数学3.6。不幸的是,有些测试案例不再起作用了。我知道是什么导致了我的问题,但我不知道如何相应地更改测试用例,以测试正确的行为。

我有以下测试代码:

代码语言:javascript
复制
@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);
    } 
}

升级到公用-数学3.6之后,OLSMultipleLinearRegression将检查给定的矩阵x和向量y以获得有效的内容。此验证在消息中失败:

没有足够的数据(4行)用于这许多预测器(4个预测器)

为了纠正测试用例,我需要更改什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-12 22:12:52

这是Commons 3.x中的一个bug。当模型中没有截距时,只要设计矩阵不是奇异的,等于回归器数目的观测数应该是可以的。在您的示例中,我认为您的意思是第三行为{0,0,1,0} (否则设计矩阵为单数)。通过对数据和应用于帕丘斯氏针中的代码修补程序的更改,您的测试成功了。这个bug正在作为数学-1392在公共数学中被跟踪。

票数 2
EN

Stack Overflow用户

发布于 2016-08-21 06:13:43

样本数必须大于变量数。显然你的测试用例不正确。你必须至少再添加一个样本。如果你改变了

代码语言:javascript
复制
double[][] x = { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 0, 1 }, {  0, 0, 0, 1 } };

代码语言:javascript
复制
double[][] x = { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 0, 1 }, {  0, 0, 0, 1 }, {1,0,0,0} };

应该管用的。(虽然我没有测试)。

票数 0
EN

Stack Overflow用户

发布于 2017-04-28 02:14:15

我想第三行x应该是0010而不是0001?

但是,如果您将x更改为

double x={ 1,0,0,0 },{ 0,1,0,0 },{ 0,0,1,1 },{ 0,0,0,1 };

把你变成

double[] y={ 1,2,3,4,10 };

最后一个元素是其他元素的和,那么它就工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37320008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档