У меня есть этот код:
@Override
protected boolean isHostOverUtilized(PowerHost host) {
PowerHostUtilizationHistory _host = (PowerHostUtilizationHistory) host;
double[] utilizationHistory = removeZeros(_host.getUtilizationHistory());
double[] ramUtilizationHistory = removeZeros(_host.getRamUtilizationHistory());
double[] bwUtilizationHistory = removeZeros(_host.getBWUtilizationHistory());
OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
final List<double[]> utiLizationList = Arrays.asList(utilizationHistory, ramUtilizationHistory, bwUtilizationHistory);
double x[][] = new double[utilizationHistory.length][3];
for(int i = 0; i< utilizationHistory.length;i++)
{
for(int j=0; j<utiLizationList.size(); j++){
x[i][j] = utiLizationList.get(j)[i];
//System.out.print("UtilizationList___ "+ x[i][j] +"");
}
//System.out.println();
}
double[] y = new double[utilizationHistory.length];
for(int i=0; i<utilizationHistory.length; i++)
{
y[i] =
(double) utilizationHistory[i]/1-(double) utilizationHistory[i] *
(double) ramUtilizationHistory[i]/1-(double) ramUtilizationHistory[i] *
(double) bwUtilizationHistory[i]/1-(double) bwUtilizationHistory[i] ;
}
MathUtil.createLinearRegression(x, y);
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;
}
и этот метод
public static OLSMultipleLinearRegression createLinearRegression(
final double[][] x, final double[] y) {
OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
regression.newSampleData(y, x);
return regression;
}
Приведенный выше код отлично работает до тех пор, пока createLinearRegression (x , y) функция. На самом деле два массива x и y имеют свои значения, поэтому я не понимаю, почему, когда я передаю массивы x и y функции createLinearRegression, я получаю следующую ошибку:
Кто-нибудь может сказать мне, в чем проблема и как мне исправить это?
org.apache.commons.math3.exception.NoDataException: no data
at org.apache.commons.math3.stat.regression.AbstractMultipleLinearRegression.validateSampleData(AbstractMultipleLinearRegression.java:233)
at org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression.newSampleData(OLSMultipleLinearRegression.java:70)
at org.cloudbus.cloudsim.util.MathUtil.createLinearRegression(MathUtil.java:259)