GBMRESULT CLaplace::InitF ( double *adY, double *adMisc, double *adOffset, double *adWeight, double &dInitF, unsigned long cLength ) { GBMRESULT hr = GBM_OK; double dOffset = 0.0; unsigned long ii = 0; int nLength = int(cLength); std::vector<double> adArr(cLength); for (ii = 0; ii < cLength; ii++) { dOffset = (adOffset==NULL) ? 0.0 : adOffset[ii]; adArr[ii] = adY[ii] - dOffset; } dInitF = mpLocM.weightedQuantile(nLength, &adArr[0], adWeight, 0.5); // median Cleanup: return hr; Error: goto Cleanup; }
GBMRESULT CTDist::InitF ( double *adY, double *adMisc, double *adOffset, double *adWeight, double &dInitF, unsigned long cLength ) { // Local variables int ii; // Get objects to pass into the LocM function int iN = int(cLength); std::vector<double> adArr(cLength); for (ii = 0; ii < iN; ii++) { double dOffset = (adOffset==NULL) ? 0.0 : adOffset[ii]; adArr[ii] = adY[ii] - dOffset; } dInitF = mpLocM.LocationM(iN, &adArr[0], adWeight); return GBM_OK; }
// DEBUG: needs weighted median GBMRESULT CLaplace::FitBestConstant ( double *adY, double *adMisc, double *adOffset, double *adW, double *adF, double *adZ, const std::vector<unsigned long>& aiNodeAssign, unsigned long nTrain, VEC_P_NODETERMINAL vecpTermNodes, unsigned long cTermNodes, unsigned long cMinObsInNode, bool *afInBag, double *adFadj, int cIdxOff ) { GBMRESULT hr = GBM_OK; unsigned long iNode = 0; unsigned long iObs = 0; unsigned long iVecd = 0; double dOffset; // vecd.resize(nTrain); // should already be this size from InitF std::vector<double> adArr(nTrain); std::vector<double> adW2(nTrain); for(iNode=0; iNode<cTermNodes; iNode++) { if(vecpTermNodes[iNode]->cN >= cMinObsInNode) { iVecd = 0; for(iObs=0; iObs<nTrain; iObs++) { if(afInBag[iObs] && (aiNodeAssign[iObs] == iNode)) { dOffset = (adOffset==NULL) ? 0.0 : adOffset[iObs]; adArr[iVecd] = adY[iObs] - dOffset - adF[iObs]; adW2[iVecd] = adW[iObs]; iVecd++; } } vecpTermNodes[iNode]->dPrediction = mpLocM.weightedQuantile(iVecd, &adArr[0], &adW2[0], 0.5); // median } } return hr; }