use of org.knime.core.node.port.PortObject in project knime-core by knime.
the class LogRegLearnerNodeModel method execute.
/**
* {@inheritDoc}
*/
@Override
protected PortObject[] execute(final PortObject[] inObjects, final ExecutionContext exec) throws Exception {
final BufferedDataTable data = (BufferedDataTable) inObjects[0];
final DataTableSpec tableSpec = data.getDataTableSpec();
final LogRegCoordinator coordinator = new LogRegCoordinator(tableSpec, m_settings);
m_content = coordinator.learn(data, exec);
String warn = coordinator.getWarningMessage();
if (warn != null) {
setWarningMessage(warn);
}
PMMLPortObject outPMMLPort = new PMMLPortObject((PMMLPortObjectSpec) coordinator.getOutputSpecs()[0], null, tableSpec);
PMMLGeneralRegressionTranslator trans = new PMMLGeneralRegressionTranslator(m_content.createGeneralRegressionContent());
outPMMLPort.addModelTranslater(trans);
return new PortObject[] { outPMMLPort, m_content.createCoeffStatisticsTablePortObject(exec), m_content.createModelStatisticsTable(exec) };
}
use of org.knime.core.node.port.PortObject in project knime-core by knime.
the class ShapeManagerNodeModel method execute.
/**
* Is invoked during the node's execution to make the shape settings.
*
* @param data the input data array
* @param exec the execution monitor
* @return the same input data table with assigned shapes to one column
* @throws CanceledExecutionException if user canceled execution
*
* @see NodeModel#execute(BufferedDataTable[],ExecutionContext)
*/
@Override
protected PortObject[] execute(final PortObject[] data, final ExecutionContext exec) throws CanceledExecutionException {
BufferedDataTable inData = (BufferedDataTable) data[INPORT];
ShapeHandler shapeHandler = new ShapeHandler(new ShapeModelNominal(m_map));
final DataTableSpec newSpec = appendShapeHandler(inData.getSpec(), m_column, shapeHandler);
BufferedDataTable changedSpecTable = exec.createSpecReplacerTable(inData, newSpec);
DataTableSpec modelSpec = new DataTableSpec(newSpec.getColumnSpec(m_column));
ShapeHandlerPortObject viewPort = new ShapeHandlerPortObject(modelSpec, shapeHandler.toString() + " based on column \"" + m_column + "\"");
return new PortObject[] { changedSpecTable, viewPort };
}
use of org.knime.core.node.port.PortObject in project knime-core by knime.
the class SizeManager2NodeModel method execute.
/**
* Is invoked during the node's execution to make the size settings.
*
* @param data the input data array
* @param exec the execution monitor
* @return the same input data table whereby the DataTableSpec contains
* additional size infos
* @throws CanceledExecutionException if user canceled execution
*
* @see NodeModel#execute(BufferedDataTable[],ExecutionContext)
*/
@Override
protected PortObject[] execute(final PortObject[] data, final ExecutionContext exec) throws CanceledExecutionException {
final DataTableSpec inSpec = (DataTableSpec) data[INPORT].getSpec();
final String columnName = m_column.getStringValue();
final DataColumnSpec cspec = inSpec.getColumnSpec(columnName);
SizeHandler sizeHandler = createSizeHandler(cspec);
final DataTableSpec newSpec = appendSizeHandler(inSpec, columnName, sizeHandler);
BufferedDataTable changedSpecTable = exec.createSpecReplacerTable((BufferedDataTable) data[INPORT], newSpec);
DataTableSpec modelSpec = new DataTableSpec(newSpec.getColumnSpec(m_column.getStringValue()));
SizeHandlerPortObject viewPort = new SizeHandlerPortObject(modelSpec, sizeHandler.toString() + " based on column \"" + m_column.getStringValue() + "\"");
return new PortObject[] { changedSpecTable, viewPort };
}
use of org.knime.core.node.port.PortObject in project knime-core by knime.
the class EndifNodeModel method execute.
/**
* {@inheritDoc}
*/
@Override
protected PortObject[] execute(final PortObject[] rawInData, final ExecutionContext exec) throws Exception {
if (m_enableHiliting) {
// create empty hilite translation map (so we correctly
// handle the internals even if we return with a IBPO:
Map<RowKey, Set<RowKey>> map = new HashMap<RowKey, Set<RowKey>>();
m_hiliteTranslator.setMapper(new DefaultHiLiteMapper(map));
}
if (rawInData[0] instanceof InactiveBranchPortObject) {
return new PortObject[] { rawInData[1] };
}
if (rawInData[1] instanceof InactiveBranchPortObject) {
return new PortObject[] { rawInData[0] };
}
// no inactive branch - check compatibility of specs - which in
// this case must be BFT Specs!
DataTableSpec spec0 = (DataTableSpec) (rawInData[0].getSpec());
DataTableSpec spec1 = (DataTableSpec) (rawInData[1].getSpec());
if (spec0.equalStructure(spec1)) {
// concatenate tables and return result
BufferedDataTable[] inData = new BufferedDataTable[2];
inData[0] = (BufferedDataTable) rawInData[0];
inData[1] = (BufferedDataTable) rawInData[1];
int totalRowCount = 0;
for (BufferedDataTable t : inData) {
totalRowCount += t.getRowCount();
}
AppendedRowsTable out = new AppendedRowsTable((m_isAppendSuffix ? m_suffix : null), inData);
// note, this iterator throws runtime exceptions when canceled.
AppendedRowsIterator it = out.iterator(exec, totalRowCount);
BufferedDataContainer c = exec.createDataContainer(out.getDataTableSpec());
try {
while (it.hasNext()) {
// may throw exception, also sets progress
c.addRowToTable(it.next());
}
} catch (AppendedRowsIterator.RuntimeCanceledExecutionException rcee) {
throw rcee.getCause();
} finally {
c.close();
}
if (it.getNrRowsSkipped() > 0) {
setWarningMessage("Filtered out " + it.getNrRowsSkipped() + " duplicate row id(s).");
}
if (m_enableHiliting) {
// create hilite translation map
Map<RowKey, Set<RowKey>> map = new HashMap<RowKey, Set<RowKey>>();
// map of all RowKeys and duplicate RowKeys in the resulting table
Map<RowKey, RowKey> dupMap = it.getDuplicateNameMap();
for (Map.Entry<RowKey, RowKey> e : dupMap.entrySet()) {
// if a duplicate key
if (!e.getKey().equals(e.getValue())) {
Set<RowKey> set = Collections.singleton(e.getValue());
// put duplicate key and original key into map
map.put(e.getKey(), set);
} else {
// skip duplicate keys
if (!dupMap.containsKey(new RowKey(e.getKey().getString() + m_suffix))) {
Set<RowKey> set = Collections.singleton(e.getValue());
map.put(e.getKey(), set);
}
}
}
m_hiliteTranslator.setMapper(new DefaultHiLiteMapper(map));
}
return new BufferedDataTable[] { c.getTable() };
}
throw new Exception("Both input ports have data but the tables " + "have incompatible specs");
}
use of org.knime.core.node.port.PortObject in project knime-core by knime.
the class SVMLearnerNodeModel method execute.
/**
* {@inheritDoc}
*/
@Override
protected PortObject[] execute(final PortObject[] inData, final ExecutionContext exec) throws Exception {
BufferedDataTable inTable = (BufferedDataTable) inData[0];
DataTableSpec inSpec = inTable.getDataTableSpec();
LearnColumnsAndColumnRearrangerTuple tuple = createTrainTableColumnRearranger(inSpec);
// no progress needed as constant operation (column removal only)
BufferedDataTable trainTable = exec.createColumnRearrangeTable(inTable, tuple.getTrainingRearranger(), exec.createSubProgress(0.0));
DataTableSpec trainSpec = trainTable.getDataTableSpec();
int classpos = trainSpec.findColumnIndex(m_classcol.getStringValue());
CheckUtils.checkArgument(classpos >= 0, "Selected class column not found: " + m_classcol.getStringValue());
// convert input data
ArrayList<DoubleVector> inputData = new ArrayList<DoubleVector>();
List<String> categories = new ArrayList<String>();
StringValue classvalue = null;
for (DataRow row : trainTable) {
exec.checkCanceled();
ArrayList<Double> values = new ArrayList<Double>();
boolean add = true;
for (int i = 0; i < row.getNumCells(); i++) {
if (row.getCell(i).isMissing()) {
add = false;
break;
}
if (i != classpos) {
DoubleValue cell = (DoubleValue) row.getCell(i);
values.add(cell.getDoubleValue());
} else {
classvalue = (StringValue) row.getCell(classpos);
if (!categories.contains(classvalue.getStringValue())) {
categories.add(classvalue.getStringValue());
}
}
}
if (add) {
@SuppressWarnings("null") final String nonNullClassValue = classvalue.getStringValue();
inputData.add(new DoubleVector(row.getKey(), values, nonNullClassValue));
}
}
if (categories.isEmpty()) {
throw new Exception("No categories found to train SVM. " + "Possibly an empty input table was provided.");
}
DoubleVector[] inputDataArr = new DoubleVector[inputData.size()];
inputDataArr = inputData.toArray(inputDataArr);
Kernel kernel = KernelFactory.getKernel(m_kernelType);
Vector<SettingsModelDouble> kernelparams = m_kernelParameters.get(m_kernelType);
for (int i = 0; i < kernel.getNumberParameters(); ++i) {
kernel.setParameter(i, kernelparams.get(i).getDoubleValue());
}
final Svm[] svms = new Svm[categories.size()];
exec.setMessage("Training SVM");
final BinarySvmRunnable[] bst = new BinarySvmRunnable[categories.size()];
for (int i = 0; i < categories.size(); i++) {
bst[i] = new BinarySvmRunnable(inputDataArr, categories.get(i), kernel, m_paramC.getDoubleValue(), exec.createSubProgress((1.0 / categories.size())));
}
ThreadPool pool = KNIMEConstants.GLOBAL_THREAD_POOL;
final Future<?>[] fut = new Future<?>[bst.length];
KNIMETimer timer = KNIMETimer.getInstance();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
try {
exec.checkCanceled();
} catch (final CanceledExecutionException ce) {
for (int i = 0; i < fut.length; i++) {
if (fut[i] != null) {
fut[i].cancel(true);
}
}
super.cancel();
}
}
};
timer.scheduleAtFixedRate(timerTask, 0, 3000);
for (int i = 0; i < bst.length; i++) {
fut[i] = pool.enqueue(bst[i]);
}
try {
pool.runInvisible(new Callable<Void>() {
@Override
public Void call() throws Exception {
for (int i = 0; i < fut.length; ++i) {
fut[i].get();
bst[i].ok();
if (bst[i].getWarning() != null) {
setWarningMessage(bst[i].getWarning());
}
svms[i] = bst[i].getSvm();
}
return null;
}
});
} catch (Exception ex) {
exec.checkCanceled();
Throwable t = ex;
if (ex instanceof ExecutionException) {
t = ex.getCause();
}
if (t instanceof Exception) {
throw (Exception) t;
} else {
throw new Exception(t);
}
} finally {
for (int i = 0; i < fut.length; i++) {
fut[i].cancel(true);
}
timerTask.cancel();
}
// the optional PMML input (can be null)
PMMLPortObject inPMMLPort = m_pmmlInEnabled ? (PMMLPortObject) inData[1] : null;
// create the outgoing PMML spec
PMMLPortObjectSpecCreator specCreator = new PMMLPortObjectSpecCreator(inPMMLPort, inSpec);
specCreator.setLearningCols(trainSpec);
specCreator.setTargetCol(trainSpec.getColumnSpec(m_classcol.getStringValue()));
// create the outgoing PMML port object
PMMLPortObject outPMMLPort = new PMMLPortObject(specCreator.createSpec(), inPMMLPort, inSpec);
outPMMLPort.addModelTranslater(new PMMLSVMTranslator(categories, Arrays.asList(svms), kernel));
m_svms = svms;
return new PortObject[] { outPMMLPort };
}
Aggregations