double[] sk = new double[data.getDataset().nbValues(attr)]; for (int i = 0; i < ra.length; i++) { ra[i] = new FullRunningAverage(); FullRunningAverage totalRa = new FullRunningAverage(); double totalSk = 0.0; int value = (int) instance.get(attr); double xk = data.getDataset().getLabel(instance); if (ra[value].getCount() == 0) { ra[value].addDatum(xk); sk[value] = 0.0; } else { double mk = ra[value].getAverage(); ra[value].addDatum(xk); sk[value] += (xk - mk) * (xk - ra[value].getAverage()); totalRa.addDatum(xk); totalSk = 0.0; } else { double mk = totalRa.getAverage(); totalRa.addDatum(xk); totalSk += (xk - mk) * (xk - totalRa.getAverage());
@Override public synchronized void removeDatum(double datum) { int oldCount = getCount(); super.removeDatum(datum); double oldmk = mk; mk = (oldCount * oldmk - datum) / (oldCount - 1); sk -= (datum - mk) * (datum - oldmk); recomputeStdDev(); }
Matrix m = readMatrix(itemFeatures); FullRunningAverage rmseAvg = new FullRunningAverage(); FullRunningAverage maeAvg = new FullRunningAverage(); int pairsUsed = 1; Writer writer = new OutputStreamWriter(System.out); double estimate = u.getRow(userID).dot(m.getRow(itemID)); double err = rating - estimate; rmseAvg.addDatum(err * err); maeAvg.addDatum(Math.abs(err)); writer.write("Probe [" + pairsUsed + "], rating of user [" + userID + "] towards item [" + itemID + "], " + "[" + rating + "] estimated [" + estimate + "]\n"); pairsUsed++; double rmse = Math.sqrt(rmseAvg.getAverage()); double mae = maeAvg.getAverage(); writer.write("RMSE: " + rmse + ", MAE: " + mae + "\n"); } finally {
@Override protected void reset() { average = new FullRunningAverage(); }
@Override public synchronized void addDatum(double datum) { super.addDatum(datum); int count = getCount(); if (count == 1) { mk = datum; sk = 0.0; } else { double oldmk = mk; double diff = datum - oldmk; mk += diff / count; sk += diff * (datum - mk); } recomputeStdDev(); }
@Override protected void reset() { average = new FullRunningAverage(); }
@Override public synchronized void addDatum(double datum) { super.addDatum(datum); int count = getCount(); if (count == 1) { mk = datum; sk = 0.0; } else { double oldmk = mk; double diff = datum - oldmk; mk += diff / count; sk += diff * (datum - mk); } recomputeStdDev(); }
double[] sk = new double[data.getDataset().nbValues(attr)]; for (int i = 0; i < ra.length; i++) { ra[i] = new FullRunningAverage(); FullRunningAverage totalRa = new FullRunningAverage(); double totalSk = 0.0; int value = (int) instance.get(attr); double xk = data.getDataset().getLabel(instance); if (ra[value].getCount() == 0) { ra[value].addDatum(xk); sk[value] = 0.0; } else { double mk = ra[value].getAverage(); ra[value].addDatum(xk); sk[value] += (xk - mk) * (xk - ra[value].getAverage()); totalRa.addDatum(xk); totalSk = 0.0; } else { double mk = totalRa.getAverage(); totalRa.addDatum(xk); totalSk += (xk - mk) * (xk - totalRa.getAverage());
@Override protected void reset() { average = new FullRunningAverage(); }
@Override public synchronized void addDatum(double datum) { super.addDatum(datum); int count = getCount(); if (count == 1) { mk = datum; sk = 0.0; } else { double oldmk = mk; double diff = datum - oldmk; mk += diff / count; sk += diff * (datum - mk); } recomputeStdDev(); }
@Override public synchronized void removeDatum(double datum) { int oldCount = getCount(); super.removeDatum(datum); double oldmk = mk; mk = (oldCount * oldmk - datum) / (oldCount - 1); sk -= (datum - mk) * (datum - oldmk); recomputeStdDev(); }
double[] sk = new double[data.getDataset().nbValues(attr)]; for (int i = 0; i < ra.length; i++) { ra[i] = new FullRunningAverage(); FullRunningAverage totalRa = new FullRunningAverage(); double totalSk = 0.0; int value = (int) instance.get(attr); double xk = data.getDataset().getLabel(instance); if (ra[value].getCount() == 0) { ra[value].addDatum(xk); sk[value] = 0.0; } else { double mk = ra[value].getAverage(); ra[value].addDatum(xk); sk[value] += (xk - mk) * (xk - ra[value].getAverage()); totalRa.addDatum(xk); totalSk = 0.0; } else { double mk = totalRa.getAverage(); totalRa.addDatum(xk); totalSk += (xk - mk) * (xk - totalRa.getAverage());
@Override protected void reset() { average = new FullRunningAverage(); }
@Override public synchronized void removeDatum(double datum) { int oldCount = getCount(); super.removeDatum(datum); double oldmk = mk; mk = (oldCount * oldmk - datum) / (oldCount - 1); sk -= (datum - mk) * (datum - oldmk); recomputeStdDev(); }
FullRunningAverage[] ra = new FullRunningAverage[2]; for (int i = 0; i < ra.length; i++) { ra[i] = new FullRunningAverage(); for (Instance instance : instances) { double xk = data.getDataset().getLabel(instance); if (ra[1].getCount() == 0) { ra[1].addDatum(xk); sk[1] = 0.0; } else { double mk = ra[1].getAverage(); ra[1].addDatum(xk); sk[1] += (xk - mk) * (xk - ra[1].getAverage()); double curVal = sk[0] / ra[0].getCount() + sk[1] / ra[1].getCount(); if (curVal < bestVal) { bestVal = curVal; if (ra[0].getCount() == 0) { ra[0].addDatum(xk); sk[0] = 0.0; } else { double mk = ra[0].getAverage(); ra[0].addDatum(xk); sk[0] += (xk - mk) * (xk - ra[0].getAverage()); double mk = ra[1].getAverage(); ra[1].removeDatum(xk); sk[1] -= (xk - mk) * (xk - ra[1].getAverage());
@Override protected void reset() { average = new FullRunningAverage(); }
FullRunningAverage[] ra = new FullRunningAverage[2]; for (int i = 0; i < ra.length; i++) { ra[i] = new FullRunningAverage(); for (Instance instance : instances) { double xk = data.getDataset().getLabel(instance); if (ra[1].getCount() == 0) { ra[1].addDatum(xk); sk[1] = 0.0; } else { double mk = ra[1].getAverage(); ra[1].addDatum(xk); sk[1] += (xk - mk) * (xk - ra[1].getAverage()); double curVal = sk[0] / ra[0].getCount() + sk[1] / ra[1].getCount(); if (curVal < bestVal) { bestVal = curVal; if (ra[0].getCount() == 0) { ra[0].addDatum(xk); sk[0] = 0.0; } else { double mk = ra[0].getAverage(); ra[0].addDatum(xk); sk[0] += (xk - mk) * (xk - ra[0].getAverage()); double mk = ra[1].getAverage(); ra[1].removeDatum(xk); sk[1] -= (xk - mk) * (xk - ra[1].getAverage());
@Override protected void reset() { average = new FullRunningAverage(); }
FullRunningAverage[] ra = new FullRunningAverage[2]; for (int i = 0; i < ra.length; i++) { ra[i] = new FullRunningAverage(); for (Instance instance : instances) { double xk = data.getDataset().getLabel(instance); if (ra[1].getCount() == 0) { ra[1].addDatum(xk); sk[1] = 0.0; } else { double mk = ra[1].getAverage(); ra[1].addDatum(xk); sk[1] += (xk - mk) * (xk - ra[1].getAverage()); double curVal = sk[0] / ra[0].getCount() + sk[1] / ra[1].getCount(); if (curVal < bestVal) { bestVal = curVal; if (ra[0].getCount() == 0) { ra[0].addDatum(xk); sk[0] = 0.0; } else { double mk = ra[0].getAverage(); ra[0].addDatum(xk); sk[0] += (xk - mk) * (xk - ra[0].getAverage()); double mk = ra[1].getAverage(); ra[1].removeDatum(xk); sk[1] -= (xk - mk) * (xk - ra[1].getAverage());
private static void addDatumAndCreateIfNeeded(long itemID, float value, FastByIDMap<RunningAverage> averages) { RunningAverage itemAverage = averages.get(itemID); if (itemAverage == null) { itemAverage = new FullRunningAverage(); averages.put(itemID, itemAverage); } itemAverage.addDatum(value); }