Skip to content

Commit d43bcbf

Browse files
committed
[ML] Make Ensemble feature names optional (elastic#51996)
The featureNames field is requisite in individual models but is not required by the Ensemble.
1 parent 3ccea31 commit d43bcbf

File tree

5 files changed

+11
-8
lines changed
  • client/rest-high-level/src
    • main/java/org/elasticsearch/client/ml/inference/trainedmodel/ensemble
    • test/java/org/elasticsearch/client/ml/inference/trainedmodel/ensemble
  • docs/reference/ml/df-analytics/apis
  • x-pack/plugin/core/src
    • main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/ensemble
    • test/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/ensemble

5 files changed

+11
-8
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/ensemble/Ensemble.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public String getName() {
103103
@Override
104104
public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
105105
builder.startObject();
106-
if (featureNames != null) {
106+
if (featureNames != null && featureNames.isEmpty() == false) {
107107
builder.field(FEATURE_NAMES.getPreferredName(), featureNames);
108108
}
109109
if (models != null) {
@@ -157,7 +157,7 @@ public static Builder builder() {
157157
}
158158

159159
public static class Builder {
160-
private List<String> featureNames;
160+
private List<String> featureNames = Collections.emptyList();
161161
private List<TrainedModel> trainedModels;
162162
private OutputAggregator outputAggregator;
163163
private TargetType targetType;

client/rest-high-level/src/test/java/org/elasticsearch/client/ml/inference/trainedmodel/ensemble/EnsembleTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public static Ensemble createRandom(TargetType targetType) {
8686
.toArray() :
8787
null;
8888

89-
return new Ensemble(featureNames,
89+
return new Ensemble(randomBoolean() ? featureNames : Collections.emptyList(),
9090
models,
9191
outputAggregator,
9292
targetType,

docs/reference/ml/df-analytics/apis/put-inference.asciidoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ See <<ml-put-inference-preprocessor-example>> for more details.
150150
The definition for a binary decision tree.
151151

152152
`tree`.`feature_names`:::
153-
(Required, string)
153+
(Required, string)
154154
Features expected by the tree, in their expected order.
155155

156156
`tree`.`tree_structure`:::
@@ -221,7 +221,7 @@ children).
221221
The definition for an ensemble model.
222222

223223
`ensemble`.`feature_names`:::
224-
(Required, string)
224+
(Optional, string)
225225
Features expected by the ensemble, in their expected order.
226226

227227
`ensemble`.`trained_models`:::

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/ensemble/Ensemble.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,9 @@ public String getName() {
207207
@Override
208208
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
209209
builder.startObject();
210-
builder.field(FEATURE_NAMES.getPreferredName(), featureNames);
210+
if (featureNames.isEmpty() == false) {
211+
builder.field(FEATURE_NAMES.getPreferredName(), featureNames);
212+
}
211213
NamedXContentObjectHelper.writeNamedObjects(builder, params, true, TRAINED_MODELS.getPreferredName(), models);
212214
NamedXContentObjectHelper.writeNamedObjects(builder,
213215
params,
@@ -327,8 +329,9 @@ public static class Builder {
327329
private double[] classificationWeights;
328330
private boolean modelsAreOrdered;
329331

330-
private Builder (boolean modelsAreOrdered) {
332+
private Builder(boolean modelsAreOrdered) {
331333
this.modelsAreOrdered = modelsAreOrdered;
334+
this.featureNames = Collections.emptyList();
332335
}
333336

334337
private static Builder builderForParser() {

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/ensemble/EnsembleTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public static Ensemble createRandom() {
9292
.toArray() :
9393
null;
9494

95-
return new Ensemble(featureNames,
95+
return new Ensemble(randomBoolean() ? featureNames : Collections.emptyList(),
9696
models,
9797
outputAggregator,
9898
targetType,

0 commit comments

Comments
 (0)