"An error in aggregation operator kmeans"

Shubha
Shubha New Altair Community Member
edited November 5 in Community Q&A
Hi,

This is my code:

<operator name="Root" class="Process" expanded="yes">
    <operator name="ExampleSetGenerator" class="ExampleSetGenerator">
        <parameter key="number_examples" value="25"/>
        <parameter key="target_function" value="random"/>
    </operator>
    <operator name="AttributeFilter" class="AttributeFilter">
        <parameter key="condition_class" value="attribute_name_filter"/>
        <parameter key="parameter_string" value="att.*"/>
    </operator>
    <operator name="KMeans" class="KMeans">
        <parameter key="k" value="3"/>
    </operator>
    <operator name="Aggregation" class="Aggregation">
        <list key="aggregation_attributes">
          <parameter key="att1" value="average"/>
        </list>
        <parameter key="group_by_attributes" value="cluster"/>
    </operator>
</operator>


I get the error that the attribute 'cluster' does not exist. But after running the kmeans, a new attribute 'cluster' was created in the exampleset. So, why is this error? Or is it reading the initial input example set ? How do i tell RM to read that particular data which was generated by applying the kmeans?

Thanks, Shubha

Answers

  • TobiasMalbrecht
    TobiasMalbrecht New Altair Community Member
    Hi Shubha,

    this error happens because the [tt]Aggregation[/tt] operator only searches through the regular attributes when matching attribute names. We will add a parameter [tt]work_on_special[/tt] in the near future. Until then you have to change the type of the cluster attribute to regular before applying the [tt]Aggregation[/tt].

    Kind regards,
    Tobias
  • Shubha
    Shubha New Altair Community Member
    Thanks Tobias! That exactly did my job...

    One more question, can i specicy all the variables namely (att1, att2, att3, att4, att5) in the aggregate function? (in the above code i posted, only att1 is used). I tried by using the regular expression, att.*. But there is an error, "The attribute 'att.*' doesn't exist". I am sure that i am missing something... What could it be?

    Thanks again,
    Shubha
  • TobiasMalbrecht
    TobiasMalbrecht New Altair Community Member
    Hi Shubha,
    Shubha wrote:

    One more question, can i specicy all the variables namely (att1, att2, att3, att4, att5) in the aggregate function? (in the above code i posted, only att1 is used). I tried by using the regular expression, att.*. But there is an error, "The attribute 'att.*' doesn't exist". I am sure that i am missing something... What could it be?
    You can specify more. You just have to extend the list and therewith specify more than one aggregation attribute and function. Please see the attached code:

    <operator name="Aggregation" class="Aggregation">
        <list key="aggregation_attributes">
          <parameter key="att1"  value="average"/>
          <parameter key="att2"  value="average"/>
        </list>
        <parameter key="group_by_attributes"  value="cluster"/>
    </operator>
    Regards,
    Tobias
  • Shubha
    Shubha New Altair Community Member
    Thank you very much...
  • Shubha
    Shubha New Altair Community Member
    Was just thinking if I could avoid adding each variable for aggregation. Instead, can I specify all the variables which needs to be aggregated by a regular expression or so?

    Thanks, Shubha
  • haddock
    haddock New Altair Community Member
    Sure
    <operator name="Root" class="Process" expanded="yes">
        <operator name="ExampleSetGenerator" class="ExampleSetGenerator">
            <parameter key="number_examples" value="25"/>
            <parameter key="target_function" value="random"/>
        </operator>
        <operator name="AttributeFilter" class="AttributeFilter">
            <parameter key="condition_class" value="attribute_name_filter"/>
            <parameter key="parameter_string" value="att.*"/>
        </operator>
        <operator name="KMeans" class="KMeans">
            <parameter key="k" value="3"/>
        </operator>
        <operator name="AttributeAggregation" class="AttributeAggregation">
            <parameter key="aggregation_attributes" value="at.*"/>
            <parameter key="attribute_name" value="nu"/>
        </operator>
    </operator>
  • Shubha
    Shubha New Altair Community Member
    Thanks,

    This does different i guess. But, surely this will answer another question of mine. AttributeAggregation is something which I learnt new today. Thanks.

    What i need was for each group of nominal cluster attribute, i need the average of all the 'att' attributes, (i.e., The above can do averages row-wise, but actually i need column-wise) without actually specifying each of the variables.

    Secondly, unlike 'Aggregation', the operator 'AttributeAggregation' will not perform the operation groupwise.

    Thirdly, if my attrubutes have different names, unlike att1, att2,... i cant use the regular expressions too...


    Thanking you,
    Shubha
  • haddock
    haddock New Altair Community Member
    Oh dear, so wrong on so many levels, as the following shows.
    <process version="4.3">

      <operator name="Root" class="Process" expanded="yes">
          <operator name="ExampleSetGenerator" class="ExampleSetGenerator">
              <parameter key="number_examples" value="200"/>
              <parameter key="number_of_attributes" value="4"/>
              <parameter key="target_function" value="random"/>
          </operator>
          <operator name="ExampleSetTranspose" class="ExampleSetTranspose">
          </operator>
          <operator name="AttributeAggregation" class="AttributeAggregation">
              <parameter key="aggregation_attributes" value="at.*"/>
              <parameter key="aggregation_function" value="average"/>
              <parameter key="attribute_name" value="Mmm"/>
          </operator>
          <operator name="FeatureNameFilter" class="FeatureNameFilter" breakpoints="after">
              <parameter key="skip_features_with_name" value="at.*"/>
          </operator>
          <operator name="ExampleSetTranspose (2)" class="ExampleSetTranspose">
          </operator>
      </operator>

    </process>

  • Shubha
    Shubha New Altair Community Member
    Thank you very much...  :) Transpose was exactly what i thought too... I was just thinking if the examples/observations were too many,will  this method be OK? And also, again trasposing.... Wanted to confirm from you experts, if I am missing some useful operators specially made for these purposes...

    I can also see the application of feature here.. :)... Many Thanks for clearing all my queries...