Search in sources :

Example 36 with TreeEnsembleModelPortObjectSpec

use of org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec in project knime-core by knime.

the class TreeEnsembleRegressionPredictorNodeModel method configure.

/**
 * {@inheritDoc}
 */
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
    TreeEnsembleModelPortObjectSpec modelSpec = (TreeEnsembleModelPortObjectSpec) inSpecs[0];
    String targetColName = modelSpec.getTargetColumn().getName();
    if (m_configuration == null) {
        m_configuration = TreeEnsemblePredictorConfiguration.createDefault(false, targetColName);
    } else if (!m_configuration.isChangePredictionColumnName()) {
        m_configuration.setPredictionColumnName(TreeEnsemblePredictorConfiguration.getPredictColumnName(targetColName));
    }
    modelSpec.assertTargetTypeMatches(true);
    DataTableSpec dataSpec = (DataTableSpec) inSpecs[1];
    final TreeEnsemblePredictor pred = new TreeEnsemblePredictor(modelSpec, null, dataSpec, m_configuration);
    ColumnRearranger rearranger = pred.getPredictionRearranger();
    // rearranger may be null if confidence values are appended but the
    // model does not have a list of possible target values
    DataTableSpec outSpec = rearranger != null ? rearranger.createSpec() : null;
    return new DataTableSpec[] { outSpec };
}
Also used : DataTableSpec(org.knime.core.data.DataTableSpec) ColumnRearranger(org.knime.core.data.container.ColumnRearranger) TreeEnsembleModelPortObjectSpec(org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec) TreeEnsemblePredictor(org.knime.base.node.mine.treeensemble2.node.predictor.TreeEnsemblePredictor)

Example 37 with TreeEnsembleModelPortObjectSpec

use of org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec in project knime-core by knime.

the class Proximity method calcProximities.

public static ProximityMatrix calcProximities(final BufferedDataTable[] tables, final TreeEnsembleModelPortObject modelPortObject, final ExecutionContext exec) throws InvalidSettingsException, InterruptedException, ExecutionException, CanceledExecutionException {
    ProximityMatrix proximityMatrix = null;
    boolean optionalTable = false;
    switch(tables.length) {
        case 1:
            if (tables[0].size() <= 65500) {
                proximityMatrix = new SingleTableProximityMatrix(tables[0]);
            } else {
                // this is unfortunate and we should maybe think of a different solution
                proximityMatrix = new TwoTablesProximityMatrix(tables[0], tables[0]);
            }
            break;
        case 2:
            optionalTable = true;
            proximityMatrix = new TwoTablesProximityMatrix(tables[0], tables[1]);
            break;
        default:
            throw new IllegalArgumentException("Currently only up to two tables are supported.");
    }
    final TreeEnsembleModelPortObjectSpec modelSpec = modelPortObject.getSpec();
    final TreeEnsembleModel ensembleModel = modelPortObject.getEnsembleModel();
    int[][] learnColIndicesInTables = null;
    if (optionalTable) {
        learnColIndicesInTables = new int[][] { modelSpec.calculateFilterIndices(tables[0].getDataTableSpec()), modelSpec.calculateFilterIndices(tables[1].getDataTableSpec()) };
    } else {
        learnColIndicesInTables = new int[][] { modelSpec.calculateFilterIndices(tables[0].getDataTableSpec()) };
    }
    final ThreadPool tp = KNIMEConstants.GLOBAL_THREAD_POOL;
    final int procCount = 3 * Runtime.getRuntime().availableProcessors() / 2;
    final Semaphore semaphore = new Semaphore(procCount);
    final AtomicReference<Throwable> proxThrowableRef = new AtomicReference<Throwable>();
    final int nrTrees = ensembleModel.getNrModels();
    final Future<?>[] calcFutures = new Future<?>[nrTrees];
    exec.setProgress(0, "Starting proximity calculation per tree.");
    for (int i = 0; i < nrTrees; i++) {
        semaphore.acquire();
        finishedTree(i, exec, nrTrees);
        checkThrowable(proxThrowableRef);
        AbstractTreeModel treeModel = ensembleModel.getTreeModel(i);
        ExecutionMonitor subExec = exec.createSubProgress(0.0);
        if (optionalTable) {
            calcFutures[i] = tp.enqueue(new TwoTablesProximityCalcRunnable(proximityMatrix, tables, learnColIndicesInTables, treeModel, modelPortObject, semaphore, proxThrowableRef, subExec));
        } else {
            calcFutures[i] = tp.enqueue(new SingleTableProximityCalcRunnable(proximityMatrix, tables, learnColIndicesInTables, treeModel, modelPortObject, semaphore, proxThrowableRef, subExec));
        }
    }
    for (int i = 0; i < procCount; i++) {
        semaphore.acquire();
        finishedTree(nrTrees - procCount + i, exec, nrTrees);
    }
    for (Future<?> future : calcFutures) {
        try {
            future.get();
        } catch (Exception e) {
            proxThrowableRef.compareAndSet(null, e);
        }
    }
    checkThrowable(proxThrowableRef);
    proximityMatrix.normalize(1.0 / nrTrees);
    return proximityMatrix;
}
Also used : TreeEnsembleModel(org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModel) TreeEnsembleModelPortObjectSpec(org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec) ThreadPool(org.knime.core.util.ThreadPool) AtomicReference(java.util.concurrent.atomic.AtomicReference) AbstractTreeModel(org.knime.base.node.mine.treeensemble2.model.AbstractTreeModel) Semaphore(java.util.concurrent.Semaphore) InvalidSettingsException(org.knime.core.node.InvalidSettingsException) CanceledExecutionException(org.knime.core.node.CanceledExecutionException) ExecutionException(java.util.concurrent.ExecutionException) Future(java.util.concurrent.Future) ExecutionMonitor(org.knime.core.node.ExecutionMonitor)

