public class RemoteExperiment extends Experiment
This class is experimental at present. Has been tested using CSVResultListener (sending results to standard out) and DatabaseResultListener (InstantDB + RmiJdbc bridge).
Getting started:
Start InstantDB (with the RMI bridge) on some machine. If using java2
then specify -Djava.security.policy=db.policy to the
virtual machine. Where db.policy is as follows:
grant { permission java.security.AllPermission; };
Start RemoteEngine servers on x machines as per the instructons in the README_Experiment_Gui file. There must be a DatabaseUtils.props in either the HOME or current directory of each machine, listing all necessary jdbc drivers.
The machine where a RemoteExperiment is started must also have a copy of DatabaseUtils.props listing the URL to the machine where the database server is running (RmiJdbc + InstantDB).
Here is an example of starting a RemoteExperiment:
java -Djava.rmi.server.codebase=file:/path to weka classes/ \ weka.experiment.RemoteExperiment -L 1 -U 10 \ -T /home/ml/datasets/UCI/iris.arff \ -D "weka.experiment.DatabaseResultListener" \ -P "weka.experiment.RandomSplitResultProducer" \ -h rosebud.cs.waikato.ac.nz -h blackbird.cs.waikato.ac.nz -r -- \ -W weka.experiment.ClassifierSplitEvaluator -- \ -W weka.classifiers.bayes.NaiveBayes
The "codebase" property tells rmi where to serve up weka classes from. This can either be a file url (as long as a shared file system is being used that is accessable by the remoteEngine servers), or http url (which of course supposes that a web server is running and you have put your weka classes somewhere that is web accessable). If using a file url the trailing "/" is *most* important unless the weka classes are in a jar file.
Valid options are:
-L <num> The lower run number to start the experiment from. (default 1)
-U <num> The upper run number to end the experiment at (inclusive). (default 10)
-T <arff file> The dataset to run the experiment on. (required, may be specified multiple times)
-P <class name> The full class name of a ResultProducer (required). eg: weka.experiment.RandomSplitResultProducer
-D <class name> The full class name of a ResultListener (required). eg: weka.experiment.CSVResultListener
-N <string> A string containing any notes about the experiment. (default none)
Options specific to result producer weka.experiment.RandomSplitResultProducer:
-P <percent> The percentage of instances to use for training. (default 66)
-D Save raw split evaluator output.
-O <file/directory name/path> The filename where raw output will be stored. If a directory name is specified then then individual outputs will be gzipped, otherwise all output will be zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
-W <class name> The full class name of a SplitEvaluator. eg: weka.experiment.ClassifierSplitEvaluator
-R Set when data is not to be randomized and the data sets' size. Is not to be determined via probabilistic rounding.
Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
-W <class name> The full class name of the classifier. eg: weka.classifiers.bayes.NaiveBayes
-C <index> The index of the class for which IR statistics are to be output. (default 1)
-I <index> The index of an attribute to output in the results. This attribute should identify an instance in order to know which instances are in the test set of a cross validation. if 0 no output (default 0).
-P Add target and prediction columns to the result for each fold.
Options specific to classifier weka.classifiers.rules.ZeroR:
-D If set, classifier is run in debug mode and may output additional info to the console
FILE_EXTENSION
Constructor and Description |
---|
RemoteExperiment()
Construct a new RemoteExperiment using an empty Experiment as base
Experiment
|
RemoteExperiment(Experiment base)
Construct a new RemoteExperiment using a base Experiment
|
Modifier and Type | Method and Description |
---|---|
void |
abortExperiment()
Set the abort flag
|
void |
addRemoteExperimentListener(RemoteExperimentListener r)
Add an object to the list of those interested in recieving update
information from the RemoteExperiment
|
void |
addRemoteHost(java.lang.String hostname)
Add a host name to the list of remote hosts
|
void |
advanceCounters()
overides the one in Experiment
|
Experiment |
getBaseExperiment()
Get the base experiment used by this remote experiment
|
javax.swing.DefaultListModel |
getRemoteHosts()
Get the list of remote host names
|
java.lang.String |
getRevision()
Returns the revision string.
|
boolean |
getSplitByDataSet()
Returns true if sub experiments are to be created on the basis of
data set..
|
void |
initialize()
Prepares a remote experiment for running, creates sub experiments
|
void |
launchNext(int wexp,
int ah)
Launch a sub experiment on a remote host
|
static void |
main(java.lang.String[] args)
Configures/Runs the Experiment from the command line.
|
void |
nextIteration()
Overides the one in Experiment
|
void |
postProcess()
overides the one in Experiment
|
void |
runExperiment()
Overides runExperiment in Experiment
|
void |
setBaseExperiment(Experiment base)
Set the base experiment.
|
void |
setDatasets(javax.swing.DefaultListModel ds)
Set the datasets to use in the experiment
|
void |
setNotes(java.lang.String newNotes)
Set the user notes.
|
void |
setPropertyArray(java.lang.Object newPropArray)
Sets the array of values to set the custom property to.
|
void |
setPropertyPath(PropertyNode[] newPropertyPath)
Sets the path of properties taken to get to the custom property
to iterate over.
|
void |
setRemoteHosts(javax.swing.DefaultListModel list)
Set the list of remote host names
|
void |
setResultListener(ResultListener newResultListener)
Sets the result listener where results will be sent.
|
void |
setResultProducer(ResultProducer newResultProducer)
Set the result producer used for the current experiment.
|
void |
setRunLower(int newRunLower)
Set the lower run number for the experiment.
|
void |
setRunUpper(int newRunUpper)
Set the upper run number for the experiment.
|
void |
setSplitByDataSet(boolean sd)
Set whether sub experiments are to be created on the basis of
data set.
|
void |
setUsePropertyIterator(boolean newUsePropertyIterator)
Sets whether the custom property iterator should be used.
|
java.lang.String |
toString()
Overides toString in Experiment
|
classFirst, getAdvanceDataSetFirst, getCurrentDatasetNumber, getCurrentPropertyNumber, getCurrentRunNumber, getDatasets, getNotes, getOptions, getPropertyArray, getPropertyArrayLength, getPropertyArrayValue, getPropertyPath, getResultListener, getResultProducer, getRunLower, getRunUpper, getUsePropertyIterator, hasMoreIterations, listOptions, read, setAdvanceDataSetFirst, setOptions, write
public RemoteExperiment() throws java.lang.Exception
java.lang.Exception
- if the base experiment is nullpublic RemoteExperiment(Experiment base) throws java.lang.Exception
base
- the base experiment to usejava.lang.Exception
- if the base experiment is nullpublic boolean getSplitByDataSet()
boolean
value indicating whether sub
experiments are to be created on the basis of data set (true) or
run number (false).public void setSplitByDataSet(boolean sd)
sd
- true if sub experiments are to be created on the basis
of data set. Otherwise sub experiments are created on the basis of
run number.public void addRemoteExperimentListener(RemoteExperimentListener r)
r
- a listenerpublic Experiment getBaseExperiment()
public void setBaseExperiment(Experiment base) throws java.lang.Exception
base
- the base experiment to use.java.lang.Exception
- if supplied base experiment is nullpublic void setNotes(java.lang.String newNotes)
setNotes
in class Experiment
newNotes
- New user notes.public void setRunLower(int newRunLower)
setRunLower
in class Experiment
newRunLower
- the lower run number for the experiment.public void setRunUpper(int newRunUpper)
setRunUpper
in class Experiment
newRunUpper
- the upper run number for the experiment.public void setResultListener(ResultListener newResultListener)
setResultListener
in class Experiment
newResultListener
- the result listener where results will be sent.public void setResultProducer(ResultProducer newResultProducer)
setResultProducer
in class Experiment
newResultProducer
- result producer to use for the current
experiment.public void setDatasets(javax.swing.DefaultListModel ds)
setDatasets
in class Experiment
ds
- the list of datasets to usepublic void setUsePropertyIterator(boolean newUsePropertyIterator)
setUsePropertyIterator
in class Experiment
newUsePropertyIterator
- true if sopublic void setPropertyPath(PropertyNode[] newPropertyPath)
setPropertyPath
in class Experiment
newPropertyPath
- an array of PropertyNodespublic void setPropertyArray(java.lang.Object newPropArray)
setPropertyArray
in class Experiment
newPropArray
- a value of type Object which should be an
array of the appropriate values.public void initialize() throws java.lang.Exception
initialize
in class Experiment
java.lang.Exception
- if an error occurspublic void abortExperiment()
public void launchNext(int wexp, int ah)
wexp
- the index of the sub experiment to launchah
- the index of the available host to launch onpublic void nextIteration() throws java.lang.Exception
nextIteration
in class Experiment
java.lang.Exception
- never throws an exceptionpublic void advanceCounters()
advanceCounters
in class Experiment
public void postProcess()
postProcess
in class Experiment
public void addRemoteHost(java.lang.String hostname)
hostname
- the host name to add to the listpublic javax.swing.DefaultListModel getRemoteHosts()
public void setRemoteHosts(javax.swing.DefaultListModel list)
list
- the list of remote host namespublic java.lang.String toString()
toString
in class Experiment
public void runExperiment()
runExperiment
in class Experiment
public java.lang.String getRevision()
getRevision
in interface RevisionHandler
getRevision
in class Experiment
public static void main(java.lang.String[] args)
args
- command line arguments to the Experiment.