use of org.knime.core.util.UniqueNameGenerator in project knime-core by knime.
the class LKGradientBoostingPredictorCellFactory method createFactory.
public static LKGradientBoostingPredictorCellFactory createFactory(final GradientBoostingPredictor<MultiClassGradientBoostedTreesModel> predictor) throws InvalidSettingsException {
TreeEnsemblePredictorConfiguration config = predictor.getConfiguration();
DataTableSpec testSpec = predictor.getDataSpec();
TreeEnsembleModelPortObjectSpec modelSpec = predictor.getModelSpec();
ArrayList<DataColumnSpec> newColSpecs = new ArrayList<DataColumnSpec>();
UniqueNameGenerator nameGen = new UniqueNameGenerator(testSpec);
newColSpecs.add(nameGen.newColumn(config.getPredictionColumnName(), StringCell.TYPE));
if (config.isAppendPredictionConfidence()) {
newColSpecs.add(nameGen.newColumn("Confidence", DoubleCell.TYPE));
}
if (config.isAppendClassConfidences()) {
final String targetColName = modelSpec.getTargetColumn().getName();
final String suffix = config.getSuffixForClassProbabilities();
for (String val : modelSpec.getTargetColumnPossibleValueMap().keySet()) {
String colName = "P(" + targetColName + "=" + val + ")" + suffix;
newColSpecs.add(nameGen.newColumn(colName, DoubleCell.TYPE));
}
}
final Map<String, DataCell> targetValueMap = modelSpec.getTargetColumnPossibleValueMap();
return new LKGradientBoostingPredictorCellFactory(newColSpecs.toArray(new DataColumnSpec[newColSpecs.size()]), predictor.getModel(), modelSpec.getLearnTableSpec(), modelSpec.calculateFilterIndices(testSpec), config, targetValueMap);
}
use of org.knime.core.util.UniqueNameGenerator in project knime-core by knime.
the class GradientBoostingPredictorCellFactory method createFactory.
public static GradientBoostingPredictorCellFactory createFactory(final GradientBoostingPredictor<GradientBoostedTreesModel> predictor) throws InvalidSettingsException {
TreeEnsembleModelPortObjectSpec modelSpec = predictor.getModelSpec();
DataTableSpec learnSpec = modelSpec.getLearnTableSpec();
DataTableSpec testSpec = predictor.getDataSpec();
UniqueNameGenerator nameGen = new UniqueNameGenerator(testSpec);
DataColumnSpec newColSpec = nameGen.newColumn(predictor.getConfiguration().getPredictionColumnName(), DoubleCell.TYPE);
return new GradientBoostingPredictorCellFactory(newColSpec, predictor.getModel(), learnSpec, modelSpec.calculateFilterIndices(testSpec));
}
use of org.knime.core.util.UniqueNameGenerator in project knime-core by knime.
the class TreeEnsembleClassificationPredictorCellFactory method createFactory.
/**
* Creates a TreeEnsembleClassificationPredictorCellFactory from the provided <b>predictor</b>
* @param predictor
* @return an instance of TreeEnsembleClassificationPredictorCellFactory configured according to the settings of the provided
* <b>predictor<b>
* @throws InvalidSettingsException
*/
public static TreeEnsembleClassificationPredictorCellFactory createFactory(final TreeEnsemblePredictor predictor) throws InvalidSettingsException {
DataTableSpec testDataSpec = predictor.getDataSpec();
TreeEnsembleModelPortObjectSpec modelSpec = predictor.getModelSpec();
TreeEnsembleModelPortObject modelObject = predictor.getModelObject();
TreeEnsemblePredictorConfiguration configuration = predictor.getConfiguration();
UniqueNameGenerator nameGen = new UniqueNameGenerator(testDataSpec);
Map<String, DataCell> targetValueMap = modelSpec.getTargetColumnPossibleValueMap();
List<DataColumnSpec> newColsList = new ArrayList<DataColumnSpec>();
DataType targetColType = modelSpec.getTargetColumn().getType();
String predictionColName = configuration.getPredictionColumnName();
DataColumnSpec targetCol = nameGen.newColumn(predictionColName, targetColType);
newColsList.add(targetCol);
if (configuration.isAppendPredictionConfidence()) {
newColsList.add(nameGen.newColumn(targetCol.getName() + " (Confidence)", DoubleCell.TYPE));
}
if (configuration.isAppendClassConfidences()) {
final String targetColName = modelSpec.getTargetColumn().getName();
final String suffix = configuration.getSuffixForClassProbabilities();
// and this class is not called)
assert targetValueMap != null : "Target column has no possible values";
for (String v : targetValueMap.keySet()) {
final String colName = "P(" + targetColName + "=" + v + ")" + suffix;
newColsList.add(nameGen.newColumn(colName, DoubleCell.TYPE));
}
}
if (configuration.isAppendModelCount()) {
newColsList.add(nameGen.newColumn("model count", IntCell.TYPE));
}
// assigned
assert modelObject == null || targetValueMap != null : "Target values must be known during execution";
DataColumnSpec[] newCols = newColsList.toArray(new DataColumnSpec[newColsList.size()]);
int[] learnColumnInRealDataIndices = modelSpec.calculateFilterIndices(testDataSpec);
final Map<String, Integer> targetValueToIndexMap = new HashMap<String, Integer>(targetValueMap.size());
Iterator<String> targetValIterator = targetValueMap.keySet().iterator();
for (int i = 0; i < targetValueMap.size(); i++) {
targetValueToIndexMap.put(targetValIterator.next(), i);
}
final VotingFactory votingFactory;
if (configuration.isUseSoftVoting()) {
votingFactory = new SoftVotingFactory(targetValueToIndexMap);
} else {
votingFactory = new HardVotingFactory(targetValueToIndexMap);
}
return new TreeEnsembleClassificationPredictorCellFactory(predictor, targetValueMap, newCols, learnColumnInRealDataIndices, votingFactory);
}
use of org.knime.core.util.UniqueNameGenerator in project knime-core by knime.
the class NewToOldTimeNodeModel method createColumnRearranger.
/**
* @param inSpec Current input spec
* @return The CR describing the output
*/
private ColumnRearranger createColumnRearranger(final DataTableSpec inSpec) {
final ColumnRearranger rearranger = new ColumnRearranger(inSpec);
final String[] includeList = m_colSelect.applyTo(inSpec).getIncludes();
final int[] includeIndeces = Arrays.stream(m_colSelect.applyTo(inSpec).getIncludes()).mapToInt(s -> inSpec.findColumnIndex(s)).toArray();
int i = 0;
for (String includedCol : includeList) {
if (m_isReplaceOrAppend.getStringValue().equals(OPTION_REPLACE)) {
final DataColumnSpecCreator dataColumnSpecCreator = new DataColumnSpecCreator(includedCol, DateAndTimeCell.TYPE);
final ConvertTimeCellFactory cellFac = new ConvertTimeCellFactory(dataColumnSpecCreator.createSpec(), includeIndeces[i++]);
rearranger.replace(cellFac, includedCol);
} else {
final DataColumnSpec dataColSpec = new UniqueNameGenerator(inSpec).newColumn(includedCol + m_suffix.getStringValue(), DateAndTimeCell.TYPE);
final ConvertTimeCellFactory cellFac = new ConvertTimeCellFactory(dataColSpec, includeIndeces[i++]);
rearranger.append(cellFac);
}
}
return rearranger;
}
use of org.knime.core.util.UniqueNameGenerator in project knime-core by knime.
the class StringToDurationPeriodNodeModel method createStreamableOperator.
/**
* {@inheritDoc}
*/
@Override
public StreamableOperator createStreamableOperator(final PartitionInfo partitionInfo, final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
return new StreamableOperator() {
private SimpleStreamableOperatorInternals m_internals = new SimpleStreamableOperatorInternals();
/**
* {@inheritDoc}
*/
@Override
public void runIntermediate(final PortInput[] inputs, final ExecutionContext exec) throws Exception {
final RowInput rowInput = (RowInput) inputs[0];
final DataRow row = rowInput.poll();
if (row != null) {
final DataTableSpec inSpec = rowInput.getDataTableSpec();
final int[] includeIndexes = Arrays.stream(m_colSelect.applyTo(inSpec).getIncludes()).mapToInt(s -> inSpec.findColumnIndex(s)).toArray();
final Config config = m_internals.getConfig();
// detect types
detectTypes(new OneRowAdditionalRowInput(rowInput, row));
for (int i = 0; i < m_detectedTypes.length; i++) {
config.addDataType("detected_type" + i, m_detectedTypes[i]);
}
// write detected types and column names into config
if (m_isReplaceOrAppend.getStringValue().equals(OPTION_REPLACE)) {
for (int i = 0; i < rowInput.getDataTableSpec().getNumColumns(); i++) {
final int searchIdx = Arrays.binarySearch(includeIndexes, i);
config.addString("colname" + i, inSpec.getColumnNames()[i]);
if (searchIdx < 0) {
config.addDataType("type" + i, inSpec.getColumnSpec(i).getType());
} else {
config.addDataType("type" + i, m_detectedTypes[searchIdx] != null ? m_detectedTypes[searchIdx] : null);
}
}
config.addInt("sizeRow", rowInput.getDataTableSpec().getNumColumns());
} else {
for (int i = 0; i < inSpec.getNumColumns(); i++) {
config.addString("colname" + i, inSpec.getColumnNames()[i]);
config.addDataType("type" + i, inSpec.getColumnSpec(i).getType());
}
for (int i = 0; i < m_detectedTypes.length; i++) {
config.addString("colname" + (i + inSpec.getNumColumns()), new UniqueNameGenerator(inSpec).newName(inSpec.getColumnSpec(includeIndexes[i]).getName() + m_suffix.getStringValue()));
config.addDataType("type" + (i + inSpec.getNumColumns()), m_detectedTypes[i]);
}
config.addInt("sizeRow", inSpec.getNumColumns() + m_detectedTypes.length);
}
config.addBoolean("needsIteration", false);
} else {
m_internals.getConfig().addInt("sizeRow", 0);
}
rowInput.close();
}
/**
* {@inheritDoc}
*/
@Override
public StreamableOperatorInternals saveInternals() {
return m_internals;
}
/**
* {@inheritDoc}
*/
@Override
public void loadInternals(final StreamableOperatorInternals internals) {
m_internals = (SimpleStreamableOperatorInternals) internals;
}
@Override
public void runFinal(final PortInput[] inputs, final PortOutput[] outputs, final ExecutionContext exec) throws Exception {
final RowInput in = (RowInput) inputs[0];
final RowOutput out = (RowOutput) outputs[0];
final DataTableSpec inSpec = in.getDataTableSpec();
final int[] includeIndexes = Arrays.stream(m_colSelect.applyTo(inSpec).getIncludes()).mapToInt(s -> inSpec.findColumnIndex(s)).toArray();
// read detected types from config
final DataType[] detectedTypes = new DataType[includeIndexes.length];
final Config config = m_internals.getConfig();
for (int i = 0; i < includeIndexes.length; i++) {
detectedTypes[i] = config.getDataType("detected_type" + i, null);
}
// compute every row
DataRow row;
while ((row = in.poll()) != null) {
exec.checkCanceled();
DataCell[] datacells = new DataCell[includeIndexes.length];
for (int i = 0; i < includeIndexes.length; i++) {
if (m_isReplaceOrAppend.getStringValue().equals(OPTION_REPLACE)) {
final StringToDurationPeriodCellFactory cellFac = new StringToDurationPeriodCellFactory(new DataColumnSpecCreator(inSpec.getColumnNames()[includeIndexes[i]], detectedTypes[i]).createSpec(), includeIndexes[i]);
datacells[i] = cellFac.getCells(row)[0];
} else {
final DataColumnSpec dataColSpec = new UniqueNameGenerator(inSpec).newColumn(inSpec.getColumnNames()[includeIndexes[i]] + m_suffix.getStringValue(), detectedTypes[i]);
final StringToDurationPeriodCellFactory cellFac = new StringToDurationPeriodCellFactory(dataColSpec, includeIndexes[i]);
datacells[i] = cellFac.getCells(row)[0];
}
}
if (m_isReplaceOrAppend.getStringValue().equals(OPTION_REPLACE)) {
out.push(new ReplacedColumnsDataRow(row, datacells, includeIndexes));
} else {
out.push(new AppendedColumnRow(row, datacells));
}
}
in.close();
out.close();
}
};
}
Aggregations