use of org.knime.core.data.def.DoubleCell in project knime-core by knime.
the class TreeEnsembleClassificationPredictorCellFactory method getCells.
/**
* {@inheritDoc}
*/
@Override
public DataCell[] getCells(final DataRow row) {
TreeEnsembleModelPortObject modelObject = m_predictor.getModelObject();
TreeEnsemblePredictorConfiguration cfg = m_predictor.getConfiguration();
final TreeEnsembleModel ensembleModel = modelObject.getEnsembleModel();
int size = 1;
final boolean appendConfidence = cfg.isAppendPredictionConfidence();
if (appendConfidence) {
size += 1;
}
final boolean appendClassConfidences = cfg.isAppendClassConfidences();
if (appendClassConfidences) {
size += m_targetValueMap.size();
}
final boolean appendModelCount = cfg.isAppendModelCount();
if (appendModelCount) {
size += 1;
}
final boolean hasOutOfBagFilter = m_predictor.hasOutOfBagFilter();
DataCell[] result = new DataCell[size];
DataRow filterRow = new FilterColumnRow(row, m_learnColumnInRealDataIndices);
PredictorRecord record = ensembleModel.createPredictorRecord(filterRow, m_learnSpec);
if (record == null) {
// missing value
Arrays.fill(result, DataType.getMissingCell());
return result;
}
OccurrenceCounter<String> counter = new OccurrenceCounter<String>();
final int nrModels = ensembleModel.getNrModels();
int nrValidModels = 0;
for (int i = 0; i < nrModels; i++) {
if (hasOutOfBagFilter && m_predictor.isRowPartOfTrainingData(row.getKey(), i)) {
// ignore, row was used to train the model
} else {
TreeModelClassification m = ensembleModel.getTreeModelClassification(i);
TreeNodeClassification match = m.findMatchingNode(record);
String majorityClassName = match.getMajorityClassName();
counter.add(majorityClassName);
nrValidModels += 1;
}
}
String bestValue = counter.getMostFrequent();
int index = 0;
if (bestValue == null) {
assert nrValidModels == 0;
Arrays.fill(result, DataType.getMissingCell());
index = size - 1;
} else {
result[index++] = m_targetValueMap.get(bestValue);
if (appendConfidence) {
final int freqValue = counter.getFrequency(bestValue);
result[index++] = new DoubleCell(freqValue / (double) nrValidModels);
}
if (appendClassConfidences) {
for (String key : m_targetValueMap.keySet()) {
int frequency = counter.getFrequency(key);
double ratio = frequency / (double) nrValidModels;
result[index++] = new DoubleCell(ratio);
}
}
}
if (appendModelCount) {
result[index++] = new IntCell(nrValidModels);
}
return result;
}
use of org.knime.core.data.def.DoubleCell in project knime-core by knime.
the class RegressionTreePredictorCellFactory method getCells.
/**
* {@inheritDoc}
*/
@Override
public DataCell[] getCells(final DataRow row) {
RegressionTreeModelPortObject modelObject = m_predictor.getModelObject();
final RegressionTreeModel treeModel = modelObject.getModel();
int size = 1;
DataCell[] result = new DataCell[size];
DataRow filterRow = new FilterColumnRow(row, m_learnColumnInRealDataIndices);
PredictorRecord record = treeModel.createPredictorRecord(filterRow, m_learnSpec);
if (record == null) {
// missing value
Arrays.fill(result, DataType.getMissingCell());
return result;
}
TreeModelRegression tree = treeModel.getTreeModel();
TreeNodeRegression match = tree.findMatchingNode(record);
double nodeMean = match.getMean();
result[0] = new DoubleCell(nodeMean);
return result;
}
use of org.knime.core.data.def.DoubleCell in project knime-core by knime.
the class TestDataGenerator method createNumericTargetColumn.
public static TreeTargetNumericColumnData createNumericTargetColumn(final String dataCSV) {
double[] values = asDataArray(dataCSV);
DataColumnSpec targetSpec = new DataColumnSpecCreator("test-target", DoubleCell.TYPE).createSpec();
TreeTargetNumericColumnDataCreator targetCreator = new TreeTargetNumericColumnDataCreator(targetSpec);
for (int i = 0; i < values.length; i++) {
RowKey rowKey = RowKey.createRowKey((long) i);
targetCreator.add(rowKey, new DoubleCell(values[i]));
}
return targetCreator.createColumnData();
}
use of org.knime.core.data.def.DoubleCell in project knime-core by knime.
the class TreeNumericColumnDataTest method createNumericColumnData.
public static TreeOrdinaryNumericColumnData createNumericColumnData(final TreeEnsembleLearnerConfiguration config, final double[] data, final String name, final int attributeIndex) {
DataColumnSpec colSpec = new DataColumnSpecCreator(name, DoubleCell.TYPE).createSpec();
TreeOrdinaryNumericColumnDataCreator colCreator = new TreeOrdinaryNumericColumnDataCreator(colSpec);
for (int i = 0; i < data.length; i++) {
final RowKey key = RowKey.createRowKey(i);
if (Double.isNaN(data[i])) {
colCreator.add(key, new MissingCell(null));
} else {
colCreator.add(key, new DoubleCell(data[i]));
}
}
return colCreator.createColumnData(attributeIndex, config);
}
use of org.knime.core.data.def.DoubleCell in project knime-core by knime.
the class JoinedTableTest method getRandomRow.
private static final DataRow getRandomRow(final String id) {
DataCell[] cells = new DataCell[3];
cells[0] = new StringCell(id + "-" + RAND.nextInt(100));
cells[1] = new IntCell(RAND.nextInt());
cells[2] = new DoubleCell(RAND.nextDouble());
return new DefaultRow(id, cells);
}
Aggregations