Hybrid (Item k-NN and Decision Tree) Recommendation System in RapidMiner

shannoncates_te
shannoncates_te New Altair Community Member
edited November 5 in Community Q&A

Please help us :( We wanted to implement a Recommender System using hybrid approach (Item k-NN CF and Decision Tree;using gini index). The result should show the performane of its algorithm (RMSE, MAE, and NMAE).

We already established the recommender system but the result only shows the ranking prediction not its performance result. Btw the dataset we use is from MovieLens. Hope this problem will be solve. Thanks!Decisiontree and Item k-NN rank result.pngDecisiontree and Item k-NN.png

Best Answers

  • lionelderkrikor
    lionelderkrikor New Altair Community Member
    Answer ✓

    Hi @shannoncates_te,

     

    How said in a previous topic, I don't think that RMSE, MAE, and NMAE are adapted to measure performance of your recommender system. there are dedicated to the performance of a regression model.

    However I found the Performance (Item Recommendation) operator . Maybe it will help you to evaluate your (meta)model.

    Applied to your model, it give the following results. I do not know what all the score metrics are : 

    Recommender.png

    Here you can find the process : 

    <?xml version="1.0" encoding="UTF-8"?><process version="8.0.001">
    <context>
    <input/>
    <output/>
    <macros/>
    </context>
    <operator activated="true" class="process" compatibility="8.0.001" expanded="true" name="Process">
    <process expanded="true">
    <operator activated="true" class="read_csv" compatibility="8.0.001" expanded="true" height="68" name="Read CSV" width="90" x="45" y="85">
    <parameter key="csv_file" value="C:\Users\Lionel\Documents\Formations_DataScience\Rapidminer\Tests_Rapidminer\ml-latest-small\ml-latest-small\ratings.csv"/>
    <parameter key="column_separators" value=","/>
    <parameter key="first_row_as_names" value="false"/>
    <list key="annotations">
    <parameter key="0" value="Name"/>
    </list>
    <parameter key="encoding" value="windows-1252"/>
    <list key="data_set_meta_data_information">
    <parameter key="0" value="userId.true.integer.attribute"/>
    <parameter key="1" value="movieId.true.integer.attribute"/>
    <parameter key="2" value="rating.true.real.attribute"/>
    <parameter key="3" value="timestamp.true.integer.attribute"/>
    </list>
    </operator>
    <operator activated="true" class="split_data" compatibility="8.0.001" expanded="true" height="103" name="Split Data" width="90" x="112" y="238">
    <enumeration key="partitions">
    <parameter key="ratio" value="0.8"/>
    <parameter key="ratio" value="0.2"/>
    </enumeration>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (2)" width="90" x="447" y="289">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="work_on_subset" compatibility="8.0.001" expanded="true" height="82" name="Work on Subset" width="90" x="246" y="85">
    <parameter key="attribute_filter_type" value="single"/>
    <parameter key="attribute" value="rating"/>
    <parameter key="attributes" value="rating"/>
    <process expanded="true">
    <operator activated="true" class="numerical_to_binominal" compatibility="8.0.001" expanded="true" height="82" name="Numerical to Binominal" width="90" x="112" y="34">
    <parameter key="attribute" value="rating"/>
    <parameter key="max" value="3.0"/>
    </operator>
    <connect from_port="exampleSet" to_op="Numerical to Binominal" to_port="example set input"/>
    <connect from_op="Numerical to Binominal" from_port="example set output" to_port="example set"/>
    <portSpacing port="source_exampleSet" spacing="0"/>
    <portSpacing port="sink_example set" spacing="0"/>
    <portSpacing port="sink_through 1" spacing="0"/>
    <description align="center" color="yellow" colored="false" height="105" resized="false" width="180" x="500" y="129">Type your comment</description>
    </process>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role" width="90" x="380" y="85">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="regular"/>
    <parameter key="movieId" value="regular"/>
    <parameter key="timestamp" value="regular"/>
    <parameter key="rating" value="label"/>
    </list>
    </operator>
    <operator activated="true" class="concurrency:parallel_decision_tree" compatibility="8.0.001" expanded="true" height="103" name="Decision Tree" width="90" x="514" y="85">
    <parameter key="criterion" value="gini_index"/>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (3)" width="90" x="648" y="136">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="irbrecommender:item_k-NN" compatibility="5.1.002" expanded="true" height="82" name="Item k-NN" width="90" x="782" y="136"/>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="82" name="Multiply" width="90" x="648" y="442"/>
    <operator activated="true" class="irbrecommender:performance_item_recommendation" compatibility="5.1.002" expanded="true" height="103" name="Performance" width="90" x="983" y="187"/>
    <connect from_op="Read CSV" from_port="output" to_op="Split Data" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 1" to_op="Work on Subset" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 2" to_op="Set Role (2)" to_port="example set input"/>
    <connect from_op="Set Role (2)" from_port="example set output" to_op="Multiply" to_port="input"/>
    <connect from_op="Work on Subset" from_port="example set" to_op="Set Role" to_port="example set input"/>
    <connect from_op="Set Role" from_port="example set output" to_op="Decision Tree" to_port="training set"/>
    <connect from_op="Decision Tree" from_port="model" to_port="result 1"/>
    <connect from_op="Decision Tree" from_port="exampleSet" to_op="Set Role (3)" to_port="example set input"/>
    <connect from_op="Set Role (3)" from_port="example set output" to_op="Item k-NN" to_port="example set"/>
    <connect from_op="Item k-NN" from_port="example set" to_op="Performance" to_port="train set"/>
    <connect from_op="Item k-NN" from_port="Model" to_op="Performance" to_port="Model"/>
    <connect from_op="Multiply" from_port="output 1" to_op="Performance" to_port="test set"/>
    <connect from_op="Performance" from_port="performance" to_port="result 2"/>
    <connect from_op="Performance" from_port="evaluation measures" to_port="result 3"/>
    <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"/>
    <portSpacing port="sink_result 4" spacing="0"/>
    </process>
    </operator>
    </process>

     

     

    Regards,

     

    Lionel

     

  • lionelderkrikor
    lionelderkrikor New Altair Community Member
    Answer ✓

    Hi @shannoncates_te,

     

    1. I have investigated your project and I think that you can improve the performances of your recommendation system

    using the models of the Item Recommendation extension (not only the Item kNN model) and Model Combiner operator (I was inspired by the vote operator advised by @Thomas_Ott in a previous topic).

    Here the process : 

    <?xml version="1.0" encoding="UTF-8"?><process version="8.0.001">
    <context>
    <input/>
    <output/>
    <macros/>
    </context>
    <operator activated="true" class="process" compatibility="8.0.001" expanded="true" name="Process">
    <process expanded="true">
    <operator activated="true" class="read_csv" compatibility="8.0.001" expanded="true" height="68" name="Read CSV" width="90" x="45" y="289">
    <parameter key="csv_file" value="C:\Users\Lionel\Documents\Formations_DataScience\Rapidminer\Tests_Rapidminer\ml-latest-small\ml-latest-small\ratings.csv"/>
    <parameter key="column_separators" value=","/>
    <parameter key="first_row_as_names" value="false"/>
    <list key="annotations">
    <parameter key="0" value="Name"/>
    </list>
    <parameter key="encoding" value="windows-1252"/>
    <list key="data_set_meta_data_information">
    <parameter key="0" value="userId.true.integer.attribute"/>
    <parameter key="1" value="movieId.true.integer.attribute"/>
    <parameter key="2" value="rating.true.real.attribute"/>
    <parameter key="3" value="timestamp.true.integer.attribute"/>
    </list>
    </operator>
    <operator activated="true" class="split_data" compatibility="8.0.001" expanded="true" height="103" name="Split Data" width="90" x="179" y="238">
    <enumeration key="partitions">
    <parameter key="ratio" value="0.8"/>
    <parameter key="ratio" value="0.2"/>
    </enumeration>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (2)" width="90" x="313" y="340">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="work_on_subset" compatibility="8.0.001" expanded="true" height="82" name="Work on Subset" width="90" x="313" y="238">
    <parameter key="attribute_filter_type" value="single"/>
    <parameter key="attribute" value="rating"/>
    <parameter key="attributes" value="rating"/>
    <process expanded="true">
    <operator activated="true" class="numerical_to_binominal" compatibility="8.0.001" expanded="true" height="82" name="Numerical to Binominal" width="90" x="112" y="34">
    <parameter key="attribute" value="rating"/>
    <parameter key="max" value="3.0"/>
    </operator>
    <connect from_port="exampleSet" to_op="Numerical to Binominal" to_port="example set input"/>
    <connect from_op="Numerical to Binominal" from_port="example set output" to_port="example set"/>
    <portSpacing port="source_exampleSet" spacing="0"/>
    <portSpacing port="sink_example set" spacing="0"/>
    <portSpacing port="sink_through 1" spacing="0"/>
    <description align="center" color="yellow" colored="false" height="105" resized="false" width="180" x="500" y="129">Type your comment</description>
    </process>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role" width="90" x="447" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="regular"/>
    <parameter key="movieId" value="regular"/>
    <parameter key="timestamp" value="regular"/>
    <parameter key="rating" value="label"/>
    </list>
    </operator>
    <operator activated="true" class="concurrency:parallel_decision_tree" compatibility="8.0.001" expanded="true" height="103" name="Decision Tree" width="90" x="581" y="238">
    <parameter key="criterion" value="gini_index"/>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (3)" width="90" x="715" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="166" name="Multiply (2)" width="90" x="849" y="238"/>
    <operator activated="true" class="irbrecommender:item_k-NN" compatibility="5.1.002" expanded="true" height="82" name="Item k-NN" width="90" x="983" y="493"/>
    <operator activated="true" class="irbrecommender:weighted_regularized_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="WRMF" width="90" x="983" y="391"/>
    <operator activated="true" class="irbrecommender:user_k-NN" compatibility="5.1.002" expanded="true" height="82" name="User k-NN" width="90" x="983" y="238"/>
    <operator activated="true" class="irbrecommender:biased_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="BPRMF" width="90" x="983" y="136"/>
    <operator activated="true" class="irbrecommender:most_popular" compatibility="5.1.002" expanded="true" height="82" name="Most Popular" width="90" x="983" y="34"/>
    <operator activated="true" class="irbrecommender:model_combiner_ir" compatibility="5.1.002" expanded="true" height="166" name="Model Combiner" width="90" x="1117" y="238">
    <list key="model_weights"/>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="82" name="Multiply" width="90" x="447" y="340"/>
    <operator activated="true" class="irbrecommender:performance_item_recommendation" compatibility="5.1.002" expanded="true" height="103" name="Performance" width="90" x="1251" y="238"/>
    <connect from_op="Read CSV" from_port="output" to_op="Split Data" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 1" to_op="Work on Subset" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 2" to_op="Set Role (2)" to_port="example set input"/>
    <connect from_op="Set Role (2)" from_port="example set output" to_op="Multiply" to_port="input"/>
    <connect from_op="Work on Subset" from_port="example set" to_op="Set Role" to_port="example set input"/>
    <connect from_op="Set Role" from_port="example set output" to_op="Decision Tree" to_port="training set"/>
    <connect from_op="Decision Tree" from_port="exampleSet" to_op="Set Role (3)" to_port="example set input"/>
    <connect from_op="Set Role (3)" from_port="example set output" to_op="Multiply (2)" to_port="input"/>
    <connect from_op="Multiply (2)" from_port="output 1" to_op="Most Popular" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 2" to_op="BPRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 3" to_op="User k-NN" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 4" to_op="WRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 5" to_op="Item k-NN" to_port="example set"/>
    <connect from_op="Item k-NN" from_port="Model" to_op="Model Combiner" to_port="model 5"/>
    <connect from_op="WRMF" from_port="Model" to_op="Model Combiner" to_port="model 4"/>
    <connect from_op="User k-NN" from_port="Model" to_op="Model Combiner" to_port="model 3"/>
    <connect from_op="BPRMF" from_port="Model" to_op="Model Combiner" to_port="model 2"/>
    <connect from_op="Most Popular" from_port="Model" to_op="Model Combiner" to_port="model 1"/>
    <connect from_op="Most Popular" from_port="example set" to_op="Performance" to_port="train set"/>
    <connect from_op="Model Combiner" from_port="grouped model" to_op="Performance" to_port="Model"/>
    <connect from_op="Multiply" from_port="output 1" to_op="Performance" to_port="test set"/>
    <connect from_op="Performance" from_port="performance" to_port="result 1"/>
    <connect from_op="Performance" from_port="evaluation measures" 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>

    2. To go further, the next step is the optimization of the models. But there is a problem : 

    the mod input port of the Cross Validation operator (inside the Optimization operator) expect a model but receive a ItemRecommendation object generated by the itemrecommandation models : Question to the experts : 

    The Optimization of these recommendation models is impossible ?

    So in a first time, I recommend to optimize your models "manually" trying differents combinaisons of model's parameters.

     

    3. You can find a ressource about the score metrics of the Performance (Item Recommendation) operator in attached file.

     

    4. I executed the process by downsampling the dataset (~100000 rows -> 10000 rows) because I have the free version of RM,

    but I think that my results are representative of the full dataset.

     

    I hope it will be helpful for your thesis.

     

    Regards,

     

    Lionel 

  • Telcontar120
    Telcontar120 New Altair Community Member
    Answer ✓

    It should be possible to use the Optimization operator with these models, which simply require a Performance operator, which the optimization needs to measure whether something is better or worse.  It might not be able to be done inside the Cross-Validation operator, as you noted.  But putting the entire process inside an optimization should be just fine, and then simply select the operators and parameters that you want to optimize.

     

  • lionelderkrikor
    lionelderkrikor New Altair Community Member
    Answer ✓

    Hi @shannoncates_te again,

     

    How said previously, you can improve the performance of your models by using the Optimize Parameters operator (thanks to @Telcontar120 for the trick) : 

    Here is an example of process : 

    <?xml version="1.0" encoding="UTF-8"?><process version="8.0.001">
    <context>
    <input/>
    <output/>
    <macros/>
    </context>
    <operator activated="true" class="process" compatibility="8.0.001" expanded="true" name="Process">
    <process expanded="true">
    <operator activated="true" class="read_csv" compatibility="8.0.001" expanded="true" height="68" name="Read CSV" width="90" x="45" y="289">
    <parameter key="csv_file" value="C:\Users\Lionel\Documents\Formations_DataScience\Rapidminer\Tests_Rapidminer\ml-latest-small\ml-latest-small\ratings.csv"/>
    <parameter key="column_separators" value=","/>
    <parameter key="first_row_as_names" value="false"/>
    <list key="annotations">
    <parameter key="0" value="Name"/>
    </list>
    <parameter key="encoding" value="windows-1252"/>
    <list key="data_set_meta_data_information">
    <parameter key="0" value="userId.true.integer.attribute"/>
    <parameter key="1" value="movieId.true.integer.attribute"/>
    <parameter key="2" value="rating.true.real.attribute"/>
    <parameter key="3" value="timestamp.true.integer.attribute"/>
    </list>
    </operator>
    <operator activated="true" class="split_data" compatibility="8.0.001" expanded="true" height="103" name="Split Data" width="90" x="179" y="238">
    <enumeration key="partitions">
    <parameter key="ratio" value="0.8"/>
    <parameter key="ratio" value="0.2"/>
    </enumeration>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (2)" width="90" x="313" y="340">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="work_on_subset" compatibility="8.0.001" expanded="true" height="82" name="Work on Subset" width="90" x="313" y="238">
    <parameter key="attribute_filter_type" value="single"/>
    <parameter key="attribute" value="rating"/>
    <parameter key="attributes" value="rating"/>
    <process expanded="true">
    <operator activated="true" class="numerical_to_binominal" compatibility="8.0.001" expanded="true" height="82" name="Numerical to Binominal" width="90" x="112" y="34">
    <parameter key="attribute" value="rating"/>
    <parameter key="max" value="3.0"/>
    </operator>
    <connect from_port="exampleSet" to_op="Numerical to Binominal" to_port="example set input"/>
    <connect from_op="Numerical to Binominal" from_port="example set output" to_port="example set"/>
    <portSpacing port="source_exampleSet" spacing="0"/>
    <portSpacing port="sink_example set" spacing="0"/>
    <portSpacing port="sink_through 1" spacing="0"/>
    <description align="center" color="yellow" colored="false" height="105" resized="false" width="180" x="500" y="129">Type your comment</description>
    </process>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role" width="90" x="447" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="regular"/>
    <parameter key="movieId" value="regular"/>
    <parameter key="timestamp" value="regular"/>
    <parameter key="rating" value="label"/>
    </list>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="82" name="Multiply" width="90" x="447" y="340"/>
    <operator activated="true" class="concurrency:optimize_parameters_grid" compatibility="8.0.001" expanded="true" height="145" name="Optimize Parameters (Grid)" width="90" x="782" y="238">
    <list key="parameters">
    <parameter key="Decision Tree.apply_pruning" value="true,false"/>
    <parameter key="Decision Tree.apply_prepruning" value="true,false"/>
    <parameter key="Item k-NN.k" value="[1.0;100.0;10;linear]"/>
    </list>
    <process expanded="true">
    <operator activated="true" class="concurrency:parallel_decision_tree" compatibility="8.0.001" expanded="true" height="103" name="Decision Tree" width="90" x="45" y="238">
    <parameter key="criterion" value="gini_index"/>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (3)" width="90" x="179" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="166" name="Multiply (2)" width="90" x="313" y="238"/>
    <operator activated="true" class="irbrecommender:item_k-NN" compatibility="5.1.002" expanded="true" height="82" name="Item k-NN" width="90" x="447" y="493"/>
    <operator activated="true" class="irbrecommender:weighted_regularized_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="WRMF" width="90" x="447" y="391"/>
    <operator activated="true" class="irbrecommender:user_k-NN" compatibility="5.1.002" expanded="true" height="82" name="User k-NN" width="90" x="447" y="238"/>
    <operator activated="true" class="irbrecommender:biased_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="BPRMF" width="90" x="447" y="136"/>
    <operator activated="true" class="irbrecommender:most_popular" compatibility="5.1.002" expanded="true" height="82" name="Most Popular" width="90" x="447" y="34"/>
    <operator activated="true" class="irbrecommender:model_combiner_ir" compatibility="5.1.002" expanded="true" height="166" name="Model Combiner" width="90" x="581" y="187">
    <list key="model_weights"/>
    </operator>
    <operator activated="true" class="irbrecommender:performance_item_recommendation" compatibility="5.1.002" expanded="true" height="103" name="Performance" width="90" x="715" y="187"/>
    <connect from_port="input 1" to_op="Decision Tree" to_port="training set"/>
    <connect from_port="input 2" to_op="Performance" to_port="test set"/>
    <connect from_op="Decision Tree" from_port="exampleSet" to_op="Set Role (3)" to_port="example set input"/>
    <connect from_op="Set Role (3)" from_port="example set output" to_op="Multiply (2)" to_port="input"/>
    <connect from_op="Multiply (2)" from_port="output 1" to_op="Most Popular" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 2" to_op="BPRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 3" to_op="User k-NN" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 4" to_op="WRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 5" to_op="Item k-NN" to_port="example set"/>
    <connect from_op="Item k-NN" from_port="Model" to_op="Model Combiner" to_port="model 5"/>
    <connect from_op="WRMF" from_port="Model" to_op="Model Combiner" to_port="model 4"/>
    <connect from_op="User k-NN" from_port="Model" to_op="Model Combiner" to_port="model 3"/>
    <connect from_op="BPRMF" from_port="Model" to_op="Model Combiner" to_port="model 2"/>
    <connect from_op="Most Popular" from_port="Model" to_op="Model Combiner" to_port="model 1"/>
    <connect from_op="Most Popular" from_port="example set" to_op="Performance" to_port="train set"/>
    <connect from_op="Model Combiner" from_port="grouped model" to_op="Performance" to_port="Model"/>
    <connect from_op="Performance" from_port="performance" to_port="performance"/>
    <connect from_op="Performance" from_port="evaluation measures" to_port="output 1"/>
    <portSpacing port="source_input 1" spacing="0"/>
    <portSpacing port="source_input 2" spacing="0"/>
    <portSpacing port="source_input 3" spacing="0"/>
    <portSpacing port="sink_performance" spacing="0"/>
    <portSpacing port="sink_model" spacing="0"/>
    <portSpacing port="sink_output 1" spacing="0"/>
    <portSpacing port="sink_output 2" spacing="0"/>
    </process>
    </operator>
    <connect from_op="Read CSV" from_port="output" to_op="Split Data" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 1" to_op="Work on Subset" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 2" to_op="Set Role (2)" to_port="example set input"/>
    <connect from_op="Set Role (2)" from_port="example set output" to_op="Multiply" to_port="input"/>
    <connect from_op="Work on Subset" from_port="example set" to_op="Set Role" to_port="example set input"/>
    <connect from_op="Set Role" from_port="example set output" to_op="Optimize Parameters (Grid)" to_port="input 1"/>
    <connect from_op="Multiply" from_port="output 1" to_op="Optimize Parameters (Grid)" to_port="input 2"/>
    <connect from_op="Optimize Parameters (Grid)" from_port="performance" to_port="result 1"/>
    <connect from_op="Optimize Parameters (Grid)" from_port="parameter set" to_port="result 2"/>
    <connect from_op="Optimize Parameters (Grid)" from_port="output 1" to_port="result 3"/>
    <portSpacing port="source_input 1" spacing="0"/>
    <portSpacing port="source_input 2" spacing="0"/>
    <portSpacing port="sink_result 1" spacing="0"/>
    <portSpacing port="sink_result 2" spacing="0"/>
    <portSpacing port="sink_result 3" spacing="0"/>
    <portSpacing port="sink_result 4" spacing="0"/>
    </process>
    </operator>
    </process>

    Regards,

     

    Lionel

Answers

  • Telcontar120
    Telcontar120 New Altair Community Member

    If you can post your actual xml process along with a data sample it will be easier to provide some guidance or help.

  • shannoncates_te
    shannoncates_te New Altair Community Member

    Thank you for your reply :) We really need help right now for our thesis.

  • lionelderkrikor
    lionelderkrikor New Altair Community Member
    Answer ✓

    Hi @shannoncates_te,

     

    How said in a previous topic, I don't think that RMSE, MAE, and NMAE are adapted to measure performance of your recommender system. there are dedicated to the performance of a regression model.

    However I found the Performance (Item Recommendation) operator . Maybe it will help you to evaluate your (meta)model.

    Applied to your model, it give the following results. I do not know what all the score metrics are : 

    Recommender.png

    Here you can find the process : 

    <?xml version="1.0" encoding="UTF-8"?><process version="8.0.001">
    <context>
    <input/>
    <output/>
    <macros/>
    </context>
    <operator activated="true" class="process" compatibility="8.0.001" expanded="true" name="Process">
    <process expanded="true">
    <operator activated="true" class="read_csv" compatibility="8.0.001" expanded="true" height="68" name="Read CSV" width="90" x="45" y="85">
    <parameter key="csv_file" value="C:\Users\Lionel\Documents\Formations_DataScience\Rapidminer\Tests_Rapidminer\ml-latest-small\ml-latest-small\ratings.csv"/>
    <parameter key="column_separators" value=","/>
    <parameter key="first_row_as_names" value="false"/>
    <list key="annotations">
    <parameter key="0" value="Name"/>
    </list>
    <parameter key="encoding" value="windows-1252"/>
    <list key="data_set_meta_data_information">
    <parameter key="0" value="userId.true.integer.attribute"/>
    <parameter key="1" value="movieId.true.integer.attribute"/>
    <parameter key="2" value="rating.true.real.attribute"/>
    <parameter key="3" value="timestamp.true.integer.attribute"/>
    </list>
    </operator>
    <operator activated="true" class="split_data" compatibility="8.0.001" expanded="true" height="103" name="Split Data" width="90" x="112" y="238">
    <enumeration key="partitions">
    <parameter key="ratio" value="0.8"/>
    <parameter key="ratio" value="0.2"/>
    </enumeration>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (2)" width="90" x="447" y="289">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="work_on_subset" compatibility="8.0.001" expanded="true" height="82" name="Work on Subset" width="90" x="246" y="85">
    <parameter key="attribute_filter_type" value="single"/>
    <parameter key="attribute" value="rating"/>
    <parameter key="attributes" value="rating"/>
    <process expanded="true">
    <operator activated="true" class="numerical_to_binominal" compatibility="8.0.001" expanded="true" height="82" name="Numerical to Binominal" width="90" x="112" y="34">
    <parameter key="attribute" value="rating"/>
    <parameter key="max" value="3.0"/>
    </operator>
    <connect from_port="exampleSet" to_op="Numerical to Binominal" to_port="example set input"/>
    <connect from_op="Numerical to Binominal" from_port="example set output" to_port="example set"/>
    <portSpacing port="source_exampleSet" spacing="0"/>
    <portSpacing port="sink_example set" spacing="0"/>
    <portSpacing port="sink_through 1" spacing="0"/>
    <description align="center" color="yellow" colored="false" height="105" resized="false" width="180" x="500" y="129">Type your comment</description>
    </process>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role" width="90" x="380" y="85">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="regular"/>
    <parameter key="movieId" value="regular"/>
    <parameter key="timestamp" value="regular"/>
    <parameter key="rating" value="label"/>
    </list>
    </operator>
    <operator activated="true" class="concurrency:parallel_decision_tree" compatibility="8.0.001" expanded="true" height="103" name="Decision Tree" width="90" x="514" y="85">
    <parameter key="criterion" value="gini_index"/>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (3)" width="90" x="648" y="136">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="irbrecommender:item_k-NN" compatibility="5.1.002" expanded="true" height="82" name="Item k-NN" width="90" x="782" y="136"/>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="82" name="Multiply" width="90" x="648" y="442"/>
    <operator activated="true" class="irbrecommender:performance_item_recommendation" compatibility="5.1.002" expanded="true" height="103" name="Performance" width="90" x="983" y="187"/>
    <connect from_op="Read CSV" from_port="output" to_op="Split Data" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 1" to_op="Work on Subset" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 2" to_op="Set Role (2)" to_port="example set input"/>
    <connect from_op="Set Role (2)" from_port="example set output" to_op="Multiply" to_port="input"/>
    <connect from_op="Work on Subset" from_port="example set" to_op="Set Role" to_port="example set input"/>
    <connect from_op="Set Role" from_port="example set output" to_op="Decision Tree" to_port="training set"/>
    <connect from_op="Decision Tree" from_port="model" to_port="result 1"/>
    <connect from_op="Decision Tree" from_port="exampleSet" to_op="Set Role (3)" to_port="example set input"/>
    <connect from_op="Set Role (3)" from_port="example set output" to_op="Item k-NN" to_port="example set"/>
    <connect from_op="Item k-NN" from_port="example set" to_op="Performance" to_port="train set"/>
    <connect from_op="Item k-NN" from_port="Model" to_op="Performance" to_port="Model"/>
    <connect from_op="Multiply" from_port="output 1" to_op="Performance" to_port="test set"/>
    <connect from_op="Performance" from_port="performance" to_port="result 2"/>
    <connect from_op="Performance" from_port="evaluation measures" to_port="result 3"/>
    <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"/>
    <portSpacing port="sink_result 4" spacing="0"/>
    </process>
    </operator>
    </process>

     

     

    Regards,

     

    Lionel

     

  • lionelderkrikor
    lionelderkrikor New Altair Community Member
    Answer ✓

    Hi @shannoncates_te,

     

    1. I have investigated your project and I think that you can improve the performances of your recommendation system

    using the models of the Item Recommendation extension (not only the Item kNN model) and Model Combiner operator (I was inspired by the vote operator advised by @Thomas_Ott in a previous topic).

    Here the process : 

    <?xml version="1.0" encoding="UTF-8"?><process version="8.0.001">
    <context>
    <input/>
    <output/>
    <macros/>
    </context>
    <operator activated="true" class="process" compatibility="8.0.001" expanded="true" name="Process">
    <process expanded="true">
    <operator activated="true" class="read_csv" compatibility="8.0.001" expanded="true" height="68" name="Read CSV" width="90" x="45" y="289">
    <parameter key="csv_file" value="C:\Users\Lionel\Documents\Formations_DataScience\Rapidminer\Tests_Rapidminer\ml-latest-small\ml-latest-small\ratings.csv"/>
    <parameter key="column_separators" value=","/>
    <parameter key="first_row_as_names" value="false"/>
    <list key="annotations">
    <parameter key="0" value="Name"/>
    </list>
    <parameter key="encoding" value="windows-1252"/>
    <list key="data_set_meta_data_information">
    <parameter key="0" value="userId.true.integer.attribute"/>
    <parameter key="1" value="movieId.true.integer.attribute"/>
    <parameter key="2" value="rating.true.real.attribute"/>
    <parameter key="3" value="timestamp.true.integer.attribute"/>
    </list>
    </operator>
    <operator activated="true" class="split_data" compatibility="8.0.001" expanded="true" height="103" name="Split Data" width="90" x="179" y="238">
    <enumeration key="partitions">
    <parameter key="ratio" value="0.8"/>
    <parameter key="ratio" value="0.2"/>
    </enumeration>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (2)" width="90" x="313" y="340">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="work_on_subset" compatibility="8.0.001" expanded="true" height="82" name="Work on Subset" width="90" x="313" y="238">
    <parameter key="attribute_filter_type" value="single"/>
    <parameter key="attribute" value="rating"/>
    <parameter key="attributes" value="rating"/>
    <process expanded="true">
    <operator activated="true" class="numerical_to_binominal" compatibility="8.0.001" expanded="true" height="82" name="Numerical to Binominal" width="90" x="112" y="34">
    <parameter key="attribute" value="rating"/>
    <parameter key="max" value="3.0"/>
    </operator>
    <connect from_port="exampleSet" to_op="Numerical to Binominal" to_port="example set input"/>
    <connect from_op="Numerical to Binominal" from_port="example set output" to_port="example set"/>
    <portSpacing port="source_exampleSet" spacing="0"/>
    <portSpacing port="sink_example set" spacing="0"/>
    <portSpacing port="sink_through 1" spacing="0"/>
    <description align="center" color="yellow" colored="false" height="105" resized="false" width="180" x="500" y="129">Type your comment</description>
    </process>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role" width="90" x="447" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="regular"/>
    <parameter key="movieId" value="regular"/>
    <parameter key="timestamp" value="regular"/>
    <parameter key="rating" value="label"/>
    </list>
    </operator>
    <operator activated="true" class="concurrency:parallel_decision_tree" compatibility="8.0.001" expanded="true" height="103" name="Decision Tree" width="90" x="581" y="238">
    <parameter key="criterion" value="gini_index"/>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (3)" width="90" x="715" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="166" name="Multiply (2)" width="90" x="849" y="238"/>
    <operator activated="true" class="irbrecommender:item_k-NN" compatibility="5.1.002" expanded="true" height="82" name="Item k-NN" width="90" x="983" y="493"/>
    <operator activated="true" class="irbrecommender:weighted_regularized_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="WRMF" width="90" x="983" y="391"/>
    <operator activated="true" class="irbrecommender:user_k-NN" compatibility="5.1.002" expanded="true" height="82" name="User k-NN" width="90" x="983" y="238"/>
    <operator activated="true" class="irbrecommender:biased_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="BPRMF" width="90" x="983" y="136"/>
    <operator activated="true" class="irbrecommender:most_popular" compatibility="5.1.002" expanded="true" height="82" name="Most Popular" width="90" x="983" y="34"/>
    <operator activated="true" class="irbrecommender:model_combiner_ir" compatibility="5.1.002" expanded="true" height="166" name="Model Combiner" width="90" x="1117" y="238">
    <list key="model_weights"/>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="82" name="Multiply" width="90" x="447" y="340"/>
    <operator activated="true" class="irbrecommender:performance_item_recommendation" compatibility="5.1.002" expanded="true" height="103" name="Performance" width="90" x="1251" y="238"/>
    <connect from_op="Read CSV" from_port="output" to_op="Split Data" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 1" to_op="Work on Subset" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 2" to_op="Set Role (2)" to_port="example set input"/>
    <connect from_op="Set Role (2)" from_port="example set output" to_op="Multiply" to_port="input"/>
    <connect from_op="Work on Subset" from_port="example set" to_op="Set Role" to_port="example set input"/>
    <connect from_op="Set Role" from_port="example set output" to_op="Decision Tree" to_port="training set"/>
    <connect from_op="Decision Tree" from_port="exampleSet" to_op="Set Role (3)" to_port="example set input"/>
    <connect from_op="Set Role (3)" from_port="example set output" to_op="Multiply (2)" to_port="input"/>
    <connect from_op="Multiply (2)" from_port="output 1" to_op="Most Popular" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 2" to_op="BPRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 3" to_op="User k-NN" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 4" to_op="WRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 5" to_op="Item k-NN" to_port="example set"/>
    <connect from_op="Item k-NN" from_port="Model" to_op="Model Combiner" to_port="model 5"/>
    <connect from_op="WRMF" from_port="Model" to_op="Model Combiner" to_port="model 4"/>
    <connect from_op="User k-NN" from_port="Model" to_op="Model Combiner" to_port="model 3"/>
    <connect from_op="BPRMF" from_port="Model" to_op="Model Combiner" to_port="model 2"/>
    <connect from_op="Most Popular" from_port="Model" to_op="Model Combiner" to_port="model 1"/>
    <connect from_op="Most Popular" from_port="example set" to_op="Performance" to_port="train set"/>
    <connect from_op="Model Combiner" from_port="grouped model" to_op="Performance" to_port="Model"/>
    <connect from_op="Multiply" from_port="output 1" to_op="Performance" to_port="test set"/>
    <connect from_op="Performance" from_port="performance" to_port="result 1"/>
    <connect from_op="Performance" from_port="evaluation measures" 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>

    2. To go further, the next step is the optimization of the models. But there is a problem : 

    the mod input port of the Cross Validation operator (inside the Optimization operator) expect a model but receive a ItemRecommendation object generated by the itemrecommandation models : Question to the experts : 

    The Optimization of these recommendation models is impossible ?

    So in a first time, I recommend to optimize your models "manually" trying differents combinaisons of model's parameters.

     

    3. You can find a ressource about the score metrics of the Performance (Item Recommendation) operator in attached file.

     

    4. I executed the process by downsampling the dataset (~100000 rows -> 10000 rows) because I have the free version of RM,

    but I think that my results are representative of the full dataset.

     

    I hope it will be helpful for your thesis.

     

    Regards,

     

    Lionel 

  • Telcontar120
    Telcontar120 New Altair Community Member
    Answer ✓

    It should be possible to use the Optimization operator with these models, which simply require a Performance operator, which the optimization needs to measure whether something is better or worse.  It might not be able to be done inside the Cross-Validation operator, as you noted.  But putting the entire process inside an optimization should be just fine, and then simply select the operators and parameters that you want to optimize.

     

  • lionelderkrikor
    lionelderkrikor New Altair Community Member
    Answer ✓

    Hi @shannoncates_te again,

     

    How said previously, you can improve the performance of your models by using the Optimize Parameters operator (thanks to @Telcontar120 for the trick) : 

    Here is an example of process : 

    <?xml version="1.0" encoding="UTF-8"?><process version="8.0.001">
    <context>
    <input/>
    <output/>
    <macros/>
    </context>
    <operator activated="true" class="process" compatibility="8.0.001" expanded="true" name="Process">
    <process expanded="true">
    <operator activated="true" class="read_csv" compatibility="8.0.001" expanded="true" height="68" name="Read CSV" width="90" x="45" y="289">
    <parameter key="csv_file" value="C:\Users\Lionel\Documents\Formations_DataScience\Rapidminer\Tests_Rapidminer\ml-latest-small\ml-latest-small\ratings.csv"/>
    <parameter key="column_separators" value=","/>
    <parameter key="first_row_as_names" value="false"/>
    <list key="annotations">
    <parameter key="0" value="Name"/>
    </list>
    <parameter key="encoding" value="windows-1252"/>
    <list key="data_set_meta_data_information">
    <parameter key="0" value="userId.true.integer.attribute"/>
    <parameter key="1" value="movieId.true.integer.attribute"/>
    <parameter key="2" value="rating.true.real.attribute"/>
    <parameter key="3" value="timestamp.true.integer.attribute"/>
    </list>
    </operator>
    <operator activated="true" class="split_data" compatibility="8.0.001" expanded="true" height="103" name="Split Data" width="90" x="179" y="238">
    <enumeration key="partitions">
    <parameter key="ratio" value="0.8"/>
    <parameter key="ratio" value="0.2"/>
    </enumeration>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (2)" width="90" x="313" y="340">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="work_on_subset" compatibility="8.0.001" expanded="true" height="82" name="Work on Subset" width="90" x="313" y="238">
    <parameter key="attribute_filter_type" value="single"/>
    <parameter key="attribute" value="rating"/>
    <parameter key="attributes" value="rating"/>
    <process expanded="true">
    <operator activated="true" class="numerical_to_binominal" compatibility="8.0.001" expanded="true" height="82" name="Numerical to Binominal" width="90" x="112" y="34">
    <parameter key="attribute" value="rating"/>
    <parameter key="max" value="3.0"/>
    </operator>
    <connect from_port="exampleSet" to_op="Numerical to Binominal" to_port="example set input"/>
    <connect from_op="Numerical to Binominal" from_port="example set output" to_port="example set"/>
    <portSpacing port="source_exampleSet" spacing="0"/>
    <portSpacing port="sink_example set" spacing="0"/>
    <portSpacing port="sink_through 1" spacing="0"/>
    <description align="center" color="yellow" colored="false" height="105" resized="false" width="180" x="500" y="129">Type your comment</description>
    </process>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role" width="90" x="447" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="regular"/>
    <parameter key="movieId" value="regular"/>
    <parameter key="timestamp" value="regular"/>
    <parameter key="rating" value="label"/>
    </list>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="82" name="Multiply" width="90" x="447" y="340"/>
    <operator activated="true" class="concurrency:optimize_parameters_grid" compatibility="8.0.001" expanded="true" height="145" name="Optimize Parameters (Grid)" width="90" x="782" y="238">
    <list key="parameters">
    <parameter key="Decision Tree.apply_pruning" value="true,false"/>
    <parameter key="Decision Tree.apply_prepruning" value="true,false"/>
    <parameter key="Item k-NN.k" value="[1.0;100.0;10;linear]"/>
    </list>
    <process expanded="true">
    <operator activated="true" class="concurrency:parallel_decision_tree" compatibility="8.0.001" expanded="true" height="103" name="Decision Tree" width="90" x="45" y="238">
    <parameter key="criterion" value="gini_index"/>
    </operator>
    <operator activated="true" class="set_role" compatibility="8.0.001" expanded="true" height="82" name="Set Role (3)" width="90" x="179" y="238">
    <parameter key="attribute_name" value="rating"/>
    <parameter key="target_role" value="label"/>
    <list key="set_additional_roles">
    <parameter key="userId" value="user identification"/>
    <parameter key="movieId" value="item identification"/>
    <parameter key="timestamp" value="timestamp"/>
    </list>
    </operator>
    <operator activated="true" class="multiply" compatibility="8.0.001" expanded="true" height="166" name="Multiply (2)" width="90" x="313" y="238"/>
    <operator activated="true" class="irbrecommender:item_k-NN" compatibility="5.1.002" expanded="true" height="82" name="Item k-NN" width="90" x="447" y="493"/>
    <operator activated="true" class="irbrecommender:weighted_regularized_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="WRMF" width="90" x="447" y="391"/>
    <operator activated="true" class="irbrecommender:user_k-NN" compatibility="5.1.002" expanded="true" height="82" name="User k-NN" width="90" x="447" y="238"/>
    <operator activated="true" class="irbrecommender:biased_matrix_factorization" compatibility="5.1.002" expanded="true" height="82" name="BPRMF" width="90" x="447" y="136"/>
    <operator activated="true" class="irbrecommender:most_popular" compatibility="5.1.002" expanded="true" height="82" name="Most Popular" width="90" x="447" y="34"/>
    <operator activated="true" class="irbrecommender:model_combiner_ir" compatibility="5.1.002" expanded="true" height="166" name="Model Combiner" width="90" x="581" y="187">
    <list key="model_weights"/>
    </operator>
    <operator activated="true" class="irbrecommender:performance_item_recommendation" compatibility="5.1.002" expanded="true" height="103" name="Performance" width="90" x="715" y="187"/>
    <connect from_port="input 1" to_op="Decision Tree" to_port="training set"/>
    <connect from_port="input 2" to_op="Performance" to_port="test set"/>
    <connect from_op="Decision Tree" from_port="exampleSet" to_op="Set Role (3)" to_port="example set input"/>
    <connect from_op="Set Role (3)" from_port="example set output" to_op="Multiply (2)" to_port="input"/>
    <connect from_op="Multiply (2)" from_port="output 1" to_op="Most Popular" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 2" to_op="BPRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 3" to_op="User k-NN" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 4" to_op="WRMF" to_port="example set"/>
    <connect from_op="Multiply (2)" from_port="output 5" to_op="Item k-NN" to_port="example set"/>
    <connect from_op="Item k-NN" from_port="Model" to_op="Model Combiner" to_port="model 5"/>
    <connect from_op="WRMF" from_port="Model" to_op="Model Combiner" to_port="model 4"/>
    <connect from_op="User k-NN" from_port="Model" to_op="Model Combiner" to_port="model 3"/>
    <connect from_op="BPRMF" from_port="Model" to_op="Model Combiner" to_port="model 2"/>
    <connect from_op="Most Popular" from_port="Model" to_op="Model Combiner" to_port="model 1"/>
    <connect from_op="Most Popular" from_port="example set" to_op="Performance" to_port="train set"/>
    <connect from_op="Model Combiner" from_port="grouped model" to_op="Performance" to_port="Model"/>
    <connect from_op="Performance" from_port="performance" to_port="performance"/>
    <connect from_op="Performance" from_port="evaluation measures" to_port="output 1"/>
    <portSpacing port="source_input 1" spacing="0"/>
    <portSpacing port="source_input 2" spacing="0"/>
    <portSpacing port="source_input 3" spacing="0"/>
    <portSpacing port="sink_performance" spacing="0"/>
    <portSpacing port="sink_model" spacing="0"/>
    <portSpacing port="sink_output 1" spacing="0"/>
    <portSpacing port="sink_output 2" spacing="0"/>
    </process>
    </operator>
    <connect from_op="Read CSV" from_port="output" to_op="Split Data" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 1" to_op="Work on Subset" to_port="example set"/>
    <connect from_op="Split Data" from_port="partition 2" to_op="Set Role (2)" to_port="example set input"/>
    <connect from_op="Set Role (2)" from_port="example set output" to_op="Multiply" to_port="input"/>
    <connect from_op="Work on Subset" from_port="example set" to_op="Set Role" to_port="example set input"/>
    <connect from_op="Set Role" from_port="example set output" to_op="Optimize Parameters (Grid)" to_port="input 1"/>
    <connect from_op="Multiply" from_port="output 1" to_op="Optimize Parameters (Grid)" to_port="input 2"/>
    <connect from_op="Optimize Parameters (Grid)" from_port="performance" to_port="result 1"/>
    <connect from_op="Optimize Parameters (Grid)" from_port="parameter set" to_port="result 2"/>
    <connect from_op="Optimize Parameters (Grid)" from_port="output 1" to_port="result 3"/>
    <portSpacing port="source_input 1" spacing="0"/>
    <portSpacing port="source_input 2" spacing="0"/>
    <portSpacing port="sink_result 1" spacing="0"/>
    <portSpacing port="sink_result 2" spacing="0"/>
    <portSpacing port="sink_result 3" spacing="0"/>
    <portSpacing port="sink_result 4" spacing="0"/>
    </process>
    </operator>
    </process>

    Regards,

     

    Lionel

  • shannoncates_te
    shannoncates_te New Altair Community Member

    @lionelderkrikor @Telcontar120 Thank you so much for your help :)