Modifier and Type | Method and Description |
---|---|
Classifier |
ClassifierAttributeEval.getClassifier()
Get the classifier used as the base learner.
|
Classifier |
ClassifierSubsetEval.getClassifier()
Get the classifier used as the base learner.
|
Classifier |
WrapperSubsetEval.getClassifier()
Get the classifier used as the base learner.
|
Modifier and Type | Method and Description |
---|---|
void |
ClassifierAttributeEval.setClassifier(Classifier newClassifier)
Set the classifier to use for accuracy estimation
|
void |
ClassifierSubsetEval.setClassifier(Classifier newClassifier)
Set the classifier to use for accuracy estimation
|
void |
WrapperSubsetEval.setClassifier(Classifier newClassifier)
Set the classifier to use for accuracy estimation
|
Modifier and Type | Interface and Description |
---|---|
interface |
IterativeClassifier
Interface for classifiers that can induce models of growing complexity one
step at a time.
|
Modifier and Type | Class and Description |
---|---|
class |
AbstractClassifier
Abstract classifier.
|
class |
IteratedSingleClassifierEnhancer
Abstract utility class for handling settings common to
meta classifiers that build an ensemble from a single base learner.
|
class |
MultipleClassifiersCombiner
Abstract utility class for handling settings common to
meta classifiers that build an ensemble from multiple classifiers.
|
class |
ParallelIteratedSingleClassifierEnhancer
Abstract utility class for handling settings common to meta classifiers that
build an ensemble in parallel from a single base learner.
|
class |
ParallelMultipleClassifiersCombiner
Abstract utility class for handling settings common to
meta classifiers that build an ensemble in parallel using multiple
classifiers.
|
class |
RandomizableClassifier
Abstract utility class for handling settings common to randomizable
classifiers.
|
class |
RandomizableIteratedSingleClassifierEnhancer
Abstract utility class for handling settings common to randomizable
meta classifiers that build an ensemble from a single base learner.
|
class |
RandomizableMultipleClassifiersCombiner
Abstract utility class for handling settings common to randomizable
meta classifiers that build an ensemble from multiple classifiers based
on a given random number seed.
|
class |
RandomizableParallelIteratedSingleClassifierEnhancer
Abstract utility class for handling settings common to randomizable
meta classifiers that build an ensemble in parallel from a single base
learner.
|
class |
RandomizableParallelMultipleClassifiersCombiner
Abstract utility class for handling settings common to
meta classifiers that build an ensemble in parallel using multiple
classifiers based on a given random number seed.
|
class |
RandomizableSingleClassifierEnhancer
Abstract utility class for handling settings common to randomizable
meta classifiers that build an ensemble from a single base learner.
|
class |
SingleClassifierEnhancer
Abstract utility class for handling settings common to meta
classifiers that use a single base learner.
|
Modifier and Type | Method and Description |
---|---|
static Classifier |
AbstractClassifier.forName(String classifierName,
String[] options)
Creates a new instance of a classifier given it's class name and (optional)
arguments to pass to it's setOptions method.
|
Classifier |
BVDecomposeSegCVSub.getClassifier()
Gets the name of the classifier being analysed
|
Classifier |
CheckSource.getClassifier()
Gets the classifier being used for the tests, can be null.
|
Classifier |
SingleClassifierEnhancer.getClassifier()
Get the classifier used as the base learner.
|
Classifier |
BVDecompose.getClassifier()
Gets the name of the classifier being analysed
|
Classifier |
CheckClassifier.getClassifier()
Get the classifier used as the classifier
|
Classifier |
MultipleClassifiersCombiner.getClassifier(int index)
Gets a single classifier from the set of available classifiers.
|
Classifier[] |
MultipleClassifiersCombiner.getClassifiers()
Gets the list of possible classifers to choose from.
|
Classifier |
CheckSource.getSourceCode()
Gets the class to test.
|
static Classifier[] |
AbstractClassifier.makeCopies(Classifier model,
int num)
Creates a given number of deep copies of the given classifier using
serialization.
|
static Classifier |
AbstractClassifier.makeCopy(Classifier model)
Creates a deep copy of the given classifier using serialization.
|
Modifier and Type | Method and Description |
---|---|
void |
Evaluation.crossValidateModel(Classifier classifier,
Instances data,
int numFolds,
Random random)
Performs a (stratified if class is nominal) cross-validation for a
classifier on a set of instances.
|
void |
Evaluation.crossValidateModel(Classifier classifier,
Instances data,
int numFolds,
Random random,
Object... forPredictionsPrinting)
Performs a (stratified if class is nominal) cross-validation for a
classifier on a set of instances.
|
double[] |
Evaluation.evaluateModel(Classifier classifier,
Instances data,
Object... forPredictionsPrinting)
Evaluates the classifier on a given set of instances.
|
static String |
Evaluation.evaluateModel(Classifier classifier,
String[] options)
Evaluates a classifier with the options given in an array of strings.
|
double |
Evaluation.evaluateModelOnce(Classifier classifier,
Instance instance)
Evaluates the classifier on a single instance.
|
double |
Evaluation.evaluateModelOnceAndRecordPrediction(Classifier classifier,
Instance instance)
Evaluates the classifier on a single instance and records the prediction.
|
static Classifier[] |
AbstractClassifier.makeCopies(Classifier model,
int num)
Creates a given number of deep copies of the given classifier using
serialization.
|
static Classifier |
AbstractClassifier.makeCopy(Classifier model)
Creates a deep copy of the given classifier using serialization.
|
static void |
AbstractClassifier.runClassifier(Classifier classifier,
String[] options)
runs the classifier instance with the given options.
|
void |
BVDecomposeSegCVSub.setClassifier(Classifier newClassifier)
Set the classifiers being analysed
|
void |
CheckSource.setClassifier(Classifier value)
Sets the classifier to use for the comparison.
|
void |
SingleClassifierEnhancer.setClassifier(Classifier newClassifier)
Set the base learner.
|
void |
BVDecompose.setClassifier(Classifier newClassifier)
Set the classifiers being analysed
|
void |
CheckClassifier.setClassifier(Classifier newClassifier)
Set the classifier for boosting.
|
void |
MultipleClassifiersCombiner.setClassifiers(Classifier[] classifiers)
Sets the list of possible classifers to choose from.
|
void |
CheckSource.setSourceCode(Classifier value)
Sets the class to test.
|
Modifier and Type | Class and Description |
---|---|
class |
BayesNet
Bayes Network learning using various search
algorithms and quality measures.
Base class for a Bayes Network classifier. |
class |
NaiveBayes
Class for a Naive Bayes classifier using estimator
classes.
|
class |
NaiveBayesMultinomial
Class for building and using a multinomial Naive Bayes classifier.
|
class |
NaiveBayesMultinomialText
Multinomial naive bayes for text data.
|
class |
NaiveBayesMultinomialUpdateable
Class for building and using an updateable multinomial Naive Bayes classifier.
|
class |
NaiveBayesUpdateable
Class for a Naive Bayes classifier using estimator classes.
|
Modifier and Type | Class and Description |
---|---|
class |
BayesNetGenerator
Bayes Network learning using various search
algorithms and quality measures.
Base class for a Bayes Network classifier. |
class |
BIFReader
Builds a description of a Bayes Net classifier
stored in XML BIF 0.3 format.
For more details on XML BIF see: Fabio Cozman, Marek Druzdzel, Daniel Garcia (1998). |
class |
EditableBayesNet
Bayes Network learning using various search
algorithms and quality measures.
Base class for a Bayes Network classifier. |
Modifier and Type | Method and Description |
---|---|
void |
Evaluation.crossValidateModel(Classifier classifier,
Instances data,
int numFolds,
Random random)
Performs a (stratified if class is nominal) cross-validation for a
classifier on a set of instances.
|
void |
Evaluation.crossValidateModel(Classifier classifier,
Instances data,
int numFolds,
Random random,
Object... forPrinting)
Performs a (stratified if class is nominal) cross-validation for a
classifier on a set of instances.
|
double[] |
Evaluation.evaluateModel(Classifier classifier,
Instances data,
Object... forPredictionsPrinting)
Evaluates the classifier on a given set of instances.
|
static String |
Evaluation.evaluateModel(Classifier classifier,
String[] options)
Evaluates a classifier with the options given in an array of strings.
|
double |
Evaluation.evaluateModelOnce(Classifier classifier,
Instance instance)
Evaluates the classifier on a single instance.
|
double |
Evaluation.evaluateModelOnceAndRecordPrediction(Classifier classifier,
Instance instance)
Evaluates the classifier on a single instance and records the prediction.
|
ArrayList<Prediction> |
EvaluationUtils.getCVPredictions(Classifier classifier,
Instances data,
int numFolds)
Generate a bunch of predictions ready for processing, by performing a
cross-validation on the supplied dataset.
|
Prediction |
EvaluationUtils.getPrediction(Classifier classifier,
Instance test)
Generate a single prediction for a test instance given the pre-trained
classifier.
|
ArrayList<Prediction> |
EvaluationUtils.getTestPredictions(Classifier classifier,
Instances test)
Generate a bunch of predictions ready for processing, by performing a
evaluation on a test set assuming the classifier is already trained.
|
ArrayList<Prediction> |
EvaluationUtils.getTrainTestPredictions(Classifier classifier,
Instances train,
Instances test)
Generate a bunch of predictions ready for processing, by performing a
evaluation on a test set after training on the given training set.
|
Modifier and Type | Method and Description |
---|---|
void |
AbstractOutput.print(Classifier classifier,
ConverterUtils.DataSource testset)
Prints the header, classifications and footer to the buffer.
|
void |
AbstractOutput.print(Classifier classifier,
Instances testset)
Prints the header, classifications and footer to the buffer.
|
void |
AbstractOutput.printClassification(Classifier classifier,
Instance inst,
int index)
Prints the classification to the buffer.
|
void |
AbstractOutput.printClassifications(Classifier classifier,
ConverterUtils.DataSource testset)
Prints the classifications to the buffer.
|
void |
AbstractOutput.printClassifications(Classifier classifier,
Instances testset)
Prints the classifications to the buffer.
|
Modifier and Type | Class and Description |
---|---|
class |
GaussianProcesses
* Implements Gaussian processes for regression without hyperparameter-tuning.
|
class |
LinearRegression
Class for using linear regression for prediction.
|
class |
Logistic
Class for building and using a multinomial logistic
regression model with a ridge estimator.
There are some modifications, however, compared to the paper of leCessie and van Houwelingen(1992): If there are k classes for n instances with m attributes, the parameter matrix B to be calculated will be an m*(k-1) matrix. The probability for class j with the exception of the last class is Pj(Xi) = exp(XiBj)/((sum[j=1..(k-1)]exp(Xi*Bj))+1) The last class has probability 1-(sum[j=1..(k-1)]Pj(Xi)) = 1/((sum[j=1..(k-1)]exp(Xi*Bj))+1) The (negative) multinomial log-likelihood is thus: L = -sum[i=1..n]{ sum[j=1..(k-1)](Yij * ln(Pj(Xi))) +(1 - (sum[j=1..(k-1)]Yij)) * ln(1 - sum[j=1..(k-1)]Pj(Xi)) } + ridge * (B^2) In order to find the matrix B for which L is minimised, a Quasi-Newton Method is used to search for the optimized values of the m*(k-1) variables. |
class |
MultilayerPerceptron
A classifier that uses backpropagation to learn a multi-layer perceptron to classify instances.
|
class |
SGD
Implements stochastic gradient descent for learning various linear models (binary class SVM, binary class logistic regression, squared loss, Huber loss and epsilon-insensitive loss linear regression).
|
class |
SGDText
Implements stochastic gradient descent for learning a linear binary class SVM or binary class logistic regression on text data.
|
class |
SimpleLinearRegression
Learns a simple linear regression model.
|
class |
SimpleLogistic
Classifier for building linear logistic regression
models.
|
class |
SMO
Implements John Platt's sequential minimal optimization algorithm for training a support vector classifier.
This implementation globally replaces all missing values and transforms nominal attributes into binary ones. |
class |
SMOreg
SMOreg implements the support vector machine for regression.
|
class |
VotedPerceptron
Implementation of the voted perceptron algorithm by Freund and Schapire.
|
Modifier and Type | Method and Description |
---|---|
Classifier |
SMO.getCalibrator()
Returns the calibrator to use
|
Modifier and Type | Method and Description |
---|---|
void |
SMO.setCalibrator(Classifier value)
sets the calibrator to use
|
Modifier and Type | Class and Description |
---|---|
class |
IBk
K-nearest neighbours classifier.
|
class |
KStar
K* is an instance-based classifier, that is the class of a test instance is based upon the class of those training instances similar to it, as determined by some similarity function.
|
class |
LWL
Locally weighted learning.
|
Modifier and Type | Class and Description |
---|---|
class |
AdaBoostM1
Class for boosting a nominal class classifier using
the Adaboost M1 method.
|
class |
AdditiveRegression
Meta classifier that enhances the performance of a regression base classifier.
|
class |
AttributeSelectedClassifier
Dimensionality of training and test data is reduced by attribute selection before being passed on to a classifier.
|
class |
Bagging
Class for bagging a classifier to reduce variance.
|
class |
ClassificationViaRegression
Class for doing classification using regression methods.
|
class |
CostSensitiveClassifier
A metaclassifier that makes its base classifier cost sensitive.
|
class |
CVParameterSelection
Class for performing parameter selection by cross-validation for any classifier.
For more information, see: R. |
class |
FilteredClassifier
Class for running an arbitrary classifier on data
that has been passed through an arbitrary filter.
|
class |
IterativeClassifierOptimizer
Chooses the best number of iterations for an IterativeClassifier such as
LogitBoost using cross-validation or a percentage split evaluation.
|
class |
LogitBoost
Class for performing additive logistic regression.
|
class |
MultiClassClassifier
A metaclassifier for handling multi-class datasets with 2-class classifiers.
|
class |
MultiClassClassifierUpdateable
A metaclassifier for handling multi-class datasets with 2-class classifiers.
|
class |
MultiScheme
Class for selecting a classifier from among several using cross validation on the training data or the performance on the training data.
|
class |
RandomCommittee
Class for building an ensemble of randomizable base classifiers.
|
class |
RandomizableFilteredClassifier
Class for running an arbitrary classifier on data that has been passed through an arbitrary filter.
|
class |
RandomSubSpace
This method constructs a decision tree based classifier that maintains highest accuracy on training data and improves on generalization accuracy as it grows in complexity.
|
class |
RegressionByDiscretization
A regression scheme that employs any classifier on a copy of the data that has the class attribute (equal-width) discretized.
|
class |
Stacking
Combines several classifiers using the stacking method.
|
class |
Vote
Class for combining classifiers.
|
class |
WeightedInstancesHandlerWrapper
Generic wrapper around any classifier to enable weighted instances support.
Uses resampling with weights if the base classifier is not implementing the weka.core.WeightedInstancesHandler interface and there are instance weights other 1.0 present. |
Modifier and Type | Method and Description |
---|---|
Classifier |
Vote.aggregate(Classifier toAggregate)
Aggregate an object with this one
|
Classifier[][] |
LogitBoost.classifiers()
Returns the array of classifiers that have been built.
|
Classifier |
MultiScheme.getClassifier(int index)
Gets a single classifier from the set of available classifiers.
|
Classifier[] |
MultiScheme.getClassifiers()
Gets the list of possible classifers to choose from.
|
Classifier |
Stacking.getMetaClassifier()
Gets the meta classifier.
|
Modifier and Type | Method and Description |
---|---|
void |
Vote.addPreBuiltClassifier(Classifier c)
Add a prebuilt classifier to the list for use in the ensemble
|
Classifier |
Vote.aggregate(Classifier toAggregate)
Aggregate an object with this one
|
void |
Vote.removePreBuiltClassifier(Classifier c)
Remove a prebuilt classifier from the list to use in the ensemble
|
void |
MultiScheme.setClassifiers(Classifier[] classifiers)
Sets the list of possible classifers to choose from.
|
void |
Stacking.setMetaClassifier(Classifier classifier)
Adds meta classifier
|
Constructor and Description |
---|
AdditiveRegression(Classifier classifier)
Constructor which takes base classifier as argument.
|
Modifier and Type | Class and Description |
---|---|
class |
InputMappedClassifier
Wrapper classifier that addresses incompatible
training and test data by building a mapping between the training data that a
classifier has been built with and the incoming test instances' structure.
|
class |
SerializedClassifier
A wrapper around a serialized classifier model.
|
Modifier and Type | Method and Description |
---|---|
Classifier |
SerializedClassifier.getCurrentModel()
Gets the currently loaded model (can be null).
|
Modifier and Type | Method and Description |
---|---|
void |
SerializedClassifier.setModel(Classifier value)
Sets the fully built model to use, if one doesn't want to load a model from
a file or already deserialized a model from somewhere else.
|
Modifier and Type | Class and Description |
---|---|
class |
GeneralRegression
Class implementing import of PMML General Regression model.
|
class |
NeuralNetwork
Class implementing import of PMML Neural Network model.
|
class |
PMMLClassifier
Abstract base class for all PMML classifiers.
|
class |
Regression
Class implementing import of PMML Regression model.
|
class |
RuleSetModel
Class implementing import of PMML RuleSetModel.
|
class |
SupportVectorMachineModel
Implements a PMML SupportVectorMachineModel
|
class |
TreeModel
Class implementing import of PMML TreeModel.
|
Modifier and Type | Class and Description |
---|---|
class |
DecisionTable
Class for building and using a simple decision
table majority classifier.
For more information see: Ron Kohavi: The Power of Decision Tables. |
class |
JRip
This class implements a propositional rule learner,
Repeated Incremental Pruning to Produce Error Reduction (RIPPER), which was
proposed by William W.
|
class |
M5Rules
Generates a decision list for regression problems using separate-and-conquer.
|
class |
OneR
Class for building and using a 1R classifier; in
other words, uses the minimum-error attribute for prediction, discretizing
numeric attributes.
|
class |
PART
Class for generating a PART decision list.
|
class |
ZeroR
Class for building and using a 0-R classifier.
|
Modifier and Type | Class and Description |
---|---|
class |
DecisionStump
Class for building and using a decision stump.
|
class |
HoeffdingTree
A Hoeffding tree (VFDT) is an incremental, anytime
decision tree induction algorithm that is capable of learning from massive
data streams, assuming that the distribution generating examples does not
change over time.
|
class |
J48
Class for generating a pruned or unpruned C4.5
decision tree.
|
class |
LMT
Classifier for building 'logistic model trees',
which are classification trees with logistic regression functions at the
leaves.
|
class |
M5P
M5Base.
|
class |
RandomForest
Class for constructing a forest of random trees.
For more information see: Leo Breiman (2001). |
class |
RandomTree
Class for constructing a tree that considers K
randomly chosen attributes at each node.
|
class |
REPTree
Fast decision tree learner.
|
Modifier and Type | Method and Description |
---|---|
void |
RandomForest.setClassifier(Classifier newClassifier)
This method only accepts RandomTree arguments.
|
Modifier and Type | Class and Description |
---|---|
class |
LMTNode
Class for logistic model tree structure.
|
class |
LogisticBase
Base/helper class for building logistic regression models with the LogitBoost
algorithm.
|
Modifier and Type | Class and Description |
---|---|
class |
M5Base
M5Base.
|
class |
PreConstructedLinearModel
This class encapsulates a linear regression function.
|
class |
RuleNode
Constructs a node for use in an m5 tree or rule
|
Modifier and Type | Method and Description |
---|---|
Classifier |
RegressionSplitEvaluator.getClassifier()
Get the value of Classifier.
|
Classifier |
ClassifierSplitEvaluator.getClassifier()
Get the value of Classifier.
|
Modifier and Type | Method and Description |
---|---|
void |
RegressionSplitEvaluator.setClassifier(Classifier newClassifier)
Sets the classifier.
|
void |
ClassifierSplitEvaluator.setClassifier(Classifier newClassifier)
Sets the classifier.
|
Modifier and Type | Method and Description |
---|---|
Classifier |
AddClassification.getClassifier()
Gets the classifier used by the filter.
|
Modifier and Type | Method and Description |
---|---|
void |
AddClassification.setClassifier(Classifier value)
Sets the classifier to classify instances with.
|
Modifier and Type | Method and Description |
---|---|
Classifier |
RemoveMisclassified.getClassifier()
Gets the classifier used by the filter.
|
Modifier and Type | Method and Description |
---|---|
void |
RemoveMisclassified.setClassifier(Classifier classifier)
Sets the classifier to classify instances with.
|
Modifier and Type | Method and Description |
---|---|
Classifier |
Classifier.getClassifier()
Get the currently trained classifier.
|
Classifier |
IncrementalClassifierEvent.getClassifier()
Get the classifier
|
Classifier |
BatchClassifierEvent.getClassifier()
Get the classifier
|
Classifier |
Classifier.getClassifierTemplate()
Return the classifier template currently in use.
|
Modifier and Type | Method and Description |
---|---|
void |
IncrementalClassifierEvent.setClassifier(Classifier c) |
void |
BatchClassifierEvent.setClassifier(Classifier classifier)
Set the classifier
|
void |
Classifier.setClassifierTemplate(Classifier c)
Set the template classifier for this wrapper
|
Constructor and Description |
---|
BatchClassifierEvent(Object source,
Classifier scheme,
DataSetEvent trsI,
DataSetEvent tstI,
int setNum,
int maxSetNum)
Creates a new
BatchClassifierEvent instance. |
BatchClassifierEvent(Object source,
Classifier scheme,
DataSetEvent trsI,
DataSetEvent tstI,
int runNum,
int maxRunNum,
int setNum,
int maxSetNum)
Creates a new
BatchClassifierEvent instance. |
IncrementalClassifierEvent(Object source,
Classifier scheme,
Instance currentI,
int status)
Creates a new
IncrementalClassifierEvent instance. |
IncrementalClassifierEvent(Object source,
Classifier scheme,
Instances structure)
Creates a new incremental classifier event that encapsulates
header information and classifier.
|
Modifier and Type | Method and Description |
---|---|
static void |
BoundaryVisualizer.createNewVisualizerWindow(Classifier classifier,
Instances instances)
Creates a new GUI window with all of the BoundaryVisualizer trappings,
|
void |
RemoteBoundaryVisualizerSubTask.setClassifier(Classifier dc)
Set the classifier to use
|
void |
BoundaryVisualizer.setClassifier(Classifier newClassifier)
Set a classifier to use
|
void |
BoundaryPanel.setClassifier(Classifier classifier)
Set the classifier to use.
|
Modifier and Type | Method and Description |
---|---|
Classifier |
ClassifierPanel.getClassifier()
Get the currently configured classifier from the GenericObjectEditor
|
Classifier |
ClassifierErrorsPlotInstances.getClassifier()
Returns the currently set classifier.
|
Modifier and Type | Method and Description |
---|---|
void |
ClassifierErrorsPlotInstances.process(Instance toPredict,
Classifier classifier,
Evaluation eval)
Process a classifier's prediction for an instance and update a set of
plotting instances and additional plotting info.
|
void |
ClassifierPanel.saveClassifier(String name,
Classifier classifier,
Instances trainHeader)
Saves the currently selected classifier.
|
void |
ClassifierErrorsPlotInstances.setClassifier(Classifier value)
Sets the classifier used for making the predictions.
|
static Evaluation |
ClassifierPanel.setupEval(Evaluation eval,
Classifier classifier,
Instances inst,
CostMatrix costMatrix,
ClassifierErrorsPlotInstances plotInstances,
AbstractOutput classificationOutput,
boolean onlySetPriors)
Configures an evaluation object with respect to a classifier, cost matrix,
output and plotting.
|
static Evaluation |
ClassifierPanel.setupEval(Evaluation eval,
Classifier classifier,
Instances inst,
CostMatrix costMatrix,
ClassifierErrorsPlotInstances plotInstances,
AbstractOutput classificationOutput,
boolean onlySetPriors,
boolean collectPredictions)
Configures an evaluation object with respect to a classifier, cost matrix,
output and plotting.
|
Modifier and Type | Method and Description |
---|---|
Classifier |
Classifier.getClassifier()
Get the classifier to train
|
Classifier |
Classifier.processPrimary(Integer setNum,
Integer maxSetNum,
Data data,
PairedDataHelper<Classifier> helper)
Process a training split (primary data handled by the PairedDataHelper)
|
Modifier and Type | Method and Description |
---|---|
void |
Classifier.setClassifier(Classifier classifier)
Set the classifier to train
|
Modifier and Type | Method and Description |
---|---|
Classifier |
Classifier.processPrimary(Integer setNum,
Integer maxSetNum,
Data data,
PairedDataHelper<Classifier> helper)
Process a training split (primary data handled by the PairedDataHelper)
|
void |
Classifier.processSecondary(Integer setNum,
Integer maxSetNum,
Data data,
PairedDataHelper<Classifier> helper)
Process a test split/fold (secondary data handled by PairedDataHelper)
|
Copyright © 2020 University of Waikato, Hamilton, NZ. All rights reserved.