RapidMiner

Optimizing Set Macro on 7.5

Elite III

Optimizing Set Macro on 7.5

Is anyone else finding problems optimizing Set Macro in version 7.5 of RapidMiner?  

Was trying to optimize a python model & found that the value parametrer of Set Macro doesn't appear in Optimize Evolutionary.  

 

 

<?xml version="1.0" encoding="UTF-8"?><process version="7.5.001">
  <context>
    <input/>
    <output/>
    <macros/>
  </context>
  <operator activated="true" class="process" compatibility="7.5.001" expanded="true" name="Process">
    <process expanded="true">
      <operator activated="true" class="retrieve" compatibility="7.5.001" expanded="true" height="68" name="Retrieve Iris" width="90" x="45" y="34">
        <parameter key="repository_entry" value="//Samples/data/Iris"/>
      </operator>
      <operator activated="true" class="optimize_parameters_evolutionary" compatibility="6.0.003" expanded="true" height="103" name="Optimize Parameters (Evolutionary)" width="90" x="313" y="34">
        <list key="parameters">
          <parameter key="nTree.value" value="[1.0;100.0]"/>
        </list>
        <process expanded="true">
          <operator activated="true" class="subprocess" compatibility="7.5.001" expanded="true" height="82" name="Hyperparameters" width="90" x="112" y="34">
            <process expanded="true">
              <operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="nTree" width="90" x="45" y="34">
                <parameter key="macro" value="nTree"/>
                <parameter key="value" value="200"/>
              </operator>
              <operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minSizeSplit" width="90" x="246" y="34">
                <parameter key="macro" value="minSizeSplit"/>
                <parameter key="value" value="4"/>
              </operator>
              <operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minLeafSize" width="90" x="45" y="289">
                <parameter key="macro" value="minLeafSize"/>
                <parameter key="value" value="2"/>
              </operator>
              <operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="maxDepth" width="90" x="45" y="391">
                <parameter key="macro" value="maxDepth"/>
                <parameter key="value" value="20"/>
              </operator>
              <connect from_port="in 1" to_op="nTree" to_port="through 1"/>
              <connect from_op="nTree" from_port="through 1" to_op="minSizeSplit" to_port="through 1"/>
              <connect from_op="minSizeSplit" from_port="through 1" to_op="minLeafSize" to_port="through 1"/>
              <connect from_op="minLeafSize" from_port="through 1" to_op="maxDepth" to_port="through 1"/>
              <connect from_op="maxDepth" from_port="through 1" to_port="out 1"/>
              <portSpacing port="source_in 1" spacing="0"/>
              <portSpacing port="source_in 2" spacing="0"/>
              <portSpacing port="sink_out 1" spacing="0"/>
              <portSpacing port="sink_out 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="select_attributes" compatibility="7.5.001" expanded="true" height="82" name="Select Attributes" width="90" x="246" y="34">
            <parameter key="attribute_filter_type" value="single"/>
            <parameter key="attribute" value="id"/>
            <parameter key="invert_selection" value="true"/>
            <parameter key="include_special_attributes" value="true"/>
          </operator>
          <operator activated="true" class="concurrency:cross_validation" compatibility="7.5.001" expanded="true" height="145" name="Cross Validation 2" width="90" x="447" y="34">
            <parameter key="use_local_random_seed" value="true"/>
            <process expanded="true">
              <operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="82" name="BDT (sklearn)" width="90" x="112" y="34">
                <parameter key="script" value="&#10;import pandas as pd&#10;from sklearn.ensemble import GradientBoostingClassifier&#10;from sklearn.ensemble import RandomForestClassifier #use RandomForestRegressor for regression problem&#10;&#10;# This script creates a RandomForestClassifier from SKLearn on RM data&#10;# It can be used as a generic template for other sklearn classifiers or regressors&#10;&#10;def rm_main(data):&#10;    metadata =  data.rm_metadata&#10;&#10;    # Get the list of regular attributes and the label&#10;    df = pd.DataFrame(metadata).T&#10;    label = df[df[1]==&quot;label&quot;].index.values&#10;    regular = df[df[1] != df[1]].index.values&#10;&#10;    # === RandomForest === #&#10;    # Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset&#10;    # Create Random Forest object&#10;    model= RandomForestClassifier(n_estimators = %{nTree}&#10;                                , max_depth = %{maxDepth}&#10;                                , min_samples_split = %{minSizeSplit} # The minimum number of samples required to split an internal node&#10;                                , min_samples_leaf = %{minLeafSize} # The minimum number of samples required to be at a leaf node&#10;                                &#10;                                 )&#10;    # Train the model using the training sets and check score&#10;    # model.fit(X, y)&#10;    model.fit(data[regular], data[label])&#10;    # Predict Output&#10;    # predicted = model.predict(x_test)&#10;    return (model,regular,label[0]), data"/>
              </operator>
              <connect from_port="training set" to_op="BDT (sklearn)" to_port="input 1"/>
              <connect from_op="BDT (sklearn)" from_port="output 1" to_port="model"/>
              <portSpacing port="source_training set" spacing="0"/>
              <portSpacing port="sink_model" spacing="0"/>
              <portSpacing port="sink_through 1" spacing="0"/>
            </process>
            <process expanded="true">
              <operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="103" name="Apply Model (2)" width="90" x="112" y="34">
                <parameter key="script" value="import pandas as pd&#10;&#10;# rm_main is a mandatory function,&#10;# the number of arguments has to be the number of input ports (can be none)&#10;&#10;def rm_main(rfinfo, data):&#10;    rf = rfinfo[0]&#10;    regular = rfinfo[1]&#10;    label = rfinfo[2]&#10;    meta = data.rm_metadata&#10;    predictions = rf.predict(data[regular])&#10;    confidences = rf.predict_proba(data[regular])&#10;&#10;&#10;    predictions = pd.DataFrame(predictions, columns=[&quot;prediction(&quot;+label+&quot;)&quot;])&#10;    confidences = pd.DataFrame(confidences,&#10;                               columns=[&quot;confidence(&quot; + str(c) + &quot;)&quot; for c in rf.classes_])&#10;&#10;    data = data.join(predictions)&#10;    data = data.join(confidences)&#10;    data.rm_metadata = meta&#10;    data.rm_metadata[&quot;prediction(&quot;+label+&quot;)&quot;] = (&quot;nominal&quot;,&quot;prediction&quot;)&#10;&#10;    for c in rf.classes_:&#10;        data.rm_metadata[&quot;confidence(&quot;+str(c)+&quot;)&quot;] = (&quot;numerical&quot;,&quot;confidence_&quot;+str(c))&#10;&#10;    return data, rf"/>
              </operator>
              <operator activated="true" class="performance_classification" compatibility="7.5.001" expanded="true" height="82" name="Python" width="90" x="246" y="34">
                <list key="class_weights"/>
              </operator>
              <connect from_port="model" to_op="Apply Model (2)" to_port="input 1"/>
              <connect from_port="test set" to_op="Apply Model (2)" to_port="input 2"/>
              <connect from_op="Apply Model (2)" from_port="output 1" to_op="Python" to_port="labelled data"/>
              <connect from_op="Python" from_port="performance" to_port="performance 1"/>
              <portSpacing port="source_model" spacing="0"/>
              <portSpacing port="source_test set" spacing="0"/>
              <portSpacing port="source_through 1" spacing="0"/>
              <portSpacing port="sink_test set results" spacing="0"/>
              <portSpacing port="sink_performance 1" spacing="0"/>
              <portSpacing port="sink_performance 2" spacing="0"/>
            </process>
            <description align="center" color="transparent" colored="false" width="126">Python</description>
          </operator>
          <operator activated="true" class="log" compatibility="7.5.001" expanded="true" height="82" name="Log" width="90" x="715" y="30">
            <list key="log">
              <parameter key="Count" value="operator.Apply Model (2).value.applycount"/>
              <parameter key=" Testing Error" value="operator.Cross Validation 2.value.performance 1"/>
              <parameter key="Training StdDev" value="operator.Cross Validation 2.value.std deviation 1"/>
              <parameter key="nTree" value="operator.nTree.parameter.value"/>
              <parameter key="maxDepth" value="operator.maxDepth.parameter.value"/>
              <parameter key="minLeafSize" value="operator.minLeafSize.parameter.value"/>
              <parameter key="minSizeSplit" value="operator.minSizeSplit.parameter.value"/>
            </list>
          </operator>
          <connect from_port="input 1" to_op="Hyperparameters" to_port="in 1"/>
          <connect from_op="Hyperparameters" from_port="out 1" to_op="Select Attributes" to_port="example set input"/>
          <connect from_op="Select Attributes" from_port="example set output" to_op="Cross Validation 2" to_port="example set"/>
          <connect from_op="Cross Validation 2" from_port="performance 1" to_op="Log" to_port="through 1"/>
          <connect from_op="Log" from_port="through 1" to_port="performance"/>
          <portSpacing port="source_input 1" spacing="0"/>
          <portSpacing port="source_input 2" spacing="0"/>
          <portSpacing port="sink_performance" spacing="0"/>
          <portSpacing port="sink_result 1" spacing="0"/>
        </process>
      </operator>
      <connect from_op="Retrieve Iris" from_port="output" to_op="Optimize Parameters (Evolutionary)" to_port="input 1"/>
      <connect from_op="Optimize Parameters (Evolutionary)" from_port="performance" to_port="result 1"/>
      <connect from_op="Optimize Parameters (Evolutionary)" from_port="parameter" to_port="result 2"/>
      <portSpacing port="source_input 1" spacing="0"/>
      <portSpacing port="sink_result 1" spacing="0"/>
      <portSpacing port="sink_result 2" spacing="0"/>
      <portSpacing port="sink_result 3" spacing="0"/>
    </process>
  </operator>
