protected void trainByAveragedSamples(List<Sample> samples) {
    int nBeacons = bleBeacons.size();
    BLEBeacon.setBLEBeaconIdsToSamples(bleBeacons, samples);
    setupGPLDPL();
    this.samples = samples;
    double[][] X = ModelAdaptUtils.samplesToLocationsMat(samples);
    double[][] Y = ModelAdaptUtils.samplesToBeaconsListMat(samples, minRssi, nBeacons);
    double[][] bLocs = ModelAdaptUtils.BLEBeaconsToMat(bleBeacons, nBeacons);
    gpLDPL.setSourceLocs(bLocs);

    int[] actBecList = new int[nBeacons];
    for (int i = 0; i < nBeacons; i++) actBecList[i] = i;
    gpLDPL.setActiveBeaconList(actBecList);

    gpLDPL.fit(X, Y);
  }