use of org.dmg.pmml.FieldRefDocument.FieldRef in project knime-core by knime.
the class PMMLNeuralNetworkTranslator method addInputLayer.
/**
* Writes the PMML input layer of the MLP.
*
* @param nnModel
* the Neural Network model.
* @param mlp
* the underlying {@link MultiLayerPerceptron}.
*/
protected void addInputLayer(final NeuralNetwork nnModel, final MultiLayerPerceptron mlp) {
Layer inputlayer = mlp.getLayer(0);
Perceptron[] inputperceptrons = inputlayer.getPerceptrons();
HashMap<String, Integer> inputmap = mlp.getInputMapping();
NeuralInputs neuralInputs = nnModel.addNewNeuralInputs();
neuralInputs.setNumberOfInputs(BigInteger.valueOf(inputperceptrons.length));
for (int i = 0; i < inputperceptrons.length; i++) {
NeuralInput neuralInput = neuralInputs.addNewNeuralInput();
neuralInput.setId(0 + "," + i);
// search corresponding input column
String colname = "";
for (Entry<String, Integer> e : inputmap.entrySet()) {
if (e.getValue().equals(i)) {
colname = e.getKey();
}
}
DerivedField df = neuralInput.addNewDerivedField();
df.setOptype(OPTYPE.CONTINUOUS);
df.setDataType(DATATYPE.DOUBLE);
FieldRef fieldRef = df.addNewFieldRef();
fieldRef.setField(m_nameMapper.getDerivedFieldName(colname));
}
}
use of org.dmg.pmml.FieldRefDocument.FieldRef in project knime-core by knime.
the class PMMLGeneralRegressionTranslator method updateVectorLengthsBasedOnDerivedFields.
/**
* @param derivedFieldList
*/
private void updateVectorLengthsBasedOnDerivedFields(final List<DerivedField> derivedFieldList) {
final Map<String, Integer> lengths = new LinkedHashMap<>();
for (final DerivedField df : derivedFieldList) {
final String name = df.getName();
Optional<NameAndIndex> vni = VectorHandling.parse(name);
if (vni.isPresent()) {
final String key = vni.get().getName();
try {
String function = df.getApply().getFunction();
if (!"substring".equals(function)) {
continue;
}
final List<FieldRef> fieldRefList = df.getApply().getFieldRefList();
if (fieldRefList.isEmpty() || !key.equals(fieldRefList.get(0).getField())) {
LOGGER.debug("Field name is not related to the derived field name: " + fieldRefList + " <-> " + key);
continue;
}
if (2 != df.getApply().getConstantList().size()) {
LOGGER.debug("substring requires two parameters: " + df);
continue;
}
if (!DATATYPE.INTEGER.equals(df.getDataType())) {
LOGGER.debug("Array value should be integer: " + df);
continue;
}
if (!OPTYPE.CONTINUOUS.equals(df.getOptype())) {
LOGGER.debug("The optype should be continuous: " + df);
continue;
}
int index = vni.get().getIndex();
int old = Math.max(0, lengths.getOrDefault(key, Integer.valueOf(0)).intValue());
if (old <= index) {
lengths.put(key, index + 1);
}
} catch (RuntimeException e) {
// Ignore
LOGGER.debug(df.toString(), e);
}
}
}
LOGGER.debug(lengths);
m_content.updateVectorLengths(lengths);
}
use of org.dmg.pmml.FieldRefDocument.FieldRef in project knime-core by knime.
the class PMMLNeuralNetworkTranslator method addInputLayer.
/**
* Writes the PMML input layer of the MLP.
*
* @param nnModel
* the Neural Network model.
* @param mlp
* the underlying {@link MultiLayerPerceptron}.
*/
protected void addInputLayer(final NeuralNetwork nnModel, final MultiLayerPerceptron mlp) {
Layer inputlayer = mlp.getLayer(0);
Perceptron[] inputperceptrons = inputlayer.getPerceptrons();
HashMap<String, Integer> inputmap = mlp.getInputMapping();
NeuralInputs neuralInputs = nnModel.addNewNeuralInputs();
neuralInputs.setNumberOfInputs(BigInteger.valueOf(inputperceptrons.length));
for (int i = 0; i < inputperceptrons.length; i++) {
NeuralInput neuralInput = neuralInputs.addNewNeuralInput();
neuralInput.setId(0 + "," + i);
// search corresponding input column
String colname = "";
for (Entry<String, Integer> e : inputmap.entrySet()) {
if (e.getValue().equals(i)) {
colname = e.getKey();
}
}
DerivedField df = neuralInput.addNewDerivedField();
df.setOptype(OPTYPE.CONTINUOUS);
df.setDataType(DATATYPE.DOUBLE);
FieldRef fieldRef = df.addNewFieldRef();
fieldRef.setField(m_nameMapper.getDerivedFieldName(colname));
}
}
use of org.dmg.pmml.FieldRefDocument.FieldRef in project knime-core by knime.
the class PMMLNeuralNetworkTranslator method addOutputLayer.
/**
* Writes the PMML output layer of the MLP.
*
* @param nnModel
* the neural network model.
* @param mlp
* the underlying {@link MultiLayerPerceptron}.
* @param spec
* the port object spec
*/
protected void addOutputLayer(final NeuralNetwork nnModel, final MultiLayerPerceptron mlp, final PMMLPortObjectSpec spec) {
int lastlayer = mlp.getNrLayers() - 1;
String targetCol = spec.getTargetFields().iterator().next();
Layer outputlayer = mlp.getLayer(lastlayer);
Perceptron[] outputperceptrons = outputlayer.getPerceptrons();
HashMap<DataCell, Integer> outputmap = mlp.getClassMapping();
NeuralOutputs neuralOuts = nnModel.addNewNeuralOutputs();
neuralOuts.setNumberOfOutputs(BigInteger.valueOf(outputperceptrons.length));
for (int i = 0; i < outputperceptrons.length; i++) {
NeuralOutput neuralOutput = neuralOuts.addNewNeuralOutput();
neuralOutput.setOutputNeuron(lastlayer + "," + i);
// search corresponding output value
String colname = "";
for (Entry<DataCell, Integer> e : outputmap.entrySet()) {
if (e.getValue().equals(i)) {
colname = ((StringValue) e.getKey()).getStringValue();
}
}
DerivedField df = neuralOutput.addNewDerivedField();
df.setOptype(OPTYPE.CATEGORICAL);
df.setDataType(DATATYPE.STRING);
if (mlp.getMode() == MultiLayerPerceptron.CLASSIFICATION_MODE) {
df.setOptype(OPTYPE.CATEGORICAL);
df.setDataType(DATATYPE.STRING);
} else if (mlp.getMode() == MultiLayerPerceptron.REGRESSION_MODE) {
df.setOptype(OPTYPE.CONTINUOUS);
df.setDataType(DATATYPE.DOUBLE);
}
if (mlp.getMode() == MultiLayerPerceptron.CLASSIFICATION_MODE) {
NormDiscrete normDiscrete = df.addNewNormDiscrete();
normDiscrete.setField(targetCol);
normDiscrete.setValue(colname);
} else if (mlp.getMode() == MultiLayerPerceptron.REGRESSION_MODE) {
FieldRef fieldRef = df.addNewFieldRef();
fieldRef.setField(targetCol);
}
}
}
use of org.dmg.pmml.FieldRefDocument.FieldRef in project knime-core by knime.
the class PMMLStringConversionTranslator method createDerivedFields.
private DerivedField[] createDerivedFields() {
DATATYPE.Enum dataType = PMMLDataDictionaryTranslator.getPMMLDataType(m_parseType);
OPTYPE.Enum optype = PMMLDataDictionaryTranslator.getOptype(m_parseType);
int num = m_includeCols.size();
DerivedField[] derivedFields = new DerivedField[num];
for (int i = 0; i < num; i++) {
DerivedField df = DerivedField.Factory.newInstance();
String name = m_includeCols.get(i);
df.setDisplayName(name);
/* The field name must be retrieved before creating a new derived
* name for this derived field as the map only contains the
* current mapping. */
String fieldName = m_mapper.getDerivedFieldName(name);
df.setName(m_mapper.createDerivedFieldName(name));
df.setDataType(dataType);
df.setOptype(optype);
FieldRef fieldRef = df.addNewFieldRef();
fieldRef.setField(fieldName);
derivedFields[i] = df;
}
return derivedFields;
}
Aggregations