/** * Find a normalizer for the specified column definition, and if it is input or output. * @param colDef The column definition. * @param isInput True if the column is input. * @return The normalizer to use. */ private Normalizer findNormalizer(ColumnDefinition colDef, boolean isInput) { Normalizer norm = null; if(isInput) { if( this.inputNormalizers.containsKey(colDef.getDataType())) { norm = this.inputNormalizers.get(colDef.getDataType()); } } else { if( this.outputNormalizers.containsKey(colDef.getDataType())) { norm = this.outputNormalizers.get(colDef.getDataType()); } } if( norm==null ) { throw new EncogError("No normalizer defined for input="+isInput+", type=" + colDef.getDataType()); } return norm; }
/** * {@inheritDoc} */ @Override public String suggestModelArchitecture(VersatileMLDataSet dataset) { int outputColumns = dataset.getNormHelper().getOutputColumns().size(); if( outputColumns>1 ) { throw new EncogError("SVM does not support multiple output columns."); } ColumnType ct = dataset.getNormHelper().getOutputColumns().get(0).getDataType(); StringBuilder result = new StringBuilder(); result.append("?->"); if( ct==ColumnType.nominal ) { result.append("C"); } else { result.append("R"); } result.append("->?"); return result.toString(); }
/** * Define a single column as an output column, all others as inputs. * @param outputColumn The output column. */ public void defineSingleOutputOthersInput(ColumnDefinition outputColumn) { this.helper.clearInputOutput(); for (ColumnDefinition colDef : this.helper.getSourceColumns()) { if (colDef == outputColumn) { defineOutput(colDef); } else if (colDef.getDataType() != ColumnType.ignore) { defineInput(colDef); } } }
/** * Calculate the error for the given method and dataset. * @param method The method to use. * @param data The data to use. * @return The error. */ public double calculateError(MLMethod method, MLDataSet data) { if (this.dataset.getNormHelper().getOutputColumns().size() == 1) { ColumnDefinition cd = this.dataset.getNormHelper() .getOutputColumns().get(0); if (cd.getDataType() == ColumnType.nominal) { return EncogUtility.calculateClassificationError( (MLClassification) method, data); } } return EncogUtility.calculateRegressionError((MLRegression) method, data); }
/** * Define multiple output columns, all others as inputs. * @param outputColumns The output columns. */ public void defineMultipleOutputsOthersInput(ColumnDefinition[] outputColumns) { this.helper.clearInputOutput(); for (ColumnDefinition colDef : this.helper.getSourceColumns()) { boolean isOutput = false; for(ColumnDefinition col : outputColumns) { if( col==colDef) { isOutput = true; } } if ( isOutput) { defineOutput(colDef); } else if (colDef.getDataType() != ColumnType.ignore) { defineInput(colDef); } } }
if (colDef.getDataType() == ColumnType.continuous) { double d = parseDouble(value); if (handler != null) {
if (colDef.getDataType() == ColumnType.continuous) { colDef.setMean(colDef.getMean() / colDef.getCount()); colDef.setSd(0); ColumnDefinition colDef = this.helper.getSourceColumns().get(i); String value = line[colDef.getIndex()]; if (colDef.getDataType() == ColumnType.continuous) { double d = this.helper.parseDouble(value); d = colDef.getMean() - d; if (colDef.getDataType() == ColumnType.continuous) { colDef.setSd(Math.sqrt(colDef.getSd() / colDef.getCount()));
/** * {@inheritDoc} */ @Override public NormalizationStrategy suggestNormalizationStrategy(VersatileMLDataSet dataset, String architecture) { int outputColumns = dataset.getNormHelper().getOutputColumns().size(); ColumnType ct = dataset.getNormHelper().getOutputColumns().get(0).getDataType(); BasicNormalizationStrategy result = new BasicNormalizationStrategy(); result.assignInputNormalizer(ColumnType.continuous,new RangeNormalizer(0,1)); result.assignInputNormalizer(ColumnType.nominal,new OneOfNNormalizer(0,1)); result.assignInputNormalizer(ColumnType.ordinal,new OneOfNNormalizer(0,1)); result.assignOutputNormalizer(ColumnType.continuous,new RangeNormalizer(0,1)); result.assignOutputNormalizer(ColumnType.nominal,new OneOfNNormalizer(0,1)); result.assignOutputNormalizer(ColumnType.ordinal,new OneOfNNormalizer(0,1)); return result; }
/** * {@inheritDoc} */ @Override public NormalizationStrategy suggestNormalizationStrategy(VersatileMLDataSet dataset, String architecture) { int outputColumns = dataset.getNormHelper().getOutputColumns().size(); if( outputColumns>1 ) { throw new EncogError("PNN does not support multiple output columns."); } ColumnType ct = dataset.getNormHelper().getOutputColumns().get(0).getDataType(); BasicNormalizationStrategy result = new BasicNormalizationStrategy(); result.assignInputNormalizer(ColumnType.continuous,new RangeNormalizer(0,1)); result.assignInputNormalizer(ColumnType.nominal,new OneOfNNormalizer(0,1)); result.assignInputNormalizer(ColumnType.ordinal,new OneOfNNormalizer(0,1)); result.assignOutputNormalizer(ColumnType.continuous,new RangeNormalizer(0,1)); result.assignOutputNormalizer(ColumnType.nominal,new IndexedNormalizer()); result.assignOutputNormalizer(ColumnType.ordinal,new OneOfNNormalizer(0,1)); return result; }
/** * {@inheritDoc} */ @Override public NormalizationStrategy suggestNormalizationStrategy(VersatileMLDataSet dataset, String architecture) { int outputColumns = dataset.getNormHelper().getOutputColumns().size(); if( outputColumns>1 ) { throw new EncogError("SVM does not support multiple output columns."); } ColumnType ct = dataset.getNormHelper().getOutputColumns().get(0).getDataType(); BasicNormalizationStrategy result = new BasicNormalizationStrategy(); result.assignInputNormalizer(ColumnType.continuous,new RangeNormalizer(0,1)); result.assignInputNormalizer(ColumnType.nominal,new OneOfNNormalizer(0,1)); result.assignInputNormalizer(ColumnType.ordinal,new OneOfNNormalizer(0,1)); result.assignOutputNormalizer(ColumnType.continuous,new RangeNormalizer(0,1)); result.assignOutputNormalizer(ColumnType.nominal,new IndexedNormalizer()); result.assignOutputNormalizer(ColumnType.ordinal,new OneOfNNormalizer(0,1)); return result; }