Example 38 with TreeEnsembleModelPortObjectSpec

use of org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec in project knime-core by knime.

the class RandomForestProximityNodeModel method configure.

@Override
protected DataTableSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
    TreeEnsembleModelPortObjectSpec modelSpec = (TreeEnsembleModelPortObjectSpec) inSpecs[0];
    DataTableSpec table1Spec = (DataTableSpec) inSpecs[1];
    DataTableSpec table2Spec = (DataTableSpec) inSpecs[2];
    // this method checks whether the input tables contain the necessary columns to use the model
    modelSpec.calculateFilterIndices(table1Spec);
    if (table2Spec != null) {
        modelSpec.calculateFilterIndices(table2Spec);
    }
    // the output table depends on the rows of the input tables
    return null;
}
Also used : DataTableSpec(org.knime.core.data.DataTableSpec) TreeEnsembleModelPortObjectSpec(org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec)

Example 39 with TreeEnsembleModelPortObjectSpec

use of org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec in project knime-core by knime.

the class RandomForestNearestNeighborNodeModel method configure.

/**
 * {@inheritDoc}
 */
@Override
protected DataTableSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
    TreeEnsembleModelPortObjectSpec modelSpec = (TreeEnsembleModelPortObjectSpec) inSpecs[0];
    DataTableSpec tableSpec1 = (DataTableSpec) inSpecs[1];
    // this method throws an InvalidSettingsException if the tableSpecs are not compatible to the model
    modelSpec.calculateFilterIndices(tableSpec1);
    if (inSpecs[2] != null) {
        DataTableSpec tableSpec2 = (DataTableSpec) inSpecs[2];
        modelSpec.calculateFilterIndices(tableSpec2);
    }
    DataTableSpec[] nearestNeighborSpecs = ProximityMatrix.createNearestNeighborOutSpecs(m_numNearestNeighbors.getIntValue());
    return nearestNeighborSpecs;
}
Also used : DataTableSpec(org.knime.core.data.DataTableSpec) TreeEnsembleModelPortObjectSpec(org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec)

Example 40 with TreeEnsembleModelPortObjectSpec

use of org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec in project knime-core by knime.

the class RandomForestClassificationLearnerNodeModel method createOutOfBagPredictor.

/**
 * @param ensembleSpec
 * @param ensembleModel
 * @param inSpec
 * @return
 * @throws InvalidSettingsException
 */
private TreeEnsemblePredictor createOutOfBagPredictor(final TreeEnsembleModelPortObjectSpec ensembleSpec, final TreeEnsembleModelPortObject ensembleModel, final DataTableSpec inSpec) throws InvalidSettingsException {
    String targetColumn = m_configuration.getTargetColumn();
    TreeEnsemblePredictorConfiguration ooBConfig = new TreeEnsemblePredictorConfiguration(false, targetColumn);
    String append = targetColumn + " (Out-of-bag)";
    ooBConfig.setPredictionColumnName(append);
    ooBConfig.setAppendPredictionConfidence(true);
    ooBConfig.setAppendClassConfidences(true);
    ooBConfig.setAppendModelCount(true);
    return new TreeEnsemblePredictor(ensembleSpec, ensembleModel, inSpec, ooBConfig);
}
Also used : TreeEnsemblePredictorConfiguration(org.knime.base.node.mine.treeensemble2.node.predictor.TreeEnsemblePredictorConfiguration) TreeEnsemblePredictor(org.knime.base.node.mine.treeensemble2.node.predictor.TreeEnsemblePredictor)

Aggregations

TreeEnsembleModelPortObjectSpec (org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObjectSpec)40 DataTableSpec (org.knime.core.data.DataTableSpec)38 ColumnRearranger (org.knime.core.data.container.ColumnRearranger)25 TreeEnsemblePredictor (org.knime.base.node.mine.treeensemble2.node.predictor.TreeEnsemblePredictor)22 TreeEnsembleModelPortObject (org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModelPortObject)12 FilterLearnColumnRearranger (org.knime.base.node.mine.treeensemble2.node.learner.TreeEnsembleLearnerConfiguration.FilterLearnColumnRearranger)12 BufferedDataTable (org.knime.core.node.BufferedDataTable)12 InvalidSettingsException (org.knime.core.node.InvalidSettingsException)12 PortObjectSpec (org.knime.core.node.port.PortObjectSpec)9 TreeEnsemblePredictorConfiguration (org.knime.base.node.mine.treeensemble2.node.predictor.TreeEnsemblePredictorConfiguration)8 GradientBoostingModelPortObject (org.knime.base.node.mine.treeensemble2.model.GradientBoostingModelPortObject)7 GradientBoostingPredictor (org.knime.base.node.mine.treeensemble2.node.gradientboosting.predictor.GradientBoostingPredictor)7 ExecutionMonitor (org.knime.core.node.ExecutionMonitor)7 TreeData (org.knime.base.node.mine.treeensemble2.data.TreeData)6 TreeDataCreator (org.knime.base.node.mine.treeensemble2.data.TreeDataCreator)6 DataColumnSpec (org.knime.core.data.DataColumnSpec)6 PortObject (org.knime.core.node.port.PortObject)6 ExecutionException (java.util.concurrent.ExecutionException)5 MultiClassGradientBoostedTreesModel (org.knime.base.node.mine.treeensemble2.model.MultiClassGradientBoostedTreesModel)5 TreeEnsembleModel (org.knime.base.node.mine.treeensemble2.model.TreeEnsembleModel)5