SingularMatrixException: матрица сингулярна - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь использовать org. apache .commons.math3 OLSMultipleLinearRegression. java:

OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();

Формат данных моих x и y различается на каждой итерации, как показано ниже:

первая итерация:

double[] y = {0.2342342};
double[][]x = { {0.234234234, 0.234165745, 0.234165745}};

Вторая итерация

double[] y = {0.2342342, 0.23423423};
double[][]x = {
    {0.234234234, 0.234165745, 0.234165745},
    {0.234165745, 0.234165745, 0.234165745}
};

Третья итерация

double[] y = {0.2342342, 0.23423423, 0.234234234};
double[][]x = { 
    {0.234234234, 0.234165745, 0.234165745},
    {0.234234234, 0.234165745, 0.234165745},
    {0.234234234, 0.234165745, 0.234165745}
    };

Четвертая итерация

double[] y = {0.2342342, 0.23423423, 0.234234234, 0.242312312};
double[][]x = { 
    {0.234234234, 0.234165745, 0.234165745},
    {0.234234234, 0.234165745, 0.234165745},
    {0.234234234, 0.234165745, 0.234165745},
    {0.234234234, 0.234165745, 0.234165745} 
    };

Вот мой код:

try {
     regression.newSampleData(y, x);
} catch (IllegalArgumentException e) {
     return getFallbackVmAllocationPolicy().isHostOverUtilized(host);
}

double[] estimates = regression.estimateRegressionParameters();

double predictedUtilization = 0.0;

for (int i = 0; i < utilizationHistory.length; i++) {
      predictedUtilization = estimates[0] + (estimates[1] * utilizationHistory[i])
                            + (estimates[2] * ramUtilizationHistory[i]) + (estimates[3] * bwUtilizationHistory[i]);
}

//predictedUtilization *= getSafetyParameter();

addHistoryEntry(host, predictedUtilization);
return predictedUtilization >= 1;

Выполняя это, я получаю исключение, как показано ниже:

org.apache.commons.math3.linear.SingularMatrixException: matrix is singular
at org.apache.commons.math3.linear.QRDecomposition$Solver.solve(QRDecomposition.java:347)
at org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression.calculateBeta(OLSMultipleLinearRegression.java:228)

Как я могу устранить это исключение?

...