https://github.com/komiya-atsushi/xgboost-predictor-java
Pure Java implementation of XGBoost predictor for online prediction tasks.
https://github.com/komiya-atsushi/xgboost-predictor-java
java machine-learning xgboost
Last synced: 9 months ago
JSON representation
Pure Java implementation of XGBoost predictor for online prediction tasks.
- Host: GitHub
- URL: https://github.com/komiya-atsushi/xgboost-predictor-java
- Owner: komiya-atsushi
- License: apache-2.0
- Created: 2015-11-01T13:52:41.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2022-03-08T09:38:43.000Z (almost 4 years ago)
- Last Synced: 2025-03-29T21:05:26.672Z (9 months ago)
- Topics: java, machine-learning, xgboost
- Language: Java
- Homepage:
- Size: 980 KB
- Stars: 340
- Watchers: 23
- Forks: 108
- Open Issues: 24
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-java - XGBoost Predictor Java
README
xgboost-predictor-java
======================
[](https://travis-ci.org/komiya-atsushi/xgboost-predictor-java)
[ ](https://bintray.com/komiya-atsushi/maven/xgboost-predictor/_latestVersion)
Pure Java implementation of [XGBoost](https://github.com/dmlc/xgboost/) predictor for online prediction tasks.
# Getting started
## Adding to dependencies
If you use **Maven**:
```xml
bintray-komiya-atsushi-maven
http://dl.bintray.com/komiya-atsushi/maven
biz.k11i
xgboost-predictor
0.3.0
```
Or **Gradle**:
```groovy
repositories {
// Use jcenter instead of mavenCentral
jcenter()
}
dependencies {
compile group: 'biz.k11i', name: 'xgboost-predictor', version: '0.3.0'
}
```
Or **sbt**:
```scala
resolvers += Resolver.jcenterRepo
libraryDependencies ++= Seq(
"biz.k11i" % "xgboost-predictor" % "0.3.0"
)
```
## Using Predictor in Java
```java
package biz.k11i.xgboost.demo;
import biz.k11i.xgboost.Predictor;
import biz.k11i.xgboost.util.FVec;
public class HowToUseXgboostPredictor {
public static void main(String[] args) throws java.io.IOException {
// If you want to use faster exp() calculation, uncomment the line below
// ObjFunction.useFastMathExp(true);
// Load model and create Predictor
Predictor predictor = new Predictor(
new java.io.FileInputStream("/path/to/xgboost-model-file"));
// Create feature vector from dense representation by array
double[] denseArray = {0, 0, 32, 0, 0, 16, -8, 0, 0, 0};
FVec fVecDense = FVec.Transformer.fromArray(
denseArray,
true /* treat zero element as N/A */);
// Create feature vector from sparse representation by map
FVec fVecSparse = FVec.Transformer.fromMap(
new java.util.HashMap() {{
put(2, 32.);
put(5, 16.);
put(6, -8.);
}});
// Predict probability or classification
double[] prediction = predictor.predict(fVecDense);
// prediction[0] has
// - probability ("binary:logistic")
// - class label ("multi:softmax")
// Predict leaf index of each tree
int[] leafIndexes = predictor.predictLeaf(fVecDense);
// leafIndexes[i] has a leaf index of i-th tree
}
}
```
## Apache Spark integration
See detail [xgboost-predictor-spark](https://github.com/komiya-atsushi/xgboost-predictor-java/tree/master/xgboost-predictor-spark).
# Benchmark
Throughput comparison to [xgboost4j 1.1](https://github.com/dmlc/xgboost/tree/master/java/xgboost4j) by [xgboost-predictor-benchmark](https://github.com/komiya-atsushi/xgboost-predictor-benchmark).
| Feature | xgboost-predictor | xgboost4j |
| ----------------- | ----------------: | -------------: |
| Model loading | 49017.60 ops/s | 39669.36 ops/s |
| Single prediction | 6016955.46 ops/s | 1018.01 ops/s |
| Batch prediction | 44985.71 ops/s | 5.04 ops/s |
| Leaf prediction | 11115853.34 ops/s | 1076.54 ops/s |
Xgboost-predictor-java is about **6,000 to 10,000 times faster than** xgboost4j on prediction tasks.
# Supported models, objective functions and API
- Models
- "gblinear"
- "gbtree"
- "dart"
- Objective functions
- "binary:logistic"
- "binary:logitraw"
- "multi:softmax"
- "multi:softprob"
- "reg:linear"
- "reg:squarederror"
- "rank:pairwise"
- API
- Predicts probability or classification
- `Predictor#predict(FVec)`
- Outputs margin
- `Predictor#predict(FVec, true /* output margin */)`
- Predicts leaf index
- `Predictor#predictLeaf(FVec)`