<root>
  <key>TrainVectorClassifier-rf</key>
  <exec>otbcli_TrainVectorClassifier</exec>
  <longname>TrainVectorClassifier (rf)</longname>
  <group>Learning</group>
  <description>Train a classifier based on labeled geometries and a list of features to consider.</description>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_InputVectorDataList">ParameterMultipleInput</parameter_type>
    <key>io.vd</key>
    <name>Input Vector Data</name>
    <description>Input geometries used for training (note : all geometries from the layer will be used)</description>
    <datatype />
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_InputFilename">ParameterFile</parameter_type>
    <key>io.stats</key>
    <name>Input XML image statistics file</name>
    <description>XML file containing mean and variance of each feature.</description>
    <isFolder />
    <optional>True</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_OutputFilename">OutputFile</parameter_type>
    <key>io.confmatout</key>
    <name>Output confusion matrix</name>
    <description>Output file containing the confusion matrix (.csv format).</description>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_OutputFilename">OutputFile</parameter_type>
    <key>io.out</key>
    <name>Output model</name>
    <description>Output file containing the model estimated (.txt format).</description>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_StringList">ParameterString</parameter_type>
    <key>feat</key>
    <name>Field names for training features.</name>
    <description>List of field names in the input vector data to be used as features for training.</description>
    <options />
    <default />
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_String">ParameterString</parameter_type>
    <key>cfield</key>
    <name>Field containing the class id for supervision</name>
    <description>Field containing the class id for supervision. Only geometries with this field available will be taken into account.</description>
    <default>class</default>
    <multiline />
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>layer</key>
    <name>Layer Index</name>
    <description>Index of the layer to use in the input vector file.</description>
    <minValue />
    <maxValue />
    <default>0</default>
    <optional>True</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_InputVectorDataList">ParameterMultipleInput</parameter_type>
    <key>valid.vd</key>
    <name>Validation Vector Data</name>
    <description>Geometries used for validation (must contain the same fields used for training, all geometries from the layer will be used)</description>
    <datatype />
    <optional>True</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>valid.layer</key>
    <name>Layer Index</name>
    <description>Index of the layer to use in the validation vector file.</description>
    <minValue />
    <maxValue />
    <default>0</default>
    <optional>True</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Choice">ParameterSelection</parameter_type>
    <key>classifier</key>
    <name>Classifier to use for the training</name>
    <description>Choice of the classifier to use for the training.</description>
    <options>
      <choices>
        <choice>rf</choice>
        </choices>
    </options>
    <default>0</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>classifier.rf.max</key>
    <name>Maximum depth of the tree</name>
    <description>The depth of the tree. A low value will likely underfit and conversely a high value will likely overfit. The optimal value can be obtained using cross validation or other suitable methods.</description>
    <minValue />
    <maxValue />
    <default>5</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>classifier.rf.min</key>
    <name>Minimum number of samples in each node</name>
    <description>If the number of samples in a node is smaller than this parameter, then the node will not be split. A reasonable value is a small percentage of the total data e.g. 1 percent.</description>
    <minValue />
    <maxValue />
    <default>10</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Float">ParameterNumber</parameter_type>
    <key>classifier.rf.ra</key>
    <name>Termination Criteria for regression tree</name>
    <description>If all absolute differences between an estimated value in a node and the values of the train samples in this node are smaller than this regression accuracy parameter, then the node will not be split.</description>
    <minValue />
    <maxValue />
    <default>0</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>classifier.rf.cat</key>
    <name>Cluster possible values of a categorical variable into K &lt;= cat clusters to find a suboptimal split</name>
    <description>Cluster possible values of a categorical variable into K &lt;= cat clusters to find a suboptimal split.</description>
    <minValue />
    <maxValue />
    <default>10</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>classifier.rf.var</key>
    <name>Size of the randomly selected subset of features at each tree node</name>
    <description>The size of the subset of features, randomly selected at each tree node, that are used to find the best split(s). If you set it to 0, then the size will be set to the square root of the total number of features.</description>
    <minValue />
    <maxValue />
    <default>0</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>classifier.rf.nbtrees</key>
    <name>Maximum number of trees in the forest</name>
    <description>The maximum number of trees in the forest. Typically, the more trees you have, the better the accuracy. However, the improvement in accuracy generally diminishes and reaches an asymptote for a certain number of trees. Also to keep in mind, increasing the number of trees increases the prediction time linearly.</description>
    <minValue />
    <maxValue />
    <default>100</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Float">ParameterNumber</parameter_type>
    <key>classifier.rf.acc</key>
    <name>Sufficient accuracy (OOB error)</name>
    <description>Sufficient accuracy (OOB error).</description>
    <minValue />
    <maxValue />
    <default>0.01</default>
    <optional>False</optional>
  </parameter>
  <parameter>
    <parameter_type source_parameter_type="ParameterType_Int">ParameterNumber</parameter_type>
    <key>rand</key>
    <name>set user defined seed</name>
    <description>Set specific seed. with integer value.</description>
    <minValue />
    <maxValue />
    <default>0</default>
    <optional>True</optional>
  </parameter>
</root>