</process>
-- Training, Consulting, Sales in China, Hong Kong & Taiwan --
www.RapidMinerChina.com
2 REPLIES
Community Manager

Re: Optimizing Set Macro on 7.5

I think this isn't a bug because the Evolutionary optimzer uses the genetic parameters to 'randomly' assign values, so you can't take a Grid approach this. Did you try this in a regular Grid optmizer?

Regards,
Thomas
LinkedIn: Thomas Ott
Blog: Neural Market Trends
Highlighted
Elite III

Re: Optimizing Set Macro on 7.5

[ Edited ]

If not a bug then it's a missing feature. I've managed to create a workaround which works, but is clearly not the most efficient. Let's move this thread into feature requests. 

 

Edit: realise my process didn't display properly.  

 

As you can see, the workaround uses RM modelling operators to represent the values that I want to change in the Python code.  So the feature I'd like is an operator which Optimize Parameters Evolutionary can access allowing values to be set and used by macros.  

 

<?xml version="1.0" encoding="UTF-8"?><process version="7.5.001">
  <context>
    <input/>
    <output/>
    <macros/>
  </context>
  <operator activated="true" class="process" compatibility="7.5.001" expanded="true" name="Process">
    <process expanded="true">
      <operator activated="true" class="retrieve" compatibility="7.5.001" expanded="true" height="68" name="Retrieve Iris" width="90" x="45" y="34">
        <parameter key="repository_entry" value="//Samples/data/Iris"/>
      </operator>
      <operator activated="true" class="optimize_parameters_evolutionary" compatibility="6.0.003" expanded="true" height="124" name="Optimize Parameters (Evolutionary)" width="90" x="313" y="34">
        <list key="parameters">
          <parameter key="parameterSet1.number_of_trees" value="[1.0;100.0]"/>
          <parameter key="parameterSet1.maximal_depth" value="[-1.0;100.0]"/>
          <parameter key="parameterSet1.minimal_leaf_size" value="[1.0;100.0]"/>
          <parameter key="parameterSet1.minimal_size_for_split" value="[1.0;100.0]"/>
        </list>
        <parameter key="use_early_stopping" value="true"/>
        <parameter key="population_size" value="3"/>
        <process expanded="true">
          <operator activated="true" class="subprocess" compatibility="7.5.001" expanded="true" height="103" name="Hyperparameters" width="90" x="45" y="34">
            <process expanded="true">
              <operator activated="true" class="generate_data" compatibility="7.5.001" expanded="true" height="68" name="Generate Data" width="90" x="45" y="34">
                <parameter key="target_function" value="random classification"/>
              </operator>
              <operator activated="true" class="concurrency:parallel_random_forest" compatibility="7.5.001" expanded="true" height="82" name="parameterSet1" width="90" x="179" y="136">
                <parameter key="number_of_trees" value="57"/>
                <parameter key="maximal_depth" value="94"/>
                <parameter key="minimal_leaf_size" value="7"/>
                <parameter key="minimal_size_for_split" value="70"/>
              </operator>
              <operator activated="true" class="operator_toolbox:get_parameters" compatibility="0.3.000" expanded="true" height="103" name="Get Parameters" width="90" x="313" y="85">
                <parameter key="Operator name" value="parameterSet1"/>
              </operator>
              <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="nTree" width="90" x="447" y="493">
                <parameter key="macro" value="nTree"/>
                <parameter key="value" value="200"/>
              </operator>
              <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minSizeSplit" width="90" x="581" y="493">
                <parameter key="macro" value="minSizeSplit"/>
                <parameter key="value" value="4"/>
              </operator>
              <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minLeafSize" width="90" x="715" y="493">
                <parameter key="macro" value="minLeafSize"/>
                <parameter key="value" value="2"/>
              </operator>
              <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="103" name="maxDepth" width="90" x="849" y="493">
                <parameter key="macro" value="maxDepth"/>
                <parameter key="value" value="20"/>
              </operator>
              <operator activated="true" class="converters:parameter_set_2_example_set" compatibility="0.3.000" expanded="true" height="103" name="Parameter Set to ExampleSet" width="90" x="447" y="85"/>
              <operator activated="true" class="extract_macro" compatibility="7.5.001" expanded="true" height="68" name="Extract Macro" width="90" x="648" y="85">
                <parameter key="macro" value="nTree"/>
                <parameter key="macro_type" value="data_value"/>
                <parameter key="attribute_name" value="parameterSet1.number_of_trees"/>
                <parameter key="example_index" value="1"/>
                <list key="additional_macros">
                  <parameter key="minSizeSplit" value="parameterSet1.minimal_size_for_split"/>
                  <parameter key="minLeafSize" value="parameterSet1.minimal_leaf_size"/>
                  <parameter key="maxDepth" value="parameterSet1.maximal_depth"/>
                </list>
                <description align="center" color="transparent" colored="false" width="126">Extracts the parameters to macro values</description>
              </operator>
              <connect from_port="in 1" to_port="out 1"/>
              <connect from_op="Generate Data" from_port="output" to_op="parameterSet1" to_port="training set"/>
              <connect from_op="parameterSet1" from_port="model" to_op="Get Parameters" to_port="through 1"/>
              <connect from_op="Get Parameters" from_port="parameters" to_op="Parameter Set to ExampleSet" to_port="parameters"/>
              <connect from_op="nTree" from_port="through 1" to_op="minSizeSplit" to_port="through 1"/>
              <connect from_op="minSizeSplit" from_port="through 1" to_op="minLeafSize" to_port="through 1"/>
              <connect from_op="minLeafSize" from_port="through 1" to_op="maxDepth" to_port="through 1"/>
              <connect from_op="maxDepth" from_port="through 1" to_op="maxDepth" to_port="through 2"/>
              <connect from_op="Parameter Set to ExampleSet" from_port="exampleSet" to_op="Extract Macro" to_port="example set"/>
              <connect from_op="Extract Macro" from_port="example set" to_port="out 2"/>
              <portSpacing port="source_in 1" spacing="0"/>
              <portSpacing port="source_in 2" spacing="0"/>
              <portSpacing port="sink_out 1" spacing="0"/>
              <portSpacing port="sink_out 2" spacing="0"/>
              <portSpacing port="sink_out 3" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="select_attributes" compatibility="7.5.001" expanded="true" height="82" name="Select Attributes" width="90" x="246" y="34">
            <parameter key="attribute_filter_type" value="single"/>
            <parameter key="attribute" value="id"/>
            <parameter key="invert_selection" value="true"/>
            <parameter key="include_special_attributes" value="true"/>
          </operator>
          <operator activated="true" class="concurrency:cross_validation" compatibility="7.5.001" expanded="true" height="145" name="Cross Validation 2" width="90" x="447" y="34">
            <parameter key="use_local_random_seed" value="true"/>
            <process expanded="true">
              <operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="82" name="Random Forest" width="90" x="112" y="34">
                <parameter key="script" value="&#10;import pandas as pd&#10;from sklearn.ensemble import GradientBoostingClassifier&#10;from sklearn.ensemble import RandomForestClassifier #use RandomForestRegressor for regression problem&#10;&#10;# This script creates a RandomForestClassifier from SKLearn on RM data&#10;# It can be used as a generic template for other sklearn classifiers or regressors&#10;&#10;def rm_main(data):&#10;    metadata =  data.rm_metadata&#10;&#10;    # Get the list of regular attributes and the label&#10;    df = pd.DataFrame(metadata).T&#10;    label = df[df[1]==&quot;label&quot;].index.values&#10;    regular = df[df[1] != df[1]].index.values&#10;&#10;    # === RandomForest === #&#10;    # Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset&#10;    # Create Random Forest object&#10;    model= RandomForestClassifier(n_estimators = %{nTree}&#10;                                , max_depth = %{maxDepth}&#10;                                , min_samples_split = %{minSizeSplit} # The minimum number of samples required to split an internal node&#10;                                , min_samples_leaf = %{minLeafSize} # The minimum number of samples required to be at a leaf node&#10;                                , random_state = 1992&#10;                                 )&#10;    # Train the model using the training sets and check score&#10;    # model.fit(X, y)&#10;    model.fit(data[regular], data[label])&#10;    # Predict Output&#10;    # predicted = model.predict(x_test)&#10;    return (model,regular,label[0]), data"/>
              </operator>
              <connect from_port="training set" to_op="Random Forest" to_port="input 1"/>
              <connect from_op="Random Forest" from_port="output 1" to_port="model"/>
              <portSpacing port="source_training set" spacing="0"/>
              <portSpacing port="sink_model" spacing="0"/>
              <portSpacing port="sink_through 1" spacing="0"/>
            </process>
            <process expanded="true">
              <operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="103" name="Apply Model (2)" width="90" x="112" y="34">
                <parameter key="script" value="import pandas as pd&#10;&#10;# rm_main is a mandatory function,&#10;# the number of arguments has to be the number of input ports (can be none)&#10;&#10;def rm_main(rfinfo, data):&#10;    rf = rfinfo[0]&#10;    regular = rfinfo[1]&#10;    label = rfinfo[2]&#10;    meta = data.rm_metadata&#10;    predictions = rf.predict(data[regular])&#10;    confidences = rf.predict_proba(data[regular])&#10;&#10;&#10;    predictions = pd.DataFrame(predictions, columns=[&quot;prediction(&quot;+label+&quot;)&quot;])&#10;    confidences = pd.DataFrame(confidences,&#10;                               columns=[&quot;confidence(&quot; + str(c) + &quot;)&quot; for c in rf.classes_])&#10;&#10;    data = data.join(predictions)&#10;    data = data.join(confidences)&#10;    data.rm_metadata = meta&#10;    data.rm_metadata[&quot;prediction(&quot;+label+&quot;)&quot;] = (&quot;nominal&quot;,&quot;prediction&quot;)&#10;&#10;    for c in rf.classes_:&#10;        data.rm_metadata[&quot;confidence(&quot;+str(c)+&quot;)&quot;] = (&quot;numerical&quot;,&quot;confidence_&quot;+str(c))&#10;&#10;    return data, rf"/>
              </operator>
              <operator activated="true" class="performance_classification" compatibility="7.5.001" expanded="true" height="82" name="Python" width="90" x="246" y="34">
                <list key="class_weights"/>
              </operator>
              <connect from_port="model" to_op="Apply Model (2)" to_port="input 1"/>
              <connect from_port="test set" to_op="Apply Model (2)" to_port="input 2"/>
              <connect from_op="Apply Model (2)" from_port="output 1" to_op="Python" to_port="labelled data"/>
              <connect from_op="Python" from_port="performance" to_port="performance 1"/>
              <portSpacing port="source_model" spacing="0"/>
              <portSpacing port="source_test set" spacing="0"/>
              <portSpacing port="source_through 1" spacing="0"/>
              <portSpacing port="sink_test set results" spacing="0"/>
              <portSpacing port="sink_performance 1" spacing="0"/>
              <portSpacing port="sink_performance 2" spacing="0"/>
            </process>
            <description align="center" color="transparent" colored="false" width="126">Python</description>
          </operator>
          <operator activated="true" class="subprocess" compatibility="7.5.001" expanded="true" height="82" name="Extract Performance Log" width="90" x="648" y="187">
            <process expanded="true">
              <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="LognTree" width="90" x="45" y="34">
                <parameter key="macro_name" value="nTree"/>
              </operator>
              <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="Log maxDepth" width="90" x="179" y="34">
                <parameter key="macro_name" value="maxDepth"/>
              </operator>
              <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="Log minLeafSize" width="90" x="313" y="34">
                <parameter key="macro_name" value="minLeafSize"/>
              </operator>
              <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="Log minSizeSplit" width="90" x="447" y="34">
                <parameter key="macro_name" value="minSizeSplit"/>
              </operator>
              <operator activated="true" class="log" compatibility="7.5.001" expanded="true" height="82" name="Log" width="90" x="581" y="34">
                <list key="log">
                  <parameter key="Count" value="operator.Apply Model (2).value.applycount"/>
                  <parameter key=" Testing Error" value="operator.Cross Validation 2.value.performance 1"/>
                  <parameter key="Training StdDev" value="operator.Cross Validation 2.value.std deviation 1"/>
                  <parameter key="maxDepth" value="operator.Log maxDepth.value.macro_value"/>
                  <parameter key="minLeafSize" value="operator.Log minLeafSize.value.macro_value"/>
                  <parameter key="minSizeSplit" value="operator.Log minSizeSplit.value.macro_value"/>
                  <parameter key="Number of Trees" value="operator.LognTree.value.macro_value"/>
                </list>
              </operator>
              <connect from_port="in 1" to_op="LognTree" to_port="through 1"/>
              <connect from_op="LognTree" from_port="through 1" to_op="Log maxDepth" to_port="through 1"/>
              <connect from_op="Log maxDepth" from_port="through 1" to_op="Log minLeafSize" to_port="through 1"/>
              <connect from_op="Log minLeafSize" from_port="through 1" to_op="Log minSizeSplit" to_port="through 1"/>
              <connect from_op="Log minSizeSplit" from_port="through 1" to_op="Log" to_port="through 1"/>
              <connect from_op="Log" from_port="through 1" to_port="out 1"/>
              <portSpacing port="source_in 1" spacing="0"/>
              <portSpacing port="source_in 2" spacing="0"/>
              <portSpacing port="sink_out 1" spacing="0"/>
              <portSpacing port="sink_out 2" spacing="0"/>
            </process>
          </operator>
          <connect from_port="input 1" to_op="Hyperparameters" to_port="in 1"/>
          <connect from_op="Hyperparameters" from_port="out 1" to_op="Select Attributes" to_port="example set input"/>
          <connect from_op="Select Attributes" from_port="example set output" to_op="Cross Validation 2" to_port="example set"/>
          <connect from_op="Cross Validation 2" from_port="model" to_port="result 1"/>
          <connect from_op="Cross Validation 2" from_port="performance 1" to_op="Extract Performance Log" to_port="in 1"/>
          <connect from_op="Extract Performance Log" from_port="out 1" to_port="performance"/>
          <portSpacing port="source_input 1" spacing="0"/>
          <portSpacing port="source_input 2" spacing="0"/>
          <portSpacing port="sink_performance" spacing="0"/>
          <portSpacing port="sink_result 1" spacing="0"/>
          <portSpacing port="sink_result 2" spacing="0"/>
        </process>
      </operator>
      <connect from_op="Retrieve Iris" from_port="output" to_op="Optimize Parameters (Evolutionary)" to_port="input 1"/>
      <connect from_op="Optimize Parameters (Evolutionary)" from_port="performance" to_port="result 1"/>
      <connect from_op="Optimize Parameters (Evolutionary)" from_port="parameter" to_port="result 2"/>
      <portSpacing port="source_input 1" spacing="0"/>
      <portSpacing port="sink_result 1" spacing="0"/>
      <portSpacing port="sink_result 2" spacing="0"/>
      <portSpacing port="sink_result 3" spacing="0"/>
    </process>
  </operator>
</process>

 

-- Training, Consulting, Sales in China, Hong Kong & Taiwan --
www.RapidMinerChina.com