/** * {@inheritDoc} */ @Override public int determineOutputCount(VersatileMLDataSet dataset) { return dataset.getNormHelper().calculateNormalizedOutputCount(); } }
/** * {@inheritDoc} */ @Override public int determineOutputCount(VersatileMLDataSet dataset) { return dataset.getNormHelper().calculateNormalizedOutputCount(); } }
/** * {@inheritDoc} */ @Override public String suggestModelArchitecture(VersatileMLDataSet dataset) { int inputColumns = dataset.getNormHelper().getInputColumns().size(); int outputColumns = dataset.getNormHelper().getOutputColumns().size(); int hiddenCount = (int) ((double)(inputColumns+outputColumns) * 1.5); StringBuilder result = new StringBuilder(); result.append("?->gaussian(c="); result.append(hiddenCount); result.append(")->?"); return result.toString(); }
@Override public int determineOutputCount(VersatileMLDataSet dataset) { return dataset.getNormHelper().calculateNormalizedOutputCount(); } }
/** * {@inheritDoc} */ @Override public int determineOutputCount(VersatileMLDataSet dataset) { return dataset.getNormHelper().calculateNormalizedOutputCount(); } }
/** * {@inheritDoc} */ @Override public String suggestModelArchitecture(VersatileMLDataSet dataset) { int inputColumns = dataset.getNormHelper().getInputColumns().size(); int outputColumns = dataset.getNormHelper().getOutputColumns().size(); int hiddenCount = (int) ((double)(inputColumns+outputColumns) * 1.5); StringBuilder result = new StringBuilder(); result.append("?:B->TANH->"); result.append(hiddenCount); result.append(":B->TANH->?"); return result.toString(); }
/** * {@inheritDoc} */ @Override public int determineOutputCount(VersatileMLDataSet dataset) { return dataset.getNormHelper().getOutputColumns().get(0).getClasses().size(); } }
/** * {@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(); }
/** * 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); }
/** * Select the method to use. * @param dataset The dataset. * @param methodType The type of method. * @param methodArgs The method arguments. * @param trainingType The training type. * @param trainingArgs The training arguments. */ public void selectMethod(VersatileMLDataSet dataset, String methodType, String methodArgs, String trainingType, String trainingArgs) { if (!this.methodConfigurations.containsKey(methodType)) { throw new EncogError("Don't know how to autoconfig method: " + methodType); } this.methodType = methodType; this.methodArgs = methodArgs; this.config = this.methodConfigurations.get(methodType); dataset.getNormHelper().setStrategy( this.methodConfigurations.get(methodType) .suggestNormalizationStrategy(dataset, methodArgs)); }
/** * Select the method to create. * @param dataset The dataset. * @param methodType The method type. */ public void selectMethod(VersatileMLDataSet dataset, String methodType) { if (!this.methodConfigurations.containsKey(methodType)) { throw new EncogError("Don't know how to autoconfig method: " + methodType); } this.config = this.methodConfigurations.get(methodType); this.methodType = methodType; this.methodArgs = this.config.suggestModelArchitecture(dataset); dataset.getNormHelper().setStrategy( this.config.suggestNormalizationStrategy(dataset, methodArgs)); }
@Override protected Object doPredict(String[] line) { NormalizationHelper helper = model.getDataset().getNormHelper(); MLData input = helper.allocateInputVector(); helper.normalizeInputVector(line, input.getData(), false); MLData output = method.compute(input); DataType outputType = types.get(this.output); switch (outputType) { case _float : return output.getData(0); case _class: return helper.denormalizeOutputVectorToString(output)[0]; default: throw new IllegalArgumentException("Output type not yet supported "+outputType); } }
@Override protected ML.ModelResult resultWithInfo(ML.ModelResult result) { return result.withInfo( "trainingError", EncogUtility.calculateRegressionError(method, model.getTrainingDataset()), "validationError",EncogUtility.calculateRegressionError(method, model.getValidationDataset()), "selectedMethod",method.toString(), "normalization",model.getDataset().getNormHelper().toString() ); } }
/** * Create the selected method. * @return The created method. */ public MLMethod createMethod() { if (this.methodType == null) { throw new EncogError( "Please call selectMethod first to choose what type of method you wish to use."); } MLMethodFactory methodFactory = new MLMethodFactory(); MLMethod method = methodFactory.create(methodType, methodArgs, dataset .getNormHelper().calculateNormalizedInputCount(), this.config .determineOutputCount(dataset)); return method; }
/** * {@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; }