use of org.knime.core.node.port.PortObjectSpec in project knime-core by knime.
the class RandomForestClassificationLearnerNodeModel method configure.
/**
* {@inheritDoc}
*/
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
// guaranteed to not be null (according to API)
DataTableSpec inSpec = (DataTableSpec) inSpecs[0];
if (m_configuration == null) {
throw new InvalidSettingsException("No configuration available");
}
final FilterLearnColumnRearranger learnRearranger = m_configuration.filterLearnColumns(inSpec);
final String warn = learnRearranger.getWarning();
if (warn != null) {
setWarningMessage(warn);
}
DataTableSpec learnSpec = learnRearranger.createSpec();
TreeEnsembleModelPortObjectSpec ensembleSpec = m_configuration.createPortObjectSpec(learnSpec);
// the following call may return null, which is OK during configure
// but not upon execution (spec may not be populated yet, e.g.
// predecessor not executed)
// if the possible values is not null, the following call checks
// for duplicates in the toString() representation
ensembleSpec.getTargetColumnPossibleValueMap();
final TreeEnsemblePredictor outOfBagPredictor = createOutOfBagPredictor(ensembleSpec, null, inSpec);
ColumnRearranger outOfBagRearranger = outOfBagPredictor.getPredictionRearranger();
DataTableSpec outOfBagSpec = outOfBagRearranger == null ? null : outOfBagRearranger.createSpec();
DataTableSpec colStatsSpec = TreeEnsembleLearner.getColumnStatisticTableSpec();
return new PortObjectSpec[] { outOfBagSpec, colStatsSpec, ensembleSpec };
}
use of org.knime.core.node.port.PortObjectSpec in project knime-core by knime.
the class RandomForestRegressionLearnerNodeModel method configure.
/**
* {@inheritDoc}
*/
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
// guaranteed to not be null (according to API)
DataTableSpec inSpec = (DataTableSpec) inSpecs[0];
if (m_configuration == null) {
throw new InvalidSettingsException("No configuration available");
}
final FilterLearnColumnRearranger learnRearranger = m_configuration.filterLearnColumns(inSpec);
final String warn = learnRearranger.getWarning();
if (warn != null) {
setWarningMessage(warn);
}
DataTableSpec learnSpec = learnRearranger.createSpec();
TreeEnsembleModelPortObjectSpec ensembleSpec = m_configuration.createPortObjectSpec(learnSpec);
final TreeEnsemblePredictor outOfBagPredictor = createOutOfBagPredictor(ensembleSpec, null, inSpec);
ColumnRearranger outOfBagRearranger = outOfBagPredictor.getPredictionRearranger();
DataTableSpec outOfBagSpec = outOfBagRearranger == null ? null : outOfBagRearranger.createSpec();
DataTableSpec colStatsSpec = TreeEnsembleLearner.getColumnStatisticTableSpec();
return new PortObjectSpec[] { outOfBagSpec, colStatsSpec, ensembleSpec };
}
use of org.knime.core.node.port.PortObjectSpec in project knime-core by knime.
the class SotaNodeModel method configure.
/**
* {@inheritDoc}
*/
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
assert inSpecs.length == 1;
DataTableSpec inDataSpec = (DataTableSpec) inSpecs[SotaNodeModel.INPORT];
int numberCells = 0;
int fuzzyCells = 0;
for (int i = 0; i < inDataSpec.getNumColumns(); i++) {
DataType type = inDataSpec.getColumnSpec(i).getType();
if (SotaUtil.isNumberType(type)) {
numberCells++;
} else if (SotaUtil.isFuzzyIntervalType(type)) {
fuzzyCells++;
}
}
StringBuffer buffer = new StringBuffer();
if (numberCells > 0 && fuzzyCells > 0) {
buffer.append("FuzzyIntervalCells and NumberCells are mixed ! ");
}
if (numberCells <= 0 && fuzzyCells <= 0) {
buffer.append("Number of columns has to be " + "greater than zero ! ");
}
if (fuzzyCells <= 0 && m_sota.isUseHierarchicalFuzzyData()) {
buffer.append("No fuzzy cells selected ! ");
}
if (m_sota.isUseHierarchicalFuzzyData() && m_hierarchieLevelCell == null) {
buffer.append("No hierarchy column selected ! ");
}
// if buffer throw exception
if (buffer.length() > 0) {
throw new InvalidSettingsException(buffer.toString());
}
int classColIndex = inDataSpec.findColumnIndex(m_classCol.getStringValue());
return new PortObjectSpec[] { new SotaPortObjectSpec(inDataSpec, classColIndex) };
}
use of org.knime.core.node.port.PortObjectSpec in project knime-core by knime.
the class NaiveBayesLearnerNodeModel2 method configure.
/**
* {@inheritDoc}
*/
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
// check the internal variables if they are valid
final PortObjectSpec inSpec = inSpecs[TRAINING_DATA_PORT];
if (!(inSpec instanceof DataTableSpec)) {
throw new IllegalArgumentException("Invalid input data");
}
final DataTableSpec tableSpec = (DataTableSpec) inSpec;
if (m_classifyColumnName.getStringValue() == null) {
String predictedClassName = null;
for (DataColumnSpec colSpec : tableSpec) {
if (colSpec.getType().isCompatible(NominalValue.class)) {
if (predictedClassName == null) {
predictedClassName = colSpec.getName();
} else {
throw new InvalidSettingsException("Please define the classification column");
}
}
}
m_classifyColumnName.setStringValue(predictedClassName);
setWarningMessage("Classification column preset to " + predictedClassName);
}
final String classColumn = m_classifyColumnName.getStringValue();
final DataColumnSpec classColSpec = tableSpec.getColumnSpec(classColumn);
if (classColSpec == null) {
throw new InvalidSettingsException("Classification column not found in input table");
}
if (tableSpec.getNumColumns() < 2) {
throw new InvalidSettingsException("Input table should contain at least 2 columns");
}
final int maxNoOfNominalVals = m_maxNoOfNominalVals.getIntValue();
// and check each nominal column with a valid domain if it contains more values than allowed
// this needs to be in sync with the NaiveBayesModel.createModelMap method!!!
final List<String> ignoredColumns = new LinkedList<>();
final List<String> toBigNominalColumns = new LinkedList<>();
final List<String> learnCols = new LinkedList<>();
for (final DataColumnSpec colSpec : tableSpec) {
final AttributeModel model = NaiveBayesModel.getCompatibleModel(colSpec, classColumn, maxNoOfNominalVals, m_ignoreMissingVals.getBooleanValue(), m_pmmlCompatible.getBooleanValue());
if (model == null) {
// the column type is not supported by Naive Bayes
ignoredColumns.add(colSpec.getName());
continue;
}
final DataType colType = colSpec.getType();
if (colType.isCompatible(NominalValue.class)) {
final DataColumnDomain domain = colSpec.getDomain();
if (domain != null && domain.getValues() != null) {
if (domain.getValues().size() > maxNoOfNominalVals) {
// unique values
if (colSpec.getName().equals(classColumn)) {
// contains too many unique values
throw new InvalidSettingsException("Class column domain contains too many unique values" + " (count: " + domain.getValues().size() + ")");
}
toBigNominalColumns.add(colSpec.getName() + " (count: " + domain.getValues().size() + ")");
}
}
learnCols.add(model.getAttributeName());
}
}
warningMessage("The following columns will possibly be skipped due to too many values: ", toBigNominalColumns);
warningMessage("The following columns are not supported and thus will be ignored: ", ignoredColumns);
if (learnCols.size() < 1) {
throw new InvalidSettingsException("Not enough valid columns");
}
final PMMLPortObjectSpec modelSpec = m_pmmlInEnabled ? (PMMLPortObjectSpec) inSpecs[MODEL_INPORT] : null;
final PMMLPortObjectSpec pmmlSpec = createPMMLSpec(tableSpec, modelSpec, learnCols, classColumn);
return new PortObjectSpec[] { pmmlSpec, NaiveBayesModel.createStatisticsTableSpec(classColSpec.getType(), m_ignoreMissingVals.getBooleanValue()) };
}
use of org.knime.core.node.port.PortObjectSpec in project knime-core by knime.
the class NaiveBayesPredictorNodeModel2 method configure.
/**
* {@inheritDoc}
*/
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
// check the input data
assert (inSpecs != null && inSpecs.length == 2 && inSpecs[DATA_IN_PORT] != null && inSpecs[MODEL_IN_PORT] != null);
final PortObjectSpec modelObject = inSpecs[MODEL_IN_PORT];
if (!(modelObject instanceof PMMLPortObjectSpec)) {
throw new IllegalArgumentException("Invalid input data");
}
final PMMLPortObjectSpec pmmlSpec = (PMMLPortObjectSpec) modelObject;
final DataTableSpec trainingSpec = pmmlSpec.getDataTableSpec();
if (trainingSpec == null) {
throw new InvalidSettingsException("No model spec available");
}
final List<DataColumnSpec> targetCols = pmmlSpec.getTargetCols();
if (targetCols.size() != 1) {
throw new InvalidSettingsException("No valid class column found");
}
final DataColumnSpec classColumn = targetCols.get(0);
final PortObjectSpec inSpec = inSpecs[DATA_IN_PORT];
if (!(inSpec instanceof DataTableSpec)) {
throw new IllegalArgumentException("TableSpec must not be null");
}
final DataTableSpec spec = (DataTableSpec) inSpec;
// check the input data for columns with the wrong name or wrong type
final List<String> unknownCols = check4UnknownCols(trainingSpec, spec);
warningMessage("The following input columns are unknown and will be skipped: ", unknownCols);
// check if the learned model contains columns which are not in the
// input data
final List<String> missingInputCols = check4MissingCols(trainingSpec, classColumn.getName(), spec);
warningMessage("The following attributes are missing in the input data: ", missingInputCols);
final PredictorHelper predictorHelper = PredictorHelper.getInstance();
final DataColumnSpec resultColSpecs = NaiveBayesCellFactory.createResultColSpecs(predictorHelper.checkedComputePredictionColumnName(m_predictionColumnName.getStringValue(), m_overridePredicted.getBooleanValue(), classColumn.getName()), classColumn.getType(), spec, m_inclProbVals.getBooleanValue());
if (resultColSpecs != null) {
return new PortObjectSpec[] { AppendedColumnTable.getTableSpec(spec, resultColSpecs) };
}
return null;
}
Aggregations