use of org.jpmml.xgboost.FeatureMap in project jpmml-r by jpmml.
the class XGBoostConverter method loadFeatureMap.
private static FeatureMap loadFeatureMap(RGenericVector fmap) {
RIntegerVector id = (RIntegerVector) fmap.getValue(0);
RIntegerVector name = (RIntegerVector) fmap.getValue(1);
RIntegerVector type = (RIntegerVector) fmap.getValue(2);
if (!name.isFactor() || !type.isFactor()) {
throw new IllegalArgumentException();
}
FeatureMap featureMap = new FeatureMap();
for (int i = 0; i < id.size(); i++) {
if (i != id.getValue(i)) {
throw new IllegalArgumentException();
}
featureMap.addEntry(name.getLevelValue(i), type.getLevelValue(i));
}
return featureMap;
}
use of org.jpmml.xgboost.FeatureMap in project jpmml-r by jpmml.
the class XGBoostConverter method encodeSchema.
@Override
public void encodeSchema(RExpEncoder encoder) {
RGenericVector booster = getObject();
RGenericVector schema = (RGenericVector) booster.getValue("schema", true);
RVector<?> fmap;
try {
fmap = (RVector<?>) booster.getValue("fmap");
} catch (IllegalArgumentException iae) {
throw new IllegalArgumentException("No feature map information. Please initialize the \'fmap\' element");
}
FeatureMap featureMap;
try {
featureMap = loadFeatureMap(fmap);
} catch (IOException ioe) {
throw new IllegalArgumentException(ioe);
}
if (schema != null) {
RVector<?> missing = (RVector<?>) schema.getValue("missing", true);
if (missing != null) {
featureMap.addMissingValue(ValueUtil.formatValue(missing.asScalar()));
}
}
Learner learner = ensureLearner();
// Dependent variable
{
ObjFunction obj = learner.getObj();
FieldName targetField = FieldName.create("_target");
List<String> targetCategories = null;
if (schema != null) {
RStringVector responseName = (RStringVector) schema.getValue("response_name", true);
RStringVector responseLevels = (RStringVector) schema.getValue("response_levels", true);
if (responseName != null) {
targetField = FieldName.create(responseName.asScalar());
}
if (responseLevels != null) {
targetCategories = responseLevels.getValues();
}
}
Label label = obj.encodeLabel(targetField, targetCategories, encoder);
encoder.setLabel(label);
}
// Independent variables
{
List<Feature> features = featureMap.encodeFeatures(encoder);
for (Feature feature : features) {
encoder.addFeature(feature);
}
}
}
Aggregations