Output rules
changuel
New Altair Community Member
Hello,
I am using RM in java and I am generating associating rules using FPGrowth. My question is how to parse the resulting rules as in the Gui manner, I wan to get for each rule its support, its confidence, its lift....Is it possible to have the rules in a table as in the gui so as to seperate the premises and the conclusions.
Here is the XML file I used :
[att1= val1] --> [att2= val2] (confidence: 1.000)
And I want to see the values of the support, lift... and not only the confidence.
Thanks in advance.
I am using RM in java and I am generating associating rules using FPGrowth. My question is how to parse the resulting rules as in the Gui manner, I wan to get for each rule its support, its confidence, its lift....Is it possible to have the rules in a table as in the gui so as to seperate the premises and the conclusions.
Here is the XML file I used :
and here is the java code:
<operator name="Root" class="Process" expanded="yes">
<operator name="CSVExampleSource" class="CSVExampleSource">
<parameter key="filename" value="...attributes.csv"/>
</operator>
<operator name="Nominal2Binominal" class="Nominal2Binominal">
</operator>
<operator name="FPGrowth" class="FPGrowth">
<parameter key="min_support" value="0.1"/>
</operator>
<operator name="AssociationRuleGenerator" class="AssociationRuleGenerator">
<parameter key="min_confidence" value="0.7"/>
</operator>
</operator>
With this code, I can see the generated rules in this manner:
RapidMiner.init(false, true, true, true);
String modelFile = "operator.xml";
File processFile = new File(modelFile);
Process process;
try {
process = RapidMiner.readProcessFile(processFile);
IOContainer input = new IOContainer();
IOContainer output = process.run(input);
.....
[att1= val1] --> [att2= val2] (confidence: 1.000)
And I want to see the values of the support, lift... and not only the confidence.
Thanks in advance.
Tagged:
0
Answers
-
Hi there,
The following generates data and makes association rules, which are filed and parsed into an example set. You will get log nasties about unattached files, which you can ignore.<?xml version="1.0" encoding="UTF-8" standalone="no"?>
Have fun!
<process version="5.0">
<context>
<input>
<location/>
</input>
<output>
<location/>
<location/>
<location/>
</output>
<macros/>
</context>
<operator activated="true" class="process" expanded="true" name="Root">
<parameter key="logverbosity" value="warning"/>
<process expanded="true" height="386" width="815">
<operator activated="true" class="subprocess" expanded="true" height="94" name="Rules to CSV" width="90" x="45" y="75">
<process expanded="true" height="373" width="897">
<operator activated="true" class="retrieve" expanded="true" height="60" name="Retrieve" width="90" x="60" y="144">
<parameter key="repository_entry" value="//Samples/data/Transactions"/>
</operator>
<operator activated="true" class="nominal_to_binominal" expanded="true" height="94" name="Nominal2Binominal" width="90" x="246" y="120">
<parameter key="transform_binominal" value="true"/>
</operator>
<operator activated="true" class="fp_growth" expanded="true" height="76" name="FPGrowth" width="90" x="446" y="75"/>
<operator activated="true" class="create_association_rules" expanded="true" height="60" name="AssociationRuleGenerator" width="90" x="514" y="210"/>
<operator activated="true" class="write_as_text" expanded="true" height="76" name="Write as Text" width="90" x="680" y="202">
<parameter key="result_file" value="rules.csv"/>
</operator>
<connect from_op="Retrieve" from_port="output" to_op="Nominal2Binominal" to_port="example set input"/>
<connect from_op="Nominal2Binominal" from_port="example set output" to_op="FPGrowth" to_port="example set"/>
<connect from_op="FPGrowth" from_port="example set" to_port="out 1"/>
<connect from_op="FPGrowth" from_port="frequent sets" to_op="AssociationRuleGenerator" to_port="item sets"/>
<connect from_op="AssociationRuleGenerator" from_port="rules" to_op="Write as Text" to_port="input 1"/>
<connect from_op="Write as Text" from_port="input 1" to_port="out 2"/>
<portSpacing port="source_in 1" 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="read_csv" expanded="true" height="60" name="Read CSV" width="90" x="45" y="210">
<parameter key="file_name" value="rules.csv"/>
<parameter key="column_separators" value="-->|\("/>
</operator>
<operator activated="true" class="rename_by_generic_names" expanded="true" height="76" name="Rename by Generic Names" width="90" x="179" y="210"/>
<operator activated="true" class="filter_examples" expanded="true" height="76" name="Filter Examples" width="90" x="313" y="210">
<parameter key="condition_class" value="missing_attributes"/>
<parameter key="invert_filter" value="true"/>
</operator>
<operator activated="true" class="replace" expanded="true" height="76" name="Replace" width="90" x="447" y="210">
<parameter key="attribute_filter_type" value="single"/>
<parameter key="attribute" value="att3"/>
<parameter key="replace_what" value="confidence\:|\)"/>
</operator>
<connect from_op="Rules to CSV" from_port="out 2" to_port="result 1"/>
<connect from_op="Read CSV" from_port="output" to_op="Rename by Generic Names" to_port="example set input"/>
<connect from_op="Rename by Generic Names" from_port="example set output" to_op="Filter Examples" to_port="example set input"/>
<connect from_op="Filter Examples" from_port="example set output" to_op="Replace" to_port="example set input"/>
<connect from_op="Replace" from_port="example set output" 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>
0 -
Hello and thank you for your response.
I tried to run a java process using the XML file that you posted in your reply, the resulting rules are now in a csv file, but still there is only the confidence near each rule. I want to ouput also the support, the lift...
in your XML file I noticed this :
What do you mean by att3 and why should I replace the confidence, I want to keep it and to see the other parameters too.
<operator activated="true" class="replace" expanded="true" height="76" name="Replace" width="90" x="447" y="210">
<parameter key="attribute_filter_type" value="single"/>
<parameter key="attribute" value="att3"/>
<parameter key="replace_what" value="confidence\:|\)"/>
</operator>
Is there any way to recup the rules in a java table using the class Rule for example?
Thank you in advance0 -
Hi there,
If you want to get at the stuff beyond Premise,Conclusion, and Confidence you'll need to delve deeper than the GUI allows, but you can do that with a Groovy script, like this...<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process version="5.0">
<context>
<input>
<location/>
</input>
<output>
<location/>
<location/>
</output>
<macros/>
</context>
<operator activated="true" class="process" expanded="true" name="Root">
<parameter key="logverbosity" value="warning"/>
<process expanded="true" height="217" width="745">
<operator activated="true" class="retrieve" expanded="true" height="60" name="Retrieve" width="90" x="45" y="30">
<parameter key="repository_entry" value="//Samples/data/Iris"/>
</operator>
<operator activated="true" class="subprocess" expanded="true" height="76" name="Preprocessing" width="90" x="180" y="30">
<process expanded="true">
<operator activated="true" class="discretize_by_frequency" expanded="true" name="FrequencyDiscretization">
<parameter key="number_of_bins" value="5"/>
</operator>
<operator activated="true" class="nominal_to_binominal" expanded="true" name="Nominal2Binominal">
<parameter key="transform_binominal" value="true"/>
</operator>
<connect from_port="in 1" to_op="FrequencyDiscretization" to_port="example set input"/>
<connect from_op="FrequencyDiscretization" from_port="example set output" to_op="Nominal2Binominal" to_port="example set input"/>
<connect from_op="Nominal2Binominal" from_port="example set output" 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="fp_growth" expanded="true" height="76" name="FPGrowth" width="90" x="313" y="30">
<parameter key="find_min_number_of_itemsets" value="false"/>
<parameter key="min_support" value="0.1"/>
</operator>
<operator activated="true" class="create_association_rules" expanded="true" height="60" name="AssociationRuleGenerator" width="90" x="313" y="165">
<parameter key="min_confidence" value="0.7"/>
</operator>
<operator activated="true" class="execute_script" expanded="true" height="76" name="Execute Script" width="90" x="581" y="75">
<parameter key="script" value="import com.rapidminer.tools.Ontology; import com.rapidminer.operator.learner.associations.*; AssociationRules rules = input[0]; // construct attribute set Attribute[] attributes= new Attribute[11]; attributes[0] = AttributeFactory.createAttribute("Premise", Ontology.STRING); attributes[1] = AttributeFactory.createAttribute("Premise Items", Ontology.INTEGER); attributes[2] = AttributeFactory.createAttribute("Conclusion", Ontology.STRING); attributes[3] = AttributeFactory.createAttribute("Conclusion Items", Ontology.INTEGER); attributes[4] = AttributeFactory.createAttribute("Confidence", Ontology.REAL); attributes[5] = AttributeFactory.createAttribute("Conviction", Ontology.REAL); attributes[6] = AttributeFactory.createAttribute("Gain", Ontology.REAL); attributes[7] = AttributeFactory.createAttribute("Laplace", Ontology.REAL); attributes[8] = AttributeFactory.createAttribute("Lift", Ontology.REAL); attributes[9] = AttributeFactory.createAttribute("Ps", Ontology.REAL); attributes[10] = AttributeFactory.createAttribute("Total Support", Ontology.REAL); MemoryExampleTable table = new MemoryExampleTable(attributes); DataRowFactory ROW_FACTORY = new DataRowFactory(0); String[] strings= new String[11]; for (AssociationRule rule : rules) { 		// construct example data strings[0]=rule.toPremiseString(); strings[1]=rule.premise.size().toString(); strings[2]=rule.toConclusionString(); strings[3]=rule.conclusion.size().toString(); strings[4]=rule.getConfidence().toString(); strings[5]=rule.getConviction().toString(); strings[6]=rule.getGain().toString(); strings[7]=rule.getLaplace().toString(); strings[8]=rule.getLift().toString(); strings[9]=rule.getPs().toString(); strings[10]=rule.getTotalSupport().toString(); // make and add row DataRow row = ROW_FACTORY.create(strings, attributes); table.addDataRow(row);	 		} ExampleSet exampleSet = table.createExampleSet(); return exampleSet; "/>
</operator>
<connect from_op="Retrieve" from_port="output" to_op="Preprocessing" to_port="in 1"/>
<connect from_op="Preprocessing" from_port="out 1" to_op="FPGrowth" to_port="example set"/>
<connect from_op="FPGrowth" from_port="frequent sets" to_op="AssociationRuleGenerator" to_port="item sets"/>
<connect from_op="AssociationRuleGenerator" from_port="rules" to_op="Execute Script" to_port="input 1"/>
<connect from_op="Execute Script" from_port="output 1" to_port="result 1"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="sink_result 1" spacing="0"/>
<portSpacing port="sink_result 2" spacing="0"/>
</process>
</operator>
</process>0