xgboost-predictor-java icon indicating copy to clipboard operation
xgboost-predictor-java copied to clipboard

Usage with given features matrices

Open dripp1 opened this issue 8 years ago • 3 comments

Hi,

Your implementation looks promising, but I am not sure how to use it. Suppose we have age, gender and height(in cm) and we need to predict the weight (in kg) of people.

So we have for training set the following csv: age,gender,height,weight 18,m,180,80 40,m,175,85 25,f,165,50

and we load it into a feature matrix:

float[][] trainFeatures =  new float[][] {
 { 18, 1, 180 },
 { 40, 1, 175 },
 { 25, 0, 165 }
}

and into a vector of target values: float[] targets = new float[] { 80, 85, 50 }

and we also have a test set for which we need to predict the target values: 22,m,175 30,f,160

which we load into a feature matrix:

float[][] testFeatures =  new float[][] {
 { 22, 1, 175 },
 { 30, 0, 160 }
}

Can you please give an example of how the xgboost-predictor can be applied to such data to train on the first set and predict on the second set?

Thank you

Doron

dripp1 avatar Dec 30 '16 20:12 dripp1

Hi,

You cannot use xgboost-predictor to build a model but you can use to predict. xgboost-predictor provides only prediction functions.

If you want to build a model on JVM, you should use XGBoost4J.

To predict weight using xgboost-predictor, you should:

  • Load XGBoost model using Predictor class.
  • Represent a feature vector using FVec interface.
Predictor predictor = new Predictor(
  new java.io.FileInputStream("/path/to/xgboost-model-file"));

for (float[] f : testFeatures) {
  FVec fv = FVec.Transformer.fromArray(f, false /* do not treat zero element as N/A */);
  double[] prediction = predictor.predict(fv);
  double predictedWeight = prediction[0];
}

komiya-atsushi avatar Feb 06 '17 14:02 komiya-atsushi

Thank you for your answer. I was hoping to use this project INSTEAD of XGBoost4J and not depending on it...

dripp1 avatar Feb 06 '17 15:02 dripp1

@komiya-atsushi hi, I'm interested in this api. Why this library use for loop to predict each feature instead of just predicting once with a matrix? Will this be faster? If true, will it keep faster if the size of testFeatures is very big? I'm new about this library, just for interesting, thank you

WokoLiu avatar Jun 28 '20 07:06 WokoLiu