From aa06920e544df81186c8652b2cd9067f5542cff3 Mon Sep 17 00:00:00 2001 From: Ahmed Kadhim Date: Mon, 4 Nov 2024 10:55:03 +0000 Subject: [PATCH 01/35] add recom sys --- .gitignore | 3 + .../Applications/RecommendationSystems.py | 60 +++++++++++++++++++ examples/MNISTConvolutionDemo.py | 13 ---- examples/MNISTVanillaDemo.py | 15 ----- examples/NoisyXORDemo.py | 21 +------ examples/SequenceClassificationDemo.py | 14 ----- 6 files changed, 65 insertions(+), 61 deletions(-) create mode 100644 .gitignore create mode 100644 examples/Applications/RecommendationSystems.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b4f6c429 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +build/ +GraphTsetlinMachine.egg-info/ +/dist/ \ No newline at end of file diff --git a/examples/Applications/RecommendationSystems.py b/examples/Applications/RecommendationSystems.py new file mode 100644 index 00000000..56b73b2e --- /dev/null +++ b/examples/Applications/RecommendationSystems.py @@ -0,0 +1,60 @@ +from GraphTsetlinMachine.graphs import Graphs +import numpy as np +from scipy.sparse import csr_matrix +from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine +from time import time +import argparse +import random +import pandas as pd +import kagglehub + +def default_args(**kwargs): + parser = argparse.ArgumentParser() + parser.add_argument("--epochs", default=10, type=int) + parser.add_argument("--number-of-clauses", default=10, type=int) + parser.add_argument("--T", default=100, type=int) + parser.add_argument("--s", default=1.0, type=float) + parser.add_argument("--number-of-state-bits", default=8, type=int) + parser.add_argument("--depth", default=2, type=int) + parser.add_argument("--hypervector-size", default=32, type=int) + parser.add_argument("--hypervector-bits", default=2, type=int) + parser.add_argument("--message-size", default=256, type=int) + parser.add_argument("--message-bits", default=2, type=int) + parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') + parser.add_argument("--noise", default=0.01, type=float) + parser.add_argument("--number-of-examples", default=10000, type=int) + parser.add_argument("--max-included-literals", default=4, type=int) + + args = parser.parse_args() + for key, value in kwargs.items(): + if key in args.__dict__: + setattr(args, key, value) + return args + +args = default_args() + +print("Creating training data") +path = kagglehub.dataset_download("arhamrumi/amazon-product-reviews") +print("Path to dataset files:", path) +data_file = path + "/Reviews.csv" # Adjust this path if necessary +data = pd.read_csv(data_file) +print("Data preview:", data.head()) + +number_of_nodes = 3 + +symbols = [] +users = data['user_id'].unique() +items = data['product_id'].unique() +categories = data['category'].unique() + +# Initialize Graphs with symbols for GTM +num_graphs = len(items) +symbols = ["I" + str(i) for i in items] + ["C" + str(c) for c in categories] + ["U" + str(u) for u in users] + +graphs_train = Graphs( + X_train.shape[0], + symbols=symbols, + hypervector_size=args.hypervector_size, + hypervector_bits=args.hypervector_bits, + double_hashing = args.double_hashing +) \ No newline at end of file diff --git a/examples/MNISTConvolutionDemo.py b/examples/MNISTConvolutionDemo.py index 8fe75473..a9ee5838 100644 --- a/examples/MNISTConvolutionDemo.py +++ b/examples/MNISTConvolutionDemo.py @@ -61,18 +61,13 @@ def default_args(**kwargs): hypervector_bits=args.hypervector_bits, double_hashing = args.double_hashing ) - for graph_id in range(X_train.shape[0]): graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes) - graphs_train.prepare_node_configuration() - for graph_id in range(X_train.shape[0]): for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): graphs_train.add_graph_node(graph_id, node_id, 0) - graphs_train.prepare_edge_configuration() - for graph_id in range(X_train.shape[0]): if graph_id % 1000 == 0: print(graph_id, X_train.shape[0]) @@ -88,23 +83,17 @@ def default_args(**kwargs): graphs_train.add_graph_node_property(graph_id, node_id, "C:%d" % (q)) graphs_train.add_graph_node_property(graph_id, node_id, "R:%d" % (r)) - graphs_train.encode() - print("Training data produced") graphs_test = Graphs(X_test.shape[0], init_with=graphs_train) for graph_id in range(X_test.shape[0]): graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes) - graphs_test.prepare_node_configuration() - for graph_id in range(X_test.shape[0]): for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): graphs_test.add_graph_node(graph_id, node_id, 0) - graphs_test.prepare_edge_configuration() - for graph_id in range(X_test.shape[0]): if graph_id % 1000 == 0: print(graph_id, X_test.shape[0]) @@ -120,9 +109,7 @@ def default_args(**kwargs): graphs_test.add_graph_node_property(graph_id, node_id, "C:%d" % (q)) graphs_test.add_graph_node_property(graph_id, node_id, "R:%d" % (r)) - graphs_test.encode() - print("Testing data produced") tm = MultiClassGraphTsetlinMachine( diff --git a/examples/MNISTVanillaDemo.py b/examples/MNISTVanillaDemo.py index 8bcb453c..02b95e2a 100644 --- a/examples/MNISTVanillaDemo.py +++ b/examples/MNISTVanillaDemo.py @@ -4,7 +4,6 @@ from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine from time import time import argparse -from skimage.util import view_as_windows from keras.datasets import mnist from numba import jit @@ -53,51 +52,37 @@ def default_args(**kwargs): hypervector_bits=args.hypervector_bits, double_hashing = args.double_hashing ) - for graph_id in range(X_train.shape[0]): graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes) - graphs_train.prepare_node_configuration() - for graph_id in range(X_train.shape[0]): number_of_outgoing_edges = 0 graphs_train.add_graph_node(graph_id, 'Image Node', number_of_outgoing_edges) - graphs_train.prepare_edge_configuration() - for graph_id in range(X_train.shape[0]): if graph_id % 1000 == 0: print(graph_id, X_train.shape[0]) for k in X_train[graph_id].nonzero()[0]: graphs_train.add_graph_node_property(graph_id, 'Image Node', "W%d,%d" % (k // 28, k % 28)) - graphs_train.encode() - print("Training data produced") graphs_test = Graphs(X_test.shape[0], init_with=graphs_train) - for graph_id in range(X_test.shape[0]): graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes) - graphs_test.prepare_node_configuration() - for graph_id in range(X_test.shape[0]): number_of_outgoing_edges = 0 graphs_test.add_graph_node(graph_id, 'Image Node', number_of_outgoing_edges) - graphs_test.prepare_edge_configuration() - for graph_id in range(X_test.shape[0]): if graph_id % 1000 == 0: print(graph_id, X_test.shape[0]) for k in X_test[graph_id].nonzero()[0]: graphs_test.add_graph_node_property(graph_id, 'Image Node', "W%d,%d" % (k // 28, k % 28)) - graphs_test.encode() - print("Testing data produced") tm = MultiClassGraphTsetlinMachine( diff --git a/examples/NoisyXORDemo.py b/examples/NoisyXORDemo.py index 83a4bbde..3069207d 100644 --- a/examples/NoisyXORDemo.py +++ b/examples/NoisyXORDemo.py @@ -34,31 +34,24 @@ def default_args(**kwargs): print("Creating training data") # Create train data - graphs_train = Graphs( args.number_of_examples, symbols=['A', 'B'], hypervector_size=args.hypervector_size, hypervector_bits=args.hypervector_bits, ) - for graph_id in range(args.number_of_examples): graphs_train.set_number_of_graph_nodes(graph_id, 2) - graphs_train.prepare_node_configuration() - for graph_id in range(args.number_of_examples): number_of_outgoing_edges = 1 graphs_train.add_graph_node(graph_id, 'Node 1', number_of_outgoing_edges) graphs_train.add_graph_node(graph_id, 'Node 2', number_of_outgoing_edges) - -graphs_train.prepare_edge_configuration() - +graphs_train.prepar_eedge_configuration() for graph_id in range(args.number_of_examples): edge_type = "Plain" graphs_train.add_graph_node_edge(graph_id, 'Node 1', 'Node 2', edge_type) graphs_train.add_graph_node_edge(graph_id, 'Node 2', 'Node 1', edge_type) - Y_train = np.empty(args.number_of_examples, dtype=np.uint32) for graph_id in range(args.number_of_examples): x1 = random.choice(['A', 'B']) @@ -74,32 +67,23 @@ def default_args(**kwargs): if np.random.rand() <= args.noise: Y_train[graph_id] = 1 - Y_train[graph_id] - graphs_train.encode() -# Create test data - +# Create test data print("Creating testing data") - graphs_test = Graphs(args.number_of_examples, init_with=graphs_train) - for graph_id in range(args.number_of_examples): graphs_test.set_number_of_graph_nodes(graph_id, 2) - graphs_test.prepare_node_configuration() - for graph_id in range(args.number_of_examples): number_of_outgoing_edges = 1 graphs_test.add_graph_node(graph_id, 'Node 1', number_of_outgoing_edges) graphs_test.add_graph_node(graph_id, 'Node 2', number_of_outgoing_edges) - graphs_test.prepare_edge_configuration() - for graph_id in range(args.number_of_examples): edge_type = "Plain" graphs_test.add_graph_node_edge(graph_id, 'Node 1', 'Node 2', edge_type) graphs_test.add_graph_node_edge(graph_id, 'Node 2', 'Node 1', edge_type) - Y_test = np.empty(args.number_of_examples, dtype=np.uint32) for graph_id in range(args.number_of_examples): x1 = random.choice(['A', 'B']) @@ -112,7 +96,6 @@ def default_args(**kwargs): Y_test[graph_id] = 0 else: Y_test[graph_id] = 1 - graphs_test.encode() tm = MultiClassGraphTsetlinMachine( diff --git a/examples/SequenceClassificationDemo.py b/examples/SequenceClassificationDemo.py index 7a2362cb..c5b13214 100644 --- a/examples/SequenceClassificationDemo.py +++ b/examples/SequenceClassificationDemo.py @@ -35,7 +35,6 @@ def default_args(**kwargs): print("Creating training data") # Create train data - graphs_train = Graphs( args.number_of_examples, symbols=['A'], @@ -43,19 +42,14 @@ def default_args(**kwargs): hypervector_bits=args.hypervector_bits, double_hashing = args.double_hashing ) - for graph_id in range(args.number_of_examples): graphs_train.set_number_of_graph_nodes(graph_id, np.random.randint(args.number_of_classes, args.max_sequence_length+1)) - graphs_train.prepare_node_configuration() - for graph_id in range(args.number_of_examples): for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1 graphs_train.add_graph_node(graph_id, node_id, number_of_edges) - graphs_train.prepare_edge_configuration() - Y_train = np.empty(args.number_of_examples, dtype=np.uint32) for graph_id in range(args.number_of_examples): for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): @@ -76,26 +70,19 @@ def default_args(**kwargs): if np.random.rand() <= args.noise: Y_train[graph_id] = np.random.choice(np.setdiff1d(np.arange(args.number_of_classes), [Y_train[graph_id]])) - graphs_train.encode() # Create test data - print("Creating testing data") - graphs_test = Graphs(args.number_of_examples, init_with=graphs_train) for graph_id in range(args.number_of_examples): graphs_test.set_number_of_graph_nodes(graph_id, np.random.randint(args.number_of_classes, args.max_sequence_length+1)) - graphs_test.prepare_node_configuration() - for graph_id in range(args.number_of_examples): for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1 graphs_test.add_graph_node(graph_id, node_id, number_of_edges) - graphs_test.prepare_edge_configuration() - Y_test = np.empty(args.number_of_examples, dtype=np.uint32) for graph_id in range(args.number_of_examples): for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): @@ -113,7 +100,6 @@ def default_args(**kwargs): node_id = np.random.randint(Y_test[graph_id], graphs_test.number_of_graph_nodes[graph_id]) for node_pos in range(Y_test[graph_id] + 1): graphs_test.add_graph_node_property(graph_id, node_id - node_pos, 'A') - graphs_test.encode() tm = MultiClassGraphTsetlinMachine( From 6280bfbc95ab1f3a2ce80ccde68b16851293dbb6 Mon Sep 17 00:00:00 2001 From: Ahmed Kadhim Date: Mon, 4 Nov 2024 10:58:20 +0000 Subject: [PATCH 02/35] rename --- examples/{Applications => applications}/RecommendationSystems.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/{Applications => applications}/RecommendationSystems.py (100%) diff --git a/examples/Applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py similarity index 100% rename from examples/Applications/RecommendationSystems.py rename to examples/applications/RecommendationSystems.py From 771edcf2af1bd1b4bb97606adcddbda472cdae0c Mon Sep 17 00:00:00 2001 From: Ahmed Kadhim Date: Wed, 6 Nov 2024 08:49:04 +0000 Subject: [PATCH 03/35] complete recom sys --- examples/MNISTVanillaDemo.py | 31 ++-- examples/NoisyXORMNISTDemo.py | 16 -- .../applications/RecommendationSystems.py | 165 ++++++++++++++++-- examples/applications/test.ipynb | 101 +++++++++++ 4 files changed, 264 insertions(+), 49 deletions(-) create mode 100644 examples/applications/test.ipynb diff --git a/examples/MNISTVanillaDemo.py b/examples/MNISTVanillaDemo.py index 02b95e2a..4428343f 100644 --- a/examples/MNISTVanillaDemo.py +++ b/examples/MNISTVanillaDemo.py @@ -60,9 +60,8 @@ def default_args(**kwargs): graphs_train.add_graph_node(graph_id, 'Image Node', number_of_outgoing_edges) graphs_train.prepare_edge_configuration() for graph_id in range(X_train.shape[0]): - if graph_id % 1000 == 0: - print(graph_id, X_train.shape[0]) - + # if graph_id % 1000 == 0: + # print(graph_id, X_train.shape[0]) for k in X_train[graph_id].nonzero()[0]: graphs_train.add_graph_node_property(graph_id, 'Image Node', "W%d,%d" % (k // 28, k % 28)) graphs_train.encode() @@ -110,16 +109,16 @@ def default_args(**kwargs): print("%d %.2f %.2f %.2f %.2f" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing)) -weights = tm.get_state()[1].reshape(2, -1) -for i in range(tm.number_of_clauses): - print("Clause #%d Weights:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') - l = [] - for k in range(args.hypervector_size * 2): - if tm.ta_action(0, i, k): - if k < args.hypervector_size: - l.append("x%d" % (k)) - else: - l.append("NOT x%d" % (k - args.hypervector_size)) - print(" AND ".join(l)) - -print(graphs_train.hypervectors) \ No newline at end of file +# weights = tm.get_state()[1].reshape(2, -1) +# for i in range(tm.number_of_clauses): +# print("Clause #%d Weights:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') +# l = [] +# for k in range(args.hypervector_size * 2): +# if tm.ta_action(0, i, k): +# if k < args.hypervector_size: +# l.append("x%d" % (k)) +# else: +# l.append("NOT x%d" % (k - args.hypervector_size)) +# print(" AND ".join(l)) + +# print(graphs_train.hypervectors) \ No newline at end of file diff --git a/examples/NoisyXORMNISTDemo.py b/examples/NoisyXORMNISTDemo.py index ff1b3151..5da47877 100644 --- a/examples/NoisyXORMNISTDemo.py +++ b/examples/NoisyXORMNISTDemo.py @@ -54,24 +54,18 @@ def default_args(**kwargs): hypervector_size=args.hypervector_size, hypervector_bits=args.hypervector_bits, ) - for graph_id in range(args.number_of_examples): graphs_train.set_number_of_graph_nodes(graph_id, 2) - graphs_train.prepare_node_configuration() - for graph_id in range(args.number_of_examples): number_of_outgoing_edges = 1 graphs_train.add_graph_node(graph_id, 'Node 1', number_of_outgoing_edges) graphs_train.add_graph_node(graph_id, 'Node 2', number_of_outgoing_edges) - graphs_train.prepare_edge_configuration() - for graph_id in range(args.number_of_examples): edge_type = "Plain" graphs_train.add_graph_node_edge(graph_id, 'Node 1', 'Node 2', edge_type) graphs_train.add_graph_node_edge(graph_id, 'Node 2', 'Node 1', edge_type) - Y_train = np.empty(args.number_of_examples, dtype=np.uint32) for graph_id in range(args.number_of_examples): x1 = random.choice([0, 1]) @@ -91,32 +85,23 @@ def default_args(**kwargs): if np.random.rand() <= args.noise: Y_train[graph_id] = 1 - Y_train[graph_id] - graphs_train.encode() # Create test data - print("Creating testing data") - graphs_test = Graphs(args.number_of_examples, init_with=graphs_train) - for graph_id in range(args.number_of_examples): graphs_test.set_number_of_graph_nodes(graph_id, 2) - graphs_test.prepare_node_configuration() - for graph_id in range(args.number_of_examples): number_of_outgoing_edges = 1 graphs_test.add_graph_node(graph_id, 'Node 1', number_of_outgoing_edges) graphs_test.add_graph_node(graph_id, 'Node 2', number_of_outgoing_edges) - graphs_test.prepare_edge_configuration() - for graph_id in range(args.number_of_examples): edge_type = "Plain" graphs_test.add_graph_node_edge(graph_id, 'Node 1', 'Node 2', edge_type) graphs_test.add_graph_node_edge(graph_id, 'Node 2', 'Node 1', edge_type) - Y_test = np.empty(args.number_of_examples, dtype=np.uint32) for graph_id in range(args.number_of_examples): x1 = random.choice([0, 1]) @@ -133,7 +118,6 @@ def default_args(**kwargs): Y_test[graph_id] = 0 else: Y_test[graph_id] = 1 - graphs_test.encode() tm = MultiClassGraphTsetlinMachine( diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index 56b73b2e..8901911c 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -1,25 +1,24 @@ from GraphTsetlinMachine.graphs import Graphs -import numpy as np -from scipy.sparse import csr_matrix from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine from time import time import argparse -import random import pandas as pd import kagglehub +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import LabelEncoder def default_args(**kwargs): parser = argparse.ArgumentParser() - parser.add_argument("--epochs", default=10, type=int) - parser.add_argument("--number-of-clauses", default=10, type=int) + parser.add_argument("--epochs", default=250, type=int) + parser.add_argument("--number-of-clauses", default=60, type=int) parser.add_argument("--T", default=100, type=int) - parser.add_argument("--s", default=1.0, type=float) + parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) parser.add_argument("--depth", default=2, type=int) - parser.add_argument("--hypervector-size", default=32, type=int) - parser.add_argument("--hypervector-bits", default=2, type=int) + parser.add_argument("--hypervector-size", default=1024, type=int) + parser.add_argument("--hypervector-bits", default=8, type=int) parser.add_argument("--message-size", default=256, type=int) - parser.add_argument("--message-bits", default=2, type=int) + parser.add_argument("--message-bits", default=8, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) parser.add_argument("--number-of-examples", default=10000, type=int) @@ -34,27 +33,159 @@ def default_args(**kwargs): args = default_args() print("Creating training data") -path = kagglehub.dataset_download("arhamrumi/amazon-product-reviews") +path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") print("Path to dataset files:", path) -data_file = path + "/Reviews.csv" # Adjust this path if necessary +data_file = path + "/amazon.csv" data = pd.read_csv(data_file) -print("Data preview:", data.head()) +# print("Data preview:", data.head()) +data = data[['product_id', 'category', 'user_id', 'rating']] + +le_user = LabelEncoder() +le_item = LabelEncoder() +le_category = LabelEncoder() +le_rating = LabelEncoder() -number_of_nodes = 3 +data['user_id'] = le_user.fit_transform(data['user_id']) +data['product_id'] = le_item.fit_transform(data['product_id']) +data['category'] = le_category.fit_transform(data['category']) +data['rating'] = le_rating.fit_transform(data['rating']) + +x = data[['user_id', 'product_id', 'category']].values +y = data['rating'].values + +X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42) + +print("X_train shape:", X_train.shape) +print("y_train shape:", Y_train.shape) +print("X_test shape:", X_test.shape) +print("y_test shape:", Y_test.shape) -symbols = [] users = data['user_id'].unique() items = data['product_id'].unique() categories = data['category'].unique() # Initialize Graphs with symbols for GTM -num_graphs = len(items) -symbols = ["I" + str(i) for i in items] + ["C" + str(c) for c in categories] + ["U" + str(u) for u in users] +number_of_nodes = 3 +symbols = [] +symbols = ["U_" + str(u) for u in users] + ["I_" + str(i) for i in items] + ["C_" + str(c) for c in categories] +# Train data graphs_train = Graphs( X_train.shape[0], symbols=symbols, hypervector_size=args.hypervector_size, hypervector_bits=args.hypervector_bits, double_hashing = args.double_hashing -) \ No newline at end of file +) +for graph_id in range(X_train.shape[0]): + graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes) +graphs_train.prepare_node_configuration() +for graph_id in range(X_train.shape[0]): + for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): + number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1 + if node_id == 0: + graphs_train.add_graph_node(graph_id, "User", number_of_edges) + elif node_id == 1: + graphs_train.add_graph_node(graph_id, "Item", number_of_edges) + else: + graphs_train.add_graph_node(graph_id, "Category", number_of_edges) +graphs_train.prepare_edge_configuration() +for graph_id in range(X_train.shape[0]): + for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): + if node_id == 0: + graphs_train.add_graph_node_edge(graph_id, "User", "Item", "UserItem") + + if node_id == 1: + graphs_train.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") + graphs_train.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") + + if node_id == 2: + graphs_train.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") + + graphs_train.add_graph_node_property(graph_id, "User", "U_" + str(X_train[graph_id][0])) + graphs_train.add_graph_node_property(graph_id, "Item", "I_" + str(X_train[graph_id][1])) + graphs_train.add_graph_node_property(graph_id, "Category", "C_" + str(X_train[graph_id][2])) +graphs_train.encode() +print("Training data produced") + +# Test data +graphs_test = Graphs(X_test.shape[0], init_with=graphs_train) +for graph_id in range(X_test.shape[0]): + graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes) +graphs_test.prepare_node_configuration() +for graph_id in range(X_test.shape[0]): + for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): + number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1 + if node_id == 0: + graphs_test.add_graph_node(graph_id, "User", number_of_edges) + elif node_id == 1: + graphs_test.add_graph_node(graph_id, "Item", number_of_edges) + else: + graphs_test.add_graph_node(graph_id, "Category", number_of_edges) +graphs_test.prepare_edge_configuration() +for graph_id in range(X_test.shape[0]): + for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): + if node_id == 0: + graphs_test.add_graph_node_edge(graph_id, "User", "Item", "UserItem") + + if node_id == 1: + graphs_test.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") + graphs_test.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") + + if node_id == 2: + graphs_test.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") + + graphs_test.add_graph_node_property(graph_id, "User", "U_" + str(X_test[graph_id][0])) + graphs_test.add_graph_node_property(graph_id, "Item", "I_" + str(X_test[graph_id][1])) + graphs_test.add_graph_node_property(graph_id, "Category", "C_" + str(X_test[graph_id][2])) +graphs_test.encode() +print("Testing data produced") + +tm = MultiClassGraphTsetlinMachine( + args.number_of_clauses, + args.T, + args.s, + number_of_state_bits = args.number_of_state_bits, + depth=args.depth, + message_size=args.message_size, + message_bits=args.message_bits, + max_included_literals=args.max_included_literals, + double_hashing = args.double_hashing +) + +for i in range(args.epochs): + start_training = time() + tm.fit(graphs_train, Y_train, epochs=1, incremental=True) + stop_training = time() + + start_testing = time() + result_test = 100*(tm.predict(graphs_test) == Y_test).mean() + stop_testing = time() + + result_train = 100*(tm.predict(graphs_train) == Y_train).mean() + + print("%d %.2f %.2f %.2f %.2f" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing)) + +# weights = tm.get_state()[1].reshape(2, -1) +# for i in range(tm.number_of_clauses): +# print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') +# l = [] +# for k in range(args.hypervector_size * 2): +# if tm.ta_action(0, i, k): +# if k < args.hypervector_size: +# l.append("x%d" % (k)) +# else: +# l.append("NOT x%d" % (k - args.hypervector_size)) + +# for k in range(args.message_size * 2): +# if tm.ta_action(1, i, k): +# if k < args.message_size: +# l.append("c%d" % (k)) +# else: +# l.append("NOT c%d" % (k - args.message_size)) + +# print(" AND ".join(l)) + +# print(graphs_test.hypervectors) +# print(tm.hypervectors) +# print(graphs_test.edge_type_id) \ No newline at end of file diff --git a/examples/applications/test.ipynb b/examples/applications/test.ipynb new file mode 100644 index 00000000..44e02947 --- /dev/null +++ b/examples/applications/test.ipynb @@ -0,0 +1,101 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating training data\n", + "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", + "Electronics|HomeTheater,TV&Video|Accessories|RemoteControls\n", + "X_train shape: (1172, 3)\n", + "y_train shape: (1172,)\n", + "X_test shape: (293, 3)\n", + "y_test shape: (293,)\n", + "111\n", + "Electronics|HomeTheater,TV&Video|Accessories|RemoteControls\n" + ] + } + ], + "source": [ + "from GraphTsetlinMachine.graphs import Graphs\n", + "import numpy as np\n", + "from scipy.sparse import csr_matrix\n", + "from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine\n", + "from time import time\n", + "import argparse\n", + "import random\n", + "import pandas as pd\n", + "import kagglehub\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import LabelEncoder\n", + "\n", + "\n", + "print(\"Creating training data\")\n", + "path = kagglehub.dataset_download(\"karkavelrajaj/amazon-sales-dataset\")\n", + "print(\"Path to dataset files:\", path)\n", + "data_file = path + \"/amazon.csv\" # Adjust this path if necessary\n", + "data = pd.read_csv(data_file)\n", + "# print(\"Data preview:\", data.head())\n", + "data = data[['product_id', 'category', 'user_id', 'rating']]\n", + "print(data['category'][100])\n", + " \n", + "# Step 2: Encode user_id, product_id, and category with LabelEncoder\n", + "# This converts string identifiers into unique integer values\n", + "le_user = LabelEncoder()\n", + "le_item = LabelEncoder()\n", + "le_category = LabelEncoder()\n", + "\n", + "data['user_id'] = le_user.fit_transform(data['user_id'])\n", + "data['product_id'] = le_item.fit_transform(data['product_id'])\n", + "data['category'] = le_category.fit_transform(data['category'])\n", + "\n", + "# Step 3: Prepare X (features) and y (labels)\n", + "x = data[['user_id', 'product_id', 'category']].values # Features: [user, item, category]\n", + "y = data['rating'].values # Labels: rating\n", + "\n", + "# Step 4: Split the data into training and test sets\n", + "X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42)\n", + "\n", + "# Display the shapes to verify the split\n", + "print(\"X_train shape:\", X_train.shape)\n", + "print(\"y_train shape:\", Y_train.shape)\n", + "print(\"X_test shape:\", X_test.shape)\n", + "print(\"y_test shape:\", Y_test.shape)\n", + "\n", + "users = data['user_id'].unique()\n", + "items = data['product_id'].unique()\n", + "categories = data['category'].unique()\n", + "\n", + "print(categories[100])\n", + "original_user_id = le_category.inverse_transform([data['category'][100]])[0]\n", + "print(original_user_id)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From ec3fc8725952d91e73fe17f0ad6a3628afa6ccd8 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 4 Dec 2024 11:29:05 +0000 Subject: [PATCH 04/35] rename --- .devcontainer/devcontainer.json | 4 ++-- .devcontainer/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e500cf24..b264ff4a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ { - "name": "TM Graph Devcontainer", + "name": "TM Graph Recomm", "dockerComposeFile": "docker-compose.yml", - "service": "tm-graph-development", + "service": "tm-graph-recomm", "workspaceFolder": "/app", "forwardPorts": [], "postCreateCommand": "echo 'Devcontainer is ready'", diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 183c3acd..0dccd188 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -1,5 +1,5 @@ services: - tm-graph-development: + tm-graph-recomm: build: context: ../ dockerfile: .devcontainer/Dockerfile From 08693ab145312d82fe5e99bb04bb82a2e9a35194 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 4 Dec 2024 13:22:41 +0000 Subject: [PATCH 05/35] tunning --- examples/applications/RecommendationSystems.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index 8901911c..016b154f 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -10,18 +10,18 @@ def default_args(**kwargs): parser = argparse.ArgumentParser() parser.add_argument("--epochs", default=250, type=int) - parser.add_argument("--number-of-clauses", default=60, type=int) - parser.add_argument("--T", default=100, type=int) + parser.add_argument("--number-of-clauses", default=1000, type=int) + parser.add_argument("--T", default=1000, type=int) parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) - parser.add_argument("--depth", default=2, type=int) - parser.add_argument("--hypervector-size", default=1024, type=int) - parser.add_argument("--hypervector-bits", default=8, type=int) - parser.add_argument("--message-size", default=256, type=int) - parser.add_argument("--message-bits", default=8, type=int) + parser.add_argument("--depth", default=3, type=int) + parser.add_argument("--hypervector-size", default=16384, type=int) + parser.add_argument("--hypervector-bits", default=328, type=int) + parser.add_argument("--message-size", default=1024, type=int) + parser.add_argument("--message-bits", default=32, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) - parser.add_argument("--number-of-examples", default=10000, type=int) + parser.add_argument("--number-of-examples", default=1000, type=int) parser.add_argument("--max-included-literals", default=4, type=int) args = parser.parse_args() @@ -68,7 +68,7 @@ def default_args(**kwargs): number_of_nodes = 3 symbols = [] symbols = ["U_" + str(u) for u in users] + ["I_" + str(i) for i in items] + ["C_" + str(c) for c in categories] - +print(len(symbols)) # Train data graphs_train = Graphs( X_train.shape[0], From 9c4be1f888844ae37879a6fc97ff68561d4f62d2 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Mon, 16 Dec 2024 12:19:18 +0000 Subject: [PATCH 06/35] update --- examples/applications/RecommendationSystems.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index 016b154f..4cb0751d 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -16,7 +16,7 @@ def default_args(**kwargs): parser.add_argument("--number-of-state-bits", default=8, type=int) parser.add_argument("--depth", default=3, type=int) parser.add_argument("--hypervector-size", default=16384, type=int) - parser.add_argument("--hypervector-bits", default=328, type=int) + parser.add_argument("--hypervector-bits", default=496, type=int) parser.add_argument("--message-size", default=1024, type=int) parser.add_argument("--message-bits", default=32, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') From daf8d5ad1f8319beafbe7d4c654bd1db02695a2c Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Tue, 17 Dec 2024 14:39:07 +0000 Subject: [PATCH 07/35] update --- .../applications/RecommendationSystems.py | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index 4cb0751d..7e2cdeef 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -3,6 +3,7 @@ from time import time import argparse import pandas as pd +import numpy as np import kagglehub from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder @@ -15,13 +16,13 @@ def default_args(**kwargs): parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) parser.add_argument("--depth", default=3, type=int) - parser.add_argument("--hypervector-size", default=16384, type=int) - parser.add_argument("--hypervector-bits", default=496, type=int) - parser.add_argument("--message-size", default=1024, type=int) - parser.add_argument("--message-bits", default=32, type=int) + parser.add_argument("--hypervector-size", default=1024, type=int) + parser.add_argument("--hypervector-bits", default=10, type=int) + parser.add_argument("--message-size", default=512, type=int) + parser.add_argument("--message-bits", default=10, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) - parser.add_argument("--number-of-examples", default=1000, type=int) + parser.add_argument("--number-of-examples", default=500, type=int) parser.add_argument("--max-included-literals", default=4, type=int) args = parser.parse_args() @@ -32,13 +33,38 @@ def default_args(**kwargs): args = default_args() -print("Creating training data") -path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") -print("Path to dataset files:", path) -data_file = path + "/amazon.csv" -data = pd.read_csv(data_file) -# print("Data preview:", data.head()) -data = data[['product_id', 'category', 'user_id', 'rating']] +# print("Creating training data") +# path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") +# print("Path to dataset files:", path) +# data_file = path + "/amazon.csv" +# data = pd.read_csv(data_file) +# # print("Data preview:", data.head()) +# data = data[['product_id', 'category', 'user_id', 'rating']] + +############################# artificial dataset ######################## +# Set random seed for reproducibility +np.random.seed(42) +# Define the size of the artificial dataset +num_users = 10 # Number of unique users +num_items = 50 # Number of unique items +num_categories = 10 # Number of unique categories +num_interactions = 10000 # Number of user-item interactions +# Generate random ratings (e.g., between 1 and 5) +ratings = np.random.choice(range(1, 3), num_interactions) +# Generate random user-item interactions +user_ids = np.random.choice(range(num_users), num_interactions) +item_ids = np.random.choice(range(num_items), num_interactions) +categories = np.random.choice(range(num_categories), num_interactions) +# Combine into a DataFrame +data = pd.DataFrame({ + 'user_id': user_ids, + 'product_id': item_ids, + 'category': categories, + 'rating': ratings +}) +print("Artificial Dataset Preview:") +print(data.head()) +######################################################################## le_user = LabelEncoder() le_item = LabelEncoder() From 9dacba5364e8abc3f9c746399f8c5185d4410cad Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 18 Dec 2024 10:25:12 +0000 Subject: [PATCH 08/35] update --- examples/applications/RecommendationSystems.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index 7e2cdeef..a453d42d 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -19,7 +19,7 @@ def default_args(**kwargs): parser.add_argument("--hypervector-size", default=1024, type=int) parser.add_argument("--hypervector-bits", default=10, type=int) parser.add_argument("--message-size", default=512, type=int) - parser.add_argument("--message-bits", default=10, type=int) + parser.add_argument("--message-bits", default=2, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) parser.add_argument("--number-of-examples", default=500, type=int) @@ -48,7 +48,7 @@ def default_args(**kwargs): num_users = 10 # Number of unique users num_items = 50 # Number of unique items num_categories = 10 # Number of unique categories -num_interactions = 10000 # Number of user-item interactions +num_interactions = 100000 # Number of user-item interactions # Generate random ratings (e.g., between 1 and 5) ratings = np.random.choice(range(1, 3), num_interactions) # Generate random user-item interactions From 3dd2b7c9f2d116aa7308bb1677449e7c3a798a5d Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 18 Dec 2024 10:35:51 +0000 Subject: [PATCH 09/35] run on gpu 6 --- .devcontainer/docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 0dccd188..46271d06 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -9,4 +9,5 @@ services: devices: - driver: nvidia capabilities: [gpu] - count: 1 # Assign number of GPUs or use 'all' to assign all available GPUs \ No newline at end of file + # count: 1 # Assign number of GPUs or use 'all' to assign all available GPUs + device_ids: ["6"] \ No newline at end of file From e9bdcd6a605e95756ad34caad8cabc811b563b35 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 18 Dec 2024 10:44:45 +0000 Subject: [PATCH 10/35] add requirments --- requirments.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 requirments.txt diff --git a/requirments.txt b/requirments.txt new file mode 100644 index 00000000..12b86c03 --- /dev/null +++ b/requirments.txt @@ -0,0 +1,7 @@ +numpy +numba +pycuda +scipy +pandas +kagglehub +scikit-learn \ No newline at end of file From da31b30562feb78fd0ed42869c144c3f0dc4a2d6 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 18 Dec 2024 13:27:36 +0000 Subject: [PATCH 11/35] update --- .../applications/RecommendationSystems.py | 166 ++++++++++++++---- 1 file changed, 130 insertions(+), 36 deletions(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index a453d42d..eea88e73 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -11,18 +11,17 @@ def default_args(**kwargs): parser = argparse.ArgumentParser() parser.add_argument("--epochs", default=250, type=int) - parser.add_argument("--number-of-clauses", default=1000, type=int) - parser.add_argument("--T", default=1000, type=int) + parser.add_argument("--number-of-clauses", default=10000, type=int) + parser.add_argument("--T", default=10000, type=int) parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) - parser.add_argument("--depth", default=3, type=int) - parser.add_argument("--hypervector-size", default=1024, type=int) - parser.add_argument("--hypervector-bits", default=10, type=int) - parser.add_argument("--message-size", default=512, type=int) - parser.add_argument("--message-bits", default=2, type=int) + parser.add_argument("--depth", default=1, type=int) + parser.add_argument("--hypervector-size", default=4096, type=int) + parser.add_argument("--hypervector-bits", default=256, type=int) + parser.add_argument("--message-size", default=4096, type=int) + parser.add_argument("--message-bits", default=256, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) - parser.add_argument("--number-of-examples", default=500, type=int) parser.add_argument("--max-included-literals", default=4, type=int) args = parser.parse_args() @@ -33,38 +32,133 @@ def default_args(**kwargs): args = default_args() -# print("Creating training data") -# path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") -# print("Path to dataset files:", path) -# data_file = path + "/amazon.csv" -# data = pd.read_csv(data_file) -# # print("Data preview:", data.head()) -# data = data[['product_id', 'category', 'user_id', 'rating']] +############################# real dataset ######################## + +print("Creating training data") +path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") +print("Path to dataset files:", path) +data_file = path + "/amazon.csv" +data = pd.read_csv(data_file) +# print("Data preview:", data.head()) +data = data[['product_id', 'category', 'user_id', 'rating']] ############################# artificial dataset ######################## + # Set random seed for reproducibility -np.random.seed(42) -# Define the size of the artificial dataset -num_users = 10 # Number of unique users -num_items = 50 # Number of unique items -num_categories = 10 # Number of unique categories -num_interactions = 100000 # Number of user-item interactions -# Generate random ratings (e.g., between 1 and 5) -ratings = np.random.choice(range(1, 3), num_interactions) -# Generate random user-item interactions -user_ids = np.random.choice(range(num_users), num_interactions) -item_ids = np.random.choice(range(num_items), num_interactions) -categories = np.random.choice(range(num_categories), num_interactions) -# Combine into a DataFrame -data = pd.DataFrame({ - 'user_id': user_ids, - 'product_id': item_ids, - 'category': categories, - 'rating': ratings -}) -print("Artificial Dataset Preview:") -print(data.head()) +# np.random.seed(42) + +########################## ver 1 ############################ + +# num_users = 5 # Number of unique users +# num_items =10 # Number of unique items +# num_categories = 5 # Number of unique categories +# num_interactions = 1000 # Number of user-item interactions +# # Generate random ratings (e.g., between 1 and 5) +# ratings = np.random.choice(range(1, 3), num_interactions) +# # Generate random user-item interactions +# user_ids = np.random.choice(range(num_users), num_interactions) +# item_ids = np.random.choice(range(num_items), num_interactions) +# categories = np.random.choice(range(num_categories), num_interactions) + +# data = pd.DataFrame({ +# 'user_id': user_ids, +# 'product_id': item_ids, +# 'category': categories, +# 'rating': ratings +# }) +# print("Artificial Dataset Preview:") + +########################## ver 2 ############################ + +# Parameters +# num_users = 100 # Number of unique users +# num_items = 50 # Number of unique items +# num_categories = 50 # Number of unique categories +# num_interactions = 1000 # Number of user-item interactions +# noise_ratio = 0.01 # Percentage of noisy interactions + +# # Generate user preferences: each user prefers 1-3 random categories +# user_preferences = { +# user: np.random.choice(range(num_categories), size=np.random.randint(1, 4), replace=False) +# for user in range(num_users) +# } + +# # Assign each item to a category +# item_categories = {item: np.random.choice(range(num_categories)) for item in range(num_items)} + +# # Generate interactions +# user_ids = np.random.choice(range(num_users), num_interactions) +# item_ids = np.random.choice(range(num_items), num_interactions) + +# # Generate ratings based on the pattern +# ratings = [] +# for user, item in zip(user_ids, item_ids): +# item_category = item_categories[item] +# if item_category in user_preferences[user]: +# ratings.append(np.random.choice([3, 4])) # High rating for preferred categories +# else: +# ratings.append(np.random.choice([1, 2])) # Low rating otherwise + +# # Introduce noise +# num_noisy = int(noise_ratio * num_interactions) +# noisy_indices = np.random.choice(range(num_interactions), num_noisy, replace=False) +# for idx in noisy_indices: +# ratings[idx] = np.random.choice(range(1, 6)) # Replace with random rating + +# # Combine into a DataFrame +# data = pd.DataFrame({ +# 'user_id': user_ids, +# 'product_id': item_ids, +# 'category': [item_categories[item] for item in item_ids], +# 'rating': ratings +# }) +# print("Artificial Dataset Preview:") + +########################### ver 3 ############################## + +# Parameters +# num_users = 100 # Number of unique users +# num_items = 50 # Number of unique items +# num_categories = 5 # Number of unique categories +# num_interactions = 10000 # Number of user-item interactions +# noise_ratio = 0.01 # Percentage of noisy interactions + +# # Step 1: Define deterministic user preferences +# user_preferences = {user: user % num_categories for user in range(num_users)} + +# # Step 2: Assign items to categories in a cyclic pattern +# item_categories = {item: item % num_categories for item in range(num_items)} + +# # Step 3: Generate deterministic interactions +# user_ids = np.arange(num_interactions) % num_users # Cycle through users +# item_ids = np.arange(num_interactions) % num_items # Cycle through items + +# # Step 4: Generate ratings based on the pattern +# ratings = [] +# for user, item in zip(user_ids, item_ids): +# preferred_category = user_preferences[user] +# item_category = item_categories[item] +# if item_category == preferred_category: +# ratings.append(5) # High rating for preferred category +# else: +# ratings.append(1) # Low rating otherwise + +# # Step 5: Introduce noise +# num_noisy = int(noise_ratio * num_interactions) +# noisy_indices = np.random.choice(range(num_interactions), num_noisy, replace=False) +# for idx in noisy_indices: +# ratings[idx] = np.random.choice(range(1, 6)) # Replace with random rating + +# # Step 6: Create a DataFrame +# data = pd.DataFrame({ +# 'user_id': user_ids, +# 'product_id': item_ids, +# 'category': [item_categories[item] for item in item_ids], +# 'rating': ratings +# }) + ######################################################################## +print(data.head()) le_user = LabelEncoder() le_item = LabelEncoder() From fababa59963ca02253cdb8ff9a1f9127d228c607 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 18 Dec 2024 13:47:42 +0000 Subject: [PATCH 12/35] expanded ds --- .../applications/RecommendationSystems.py | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index eea88e73..db7000fb 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -38,10 +38,38 @@ def default_args(**kwargs): path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") print("Path to dataset files:", path) data_file = path + "/amazon.csv" -data = pd.read_csv(data_file) +org_data = pd.read_csv(data_file) # print("Data preview:", data.head()) -data = data[['product_id', 'category', 'user_id', 'rating']] - +org_data = org_data[['product_id', 'category', 'user_id', 'rating']] +#################################### expanded +org_data['rating'] = pd.to_numeric(org_data['rating'], errors='coerce') # Coerce invalid values to NaN +org_data.dropna(subset=['rating'], inplace=True) # Drop rows with NaN ratings +org_data['rating'] = org_data['rating'].astype(int) +# Expand the dataset 10 times +data = pd.concat([org_data] * 10, ignore_index=True) + +# Shuffle the expanded dataset +data = data.sample(frac=1, random_state=42).reset_index(drop=True) + +# Add noise +# Define the noise ratio +noise_ratio = 0.1 # 10% noise + +# Select rows to apply noise +num_noisy_rows = int(noise_ratio * len(data)) +noisy_indices = np.random.choice(data.index, size=num_noisy_rows, replace=False) + +# Add noise to ratings +data.loc[noisy_indices, 'rating'] = np.random.choice(range(1, 6), size=num_noisy_rows) + +# Add noise to categories +unique_categories = data['category'].unique() +data.loc[noisy_indices, 'category'] = np.random.choice(unique_categories, size=num_noisy_rows) + +# Print a preview of the noisy and expanded dataset +print("Original data shape:", org_data.shape) +print("Expanded data shape:", data.shape) +print("Data preview:\n", data.head()) ############################# artificial dataset ######################## # Set random seed for reproducibility From 82305ab67649e458064ee4bfb5d732da250b433b Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Thu, 19 Dec 2024 14:57:03 +0000 Subject: [PATCH 13/35] update --- .../applications/RecommendationSystems.py | 2 +- examples/applications/test.ipynb | 226 +++++++++++++++--- 2 files changed, 199 insertions(+), 29 deletions(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index db7000fb..4a1daa46 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -22,7 +22,7 @@ def default_args(**kwargs): parser.add_argument("--message-bits", default=256, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) - parser.add_argument("--max-included-literals", default=4, type=int) + parser.add_argument("--max-included-literals", default=10, type=int) args = parser.parse_args() for key, value in kwargs.items(): diff --git a/examples/applications/test.ipynb b/examples/applications/test.ipynb index 44e02947..7d389f1b 100644 --- a/examples/applications/test.ipynb +++ b/examples/applications/test.ipynb @@ -2,66 +2,138 @@ "cells": [ { "cell_type": "code", - "execution_count": 19, + "execution_count": 1, "metadata": {}, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Creating training data\n", - "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", - "Electronics|HomeTheater,TV&Video|Accessories|RemoteControls\n", - "X_train shape: (1172, 3)\n", - "y_train shape: (1172,)\n", - "X_test shape: (293, 3)\n", - "y_test shape: (293,)\n", - "111\n", - "Electronics|HomeTheater,TV&Video|Accessories|RemoteControls\n" + "/usr/local/lib/python3.10/dist-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n", + "usage: ipykernel_launcher.py [-h] [--epochs EPOCHS]\n", + " [--number-of-clauses NUMBER_OF_CLAUSES] [--T T]\n", + " [--s S]\n", + " [--number-of-state-bits NUMBER_OF_STATE_BITS]\n", + " [--depth DEPTH]\n", + " [--hypervector-size HYPERVECTOR_SIZE]\n", + " [--hypervector-bits HYPERVECTOR_BITS]\n", + " [--message-size MESSAGE_SIZE]\n", + " [--message-bits MESSAGE_BITS] [--double-hashing]\n", + " [--noise NOISE]\n", + " [--max-included-literals MAX_INCLUDED_LITERALS]\n", + "ipykernel_launcher.py: error: unrecognized arguments: --f=/root/.local/share/jupyter/runtime/kernel-v3a1695e0e67c01cd0a818bc897e0f886c634ee3d4.json\n" + ] + }, + { + "ename": "SystemExit", + "evalue": "2", + "output_type": "error", + "traceback": [ + "An exception has occurred, use %tb to see the full traceback.\n", + "\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m 2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/root/.local/lib/python3.10/site-packages/IPython/core/interactiveshell.py:3585: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n", + " warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n" ] } ], "source": [ "from GraphTsetlinMachine.graphs import Graphs\n", - "import numpy as np\n", - "from scipy.sparse import csr_matrix\n", "from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine\n", "from time import time\n", "import argparse\n", - "import random\n", "import pandas as pd\n", + "import numpy as np\n", "import kagglehub\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import LabelEncoder\n", "\n", + "def default_args(**kwargs):\n", + " parser = argparse.ArgumentParser()\n", + " parser.add_argument(\"--epochs\", default=250, type=int)\n", + " parser.add_argument(\"--number-of-clauses\", default=10000, type=int)\n", + " parser.add_argument(\"--T\", default=10000, type=int)\n", + " parser.add_argument(\"--s\", default=10.0, type=float)\n", + " parser.add_argument(\"--number-of-state-bits\", default=8, type=int)\n", + " parser.add_argument(\"--depth\", default=1, type=int)\n", + " parser.add_argument(\"--hypervector-size\", default=4096, type=int)\n", + " parser.add_argument(\"--hypervector-bits\", default=256, type=int)\n", + " parser.add_argument(\"--message-size\", default=4096, type=int)\n", + " parser.add_argument(\"--message-bits\", default=256, type=int)\n", + " parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true')\n", + " parser.add_argument(\"--noise\", default=0.01, type=float)\n", + " parser.add_argument(\"--max-included-literals\", default=10, type=int)\n", + "\n", + " args = parser.parse_args()\n", + " for key, value in kwargs.items():\n", + " if key in args.__dict__:\n", + " setattr(args, key, value)\n", + " return args\n", + "\n", + "args = default_args()\n", + "\n", + "############################# real dataset ########################\n", "\n", "print(\"Creating training data\")\n", "path = kagglehub.dataset_download(\"karkavelrajaj/amazon-sales-dataset\")\n", "print(\"Path to dataset files:\", path)\n", - "data_file = path + \"/amazon.csv\" # Adjust this path if necessary\n", - "data = pd.read_csv(data_file)\n", + "data_file = path + \"/amazon.csv\" \n", + "org_data = pd.read_csv(data_file)\n", "# print(\"Data preview:\", data.head())\n", - "data = data[['product_id', 'category', 'user_id', 'rating']]\n", - "print(data['category'][100])\n", + "org_data = org_data[['product_id', 'category', 'user_id', 'rating']]\n", + "#################################### expanded \n", + "org_data['rating'] = pd.to_numeric(org_data['rating'], errors='coerce') # Coerce invalid values to NaN\n", + "org_data.dropna(subset=['rating'], inplace=True) # Drop rows with NaN ratings\n", + "org_data['rating'] = org_data['rating'].astype(int)\n", + "# Expand the dataset 10 times\n", + "data = pd.concat([org_data] * 10, ignore_index=True)\n", + "\n", + "# Shuffle the expanded dataset\n", + "data = data.sample(frac=1, random_state=42).reset_index(drop=True)\n", + "\n", + "# Add noise\n", + "# Define the noise ratio\n", + "noise_ratio = 0.1 # 10% noise\n", + "\n", + "# Select rows to apply noise\n", + "num_noisy_rows = int(noise_ratio * len(data))\n", + "noisy_indices = np.random.choice(data.index, size=num_noisy_rows, replace=False)\n", + "\n", + "# Add noise to ratings\n", + "data.loc[noisy_indices, 'rating'] = np.random.choice(range(1, 6), size=num_noisy_rows)\n", + "\n", + "# Add noise to categories\n", + "unique_categories = data['category'].unique()\n", + "data.loc[noisy_indices, 'category'] = np.random.choice(unique_categories, size=num_noisy_rows)\n", + "\n", + "# Print a preview of the noisy and expanded dataset\n", + "print(\"Original data shape:\", org_data.shape)\n", + "print(\"Expanded data shape:\", data.shape)\n", + "print(\"Data preview:\\n\", data.head())\n", + "\n", + "print(data.head())\n", " \n", - "# Step 2: Encode user_id, product_id, and category with LabelEncoder\n", - "# This converts string identifiers into unique integer values\n", "le_user = LabelEncoder()\n", "le_item = LabelEncoder()\n", "le_category = LabelEncoder()\n", + "le_rating = LabelEncoder() \n", "\n", "data['user_id'] = le_user.fit_transform(data['user_id'])\n", "data['product_id'] = le_item.fit_transform(data['product_id'])\n", "data['category'] = le_category.fit_transform(data['category'])\n", + "data['rating'] = le_rating.fit_transform(data['rating'])\n", "\n", - "# Step 3: Prepare X (features) and y (labels)\n", - "x = data[['user_id', 'product_id', 'category']].values # Features: [user, item, category]\n", - "y = data['rating'].values # Labels: rating\n", + "x = data[['user_id', 'product_id', 'category']].values \n", + "y = data['rating'].values \n", "\n", - "# Step 4: Split the data into training and test sets\n", "X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42)\n", "\n", - "# Display the shapes to verify the split\n", "print(\"X_train shape:\", X_train.shape)\n", "print(\"y_train shape:\", Y_train.shape)\n", "print(\"X_test shape:\", X_test.shape)\n", @@ -71,9 +143,107 @@ "items = data['product_id'].unique()\n", "categories = data['category'].unique()\n", "\n", - "print(categories[100])\n", - "original_user_id = le_category.inverse_transform([data['category'][100]])[0]\n", - "print(original_user_id)" + "# Initialize Graphs with symbols for GTM\n", + "number_of_nodes = 3\n", + "symbols = []\n", + "symbols = [\"U_\" + str(u) for u in users] + [\"I_\" + str(i) for i in items] + [\"C_\" + str(c) for c in categories] \n", + "print(len(symbols))\n", + "# Train data\n", + "graphs_train = Graphs(\n", + " X_train.shape[0],\n", + " symbols=symbols,\n", + " hypervector_size=args.hypervector_size,\n", + " hypervector_bits=args.hypervector_bits,\n", + " double_hashing = args.double_hashing\n", + ")\n", + "for graph_id in range(X_train.shape[0]):\n", + " graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes)\n", + "graphs_train.prepare_node_configuration()\n", + "for graph_id in range(X_train.shape[0]):\n", + " for node_id in range(graphs_train.number_of_graph_nodes[graph_id]):\n", + " number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1\n", + " if node_id == 0:\n", + " graphs_train.add_graph_node(graph_id, \"User\", number_of_edges)\n", + " elif node_id == 1:\n", + " graphs_train.add_graph_node(graph_id, \"Item\", number_of_edges)\n", + " else:\n", + " graphs_train.add_graph_node(graph_id, \"Category\", number_of_edges)\n", + "graphs_train.prepare_edge_configuration()\n", + "for graph_id in range(X_train.shape[0]):\n", + " for node_id in range(graphs_train.number_of_graph_nodes[graph_id]):\n", + " if node_id == 0:\n", + " graphs_train.add_graph_node_edge(graph_id, \"User\", \"Item\", \"UserItem\")\n", + " \n", + " if node_id == 1:\n", + " graphs_train.add_graph_node_edge(graph_id, \"Item\", \"Category\", \"ItemCategory\")\n", + " graphs_train.add_graph_node_edge(graph_id, \"Item\", \"User\", \"ItemUser\")\n", + " \n", + " if node_id == 2:\n", + " graphs_train.add_graph_node_edge(graph_id, \"Category\", \"Item\", \"CatrgoryItem\")\n", + "\n", + " graphs_train.add_graph_node_property(graph_id, \"User\", \"U_\" + str(X_train[graph_id][0]))\n", + " graphs_train.add_graph_node_property(graph_id, \"Item\", \"I_\" + str(X_train[graph_id][1]))\n", + " graphs_train.add_graph_node_property(graph_id, \"Category\", \"C_\" + str(X_train[graph_id][2]))\n", + "graphs_train.encode()\n", + "print(\"Training data produced\")\n", + "\n", + "# Test data\n", + "graphs_test = Graphs(X_test.shape[0], init_with=graphs_train)\n", + "for graph_id in range(X_test.shape[0]):\n", + " graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes)\n", + "graphs_test.prepare_node_configuration()\n", + "for graph_id in range(X_test.shape[0]):\n", + " for node_id in range(graphs_test.number_of_graph_nodes[graph_id]):\n", + " number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1\n", + " if node_id == 0:\n", + " graphs_test.add_graph_node(graph_id, \"User\", number_of_edges)\n", + " elif node_id == 1:\n", + " graphs_test.add_graph_node(graph_id, \"Item\", number_of_edges)\n", + " else:\n", + " graphs_test.add_graph_node(graph_id, \"Category\", number_of_edges)\n", + "graphs_test.prepare_edge_configuration()\n", + "for graph_id in range(X_test.shape[0]):\n", + " for node_id in range(graphs_test.number_of_graph_nodes[graph_id]):\n", + " if node_id == 0:\n", + " graphs_test.add_graph_node_edge(graph_id, \"User\", \"Item\", \"UserItem\")\n", + " \n", + " if node_id == 1:\n", + " graphs_test.add_graph_node_edge(graph_id, \"Item\", \"Category\", \"ItemCategory\")\n", + " graphs_test.add_graph_node_edge(graph_id, \"Item\", \"User\", \"ItemUser\")\n", + " \n", + " if node_id == 2:\n", + " graphs_test.add_graph_node_edge(graph_id, \"Category\", \"Item\", \"CatrgoryItem\")\n", + "\n", + " graphs_test.add_graph_node_property(graph_id, \"User\", \"U_\" + str(X_test[graph_id][0]))\n", + " graphs_test.add_graph_node_property(graph_id, \"Item\", \"I_\" + str(X_test[graph_id][1]))\n", + " graphs_test.add_graph_node_property(graph_id, \"Category\", \"C_\" + str(X_test[graph_id][2]))\n", + "graphs_test.encode()\n", + "print(\"Testing data produced\")\n", + "\n", + "tm = MultiClassGraphTsetlinMachine(\n", + " args.number_of_clauses,\n", + " args.T,\n", + " args.s,\n", + " number_of_state_bits = args.number_of_state_bits,\n", + " depth=args.depth,\n", + " message_size=args.message_size,\n", + " message_bits=args.message_bits,\n", + " max_included_literals=args.max_included_literals,\n", + " double_hashing = args.double_hashing\n", + ")\n", + "\n", + "for i in range(args.epochs):\n", + " start_training = time()\n", + " tm.fit(graphs_train, Y_train, epochs=1, incremental=True)\n", + " stop_training = time()\n", + "\n", + " start_testing = time()\n", + " result_test = 100*(tm.predict(graphs_test) == Y_test).mean()\n", + " stop_testing = time()\n", + "\n", + " result_train = 100*(tm.predict(graphs_train) == Y_train).mean()\n", + "\n", + " print(\"%d %.2f %.2f %.2f %.2f\" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing))" ] } ], From 218a96f11d24076ac1076c4d153b280b778700a0 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Fri, 20 Dec 2024 10:16:33 +0000 Subject: [PATCH 14/35] before add example no --- .../applications/RecommendationSystems.py | 47 ++++++++++--------- examples/applications/test.ipynb | 2 +- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py index 4a1daa46..2b57ecc4 100644 --- a/examples/applications/RecommendationSystems.py +++ b/examples/applications/RecommendationSystems.py @@ -10,19 +10,20 @@ def default_args(**kwargs): parser = argparse.ArgumentParser() - parser.add_argument("--epochs", default=250, type=int) + parser.add_argument("--epochs", default=10, type=int) parser.add_argument("--number-of-clauses", default=10000, type=int) parser.add_argument("--T", default=10000, type=int) parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) - parser.add_argument("--depth", default=1, type=int) + parser.add_argument("--depth", default=3, type=int) parser.add_argument("--hypervector-size", default=4096, type=int) parser.add_argument("--hypervector-bits", default=256, type=int) - parser.add_argument("--message-size", default=4096, type=int) - parser.add_argument("--message-bits", default=256, type=int) + parser.add_argument("--message-size", default=256, type=int) + parser.add_argument("--message-bits", default=2, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) parser.add_argument("--max-included-literals", default=10, type=int) + parser.add_argument("--number-of-examples", default=1000, type=int) args = parser.parse_args() for key, value in kwargs.items(): @@ -314,25 +315,25 @@ def default_args(**kwargs): print("%d %.2f %.2f %.2f %.2f" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing)) -# weights = tm.get_state()[1].reshape(2, -1) -# for i in range(tm.number_of_clauses): -# print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') -# l = [] -# for k in range(args.hypervector_size * 2): -# if tm.ta_action(0, i, k): -# if k < args.hypervector_size: -# l.append("x%d" % (k)) -# else: -# l.append("NOT x%d" % (k - args.hypervector_size)) - -# for k in range(args.message_size * 2): -# if tm.ta_action(1, i, k): -# if k < args.message_size: -# l.append("c%d" % (k)) -# else: -# l.append("NOT c%d" % (k - args.message_size)) - -# print(" AND ".join(l)) +weights = tm.get_state()[1].reshape(2, -1) +for i in range(tm.number_of_clauses): + print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') + l = [] + for k in range(args.hypervector_size * 2): + if tm.ta_action(0, i, k): + if k < args.hypervector_size: + l.append("x%d" % (k)) + else: + l.append("NOT x%d" % (k - args.hypervector_size)) + + for k in range(args.message_size * 2): + if tm.ta_action(1, i, k): + if k < args.message_size: + l.append("c%d" % (k)) + else: + l.append("NOT c%d" % (k - args.message_size)) + + print(" AND ".join(l)) # print(graphs_test.hypervectors) # print(tm.hypervectors) diff --git a/examples/applications/test.ipynb b/examples/applications/test.ipynb index 7d389f1b..1465bf14 100644 --- a/examples/applications/test.ipynb +++ b/examples/applications/test.ipynb @@ -22,7 +22,7 @@ " [--message-bits MESSAGE_BITS] [--double-hashing]\n", " [--noise NOISE]\n", " [--max-included-literals MAX_INCLUDED_LITERALS]\n", - "ipykernel_launcher.py: error: unrecognized arguments: --f=/root/.local/share/jupyter/runtime/kernel-v3a1695e0e67c01cd0a818bc897e0f886c634ee3d4.json\n" + "ipykernel_launcher.py: error: unrecognized arguments: --f=/root/.local/share/jupyter/runtime/kernel-v306f6e67794e909fd94dbef768cafee2e613728cc.json\n" ] }, { From 799493fd1d3241fb0a6e5271bbaeaecb8c9271cb Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Fri, 20 Dec 2024 11:49:12 +0000 Subject: [PATCH 15/35] orgnizing files --- .../applications/RecommendationSystems.py | 340 ------------------ .../prepare_dataset.cpython-310.pyc | Bin 0 -> 1415 bytes .../recommendation/main_products.py | 178 +++++++++ .../recommendation/prepare_dataset.py | 145 ++++++++ 4 files changed, 323 insertions(+), 340 deletions(-) delete mode 100644 examples/applications/RecommendationSystems.py create mode 100644 examples/applications/recommendation/__pycache__/prepare_dataset.cpython-310.pyc create mode 100644 examples/applications/recommendation/main_products.py create mode 100644 examples/applications/recommendation/prepare_dataset.py diff --git a/examples/applications/RecommendationSystems.py b/examples/applications/RecommendationSystems.py deleted file mode 100644 index 2b57ecc4..00000000 --- a/examples/applications/RecommendationSystems.py +++ /dev/null @@ -1,340 +0,0 @@ -from GraphTsetlinMachine.graphs import Graphs -from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine -from time import time -import argparse -import pandas as pd -import numpy as np -import kagglehub -from sklearn.model_selection import train_test_split -from sklearn.preprocessing import LabelEncoder - -def default_args(**kwargs): - parser = argparse.ArgumentParser() - parser.add_argument("--epochs", default=10, type=int) - parser.add_argument("--number-of-clauses", default=10000, type=int) - parser.add_argument("--T", default=10000, type=int) - parser.add_argument("--s", default=10.0, type=float) - parser.add_argument("--number-of-state-bits", default=8, type=int) - parser.add_argument("--depth", default=3, type=int) - parser.add_argument("--hypervector-size", default=4096, type=int) - parser.add_argument("--hypervector-bits", default=256, type=int) - parser.add_argument("--message-size", default=256, type=int) - parser.add_argument("--message-bits", default=2, type=int) - parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') - parser.add_argument("--noise", default=0.01, type=float) - parser.add_argument("--max-included-literals", default=10, type=int) - parser.add_argument("--number-of-examples", default=1000, type=int) - - args = parser.parse_args() - for key, value in kwargs.items(): - if key in args.__dict__: - setattr(args, key, value) - return args - -args = default_args() - -############################# real dataset ######################## - -print("Creating training data") -path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") -print("Path to dataset files:", path) -data_file = path + "/amazon.csv" -org_data = pd.read_csv(data_file) -# print("Data preview:", data.head()) -org_data = org_data[['product_id', 'category', 'user_id', 'rating']] -#################################### expanded -org_data['rating'] = pd.to_numeric(org_data['rating'], errors='coerce') # Coerce invalid values to NaN -org_data.dropna(subset=['rating'], inplace=True) # Drop rows with NaN ratings -org_data['rating'] = org_data['rating'].astype(int) -# Expand the dataset 10 times -data = pd.concat([org_data] * 10, ignore_index=True) - -# Shuffle the expanded dataset -data = data.sample(frac=1, random_state=42).reset_index(drop=True) - -# Add noise -# Define the noise ratio -noise_ratio = 0.1 # 10% noise - -# Select rows to apply noise -num_noisy_rows = int(noise_ratio * len(data)) -noisy_indices = np.random.choice(data.index, size=num_noisy_rows, replace=False) - -# Add noise to ratings -data.loc[noisy_indices, 'rating'] = np.random.choice(range(1, 6), size=num_noisy_rows) - -# Add noise to categories -unique_categories = data['category'].unique() -data.loc[noisy_indices, 'category'] = np.random.choice(unique_categories, size=num_noisy_rows) - -# Print a preview of the noisy and expanded dataset -print("Original data shape:", org_data.shape) -print("Expanded data shape:", data.shape) -print("Data preview:\n", data.head()) -############################# artificial dataset ######################## - -# Set random seed for reproducibility -# np.random.seed(42) - -########################## ver 1 ############################ - -# num_users = 5 # Number of unique users -# num_items =10 # Number of unique items -# num_categories = 5 # Number of unique categories -# num_interactions = 1000 # Number of user-item interactions -# # Generate random ratings (e.g., between 1 and 5) -# ratings = np.random.choice(range(1, 3), num_interactions) -# # Generate random user-item interactions -# user_ids = np.random.choice(range(num_users), num_interactions) -# item_ids = np.random.choice(range(num_items), num_interactions) -# categories = np.random.choice(range(num_categories), num_interactions) - -# data = pd.DataFrame({ -# 'user_id': user_ids, -# 'product_id': item_ids, -# 'category': categories, -# 'rating': ratings -# }) -# print("Artificial Dataset Preview:") - -########################## ver 2 ############################ - -# Parameters -# num_users = 100 # Number of unique users -# num_items = 50 # Number of unique items -# num_categories = 50 # Number of unique categories -# num_interactions = 1000 # Number of user-item interactions -# noise_ratio = 0.01 # Percentage of noisy interactions - -# # Generate user preferences: each user prefers 1-3 random categories -# user_preferences = { -# user: np.random.choice(range(num_categories), size=np.random.randint(1, 4), replace=False) -# for user in range(num_users) -# } - -# # Assign each item to a category -# item_categories = {item: np.random.choice(range(num_categories)) for item in range(num_items)} - -# # Generate interactions -# user_ids = np.random.choice(range(num_users), num_interactions) -# item_ids = np.random.choice(range(num_items), num_interactions) - -# # Generate ratings based on the pattern -# ratings = [] -# for user, item in zip(user_ids, item_ids): -# item_category = item_categories[item] -# if item_category in user_preferences[user]: -# ratings.append(np.random.choice([3, 4])) # High rating for preferred categories -# else: -# ratings.append(np.random.choice([1, 2])) # Low rating otherwise - -# # Introduce noise -# num_noisy = int(noise_ratio * num_interactions) -# noisy_indices = np.random.choice(range(num_interactions), num_noisy, replace=False) -# for idx in noisy_indices: -# ratings[idx] = np.random.choice(range(1, 6)) # Replace with random rating - -# # Combine into a DataFrame -# data = pd.DataFrame({ -# 'user_id': user_ids, -# 'product_id': item_ids, -# 'category': [item_categories[item] for item in item_ids], -# 'rating': ratings -# }) -# print("Artificial Dataset Preview:") - -########################### ver 3 ############################## - -# Parameters -# num_users = 100 # Number of unique users -# num_items = 50 # Number of unique items -# num_categories = 5 # Number of unique categories -# num_interactions = 10000 # Number of user-item interactions -# noise_ratio = 0.01 # Percentage of noisy interactions - -# # Step 1: Define deterministic user preferences -# user_preferences = {user: user % num_categories for user in range(num_users)} - -# # Step 2: Assign items to categories in a cyclic pattern -# item_categories = {item: item % num_categories for item in range(num_items)} - -# # Step 3: Generate deterministic interactions -# user_ids = np.arange(num_interactions) % num_users # Cycle through users -# item_ids = np.arange(num_interactions) % num_items # Cycle through items - -# # Step 4: Generate ratings based on the pattern -# ratings = [] -# for user, item in zip(user_ids, item_ids): -# preferred_category = user_preferences[user] -# item_category = item_categories[item] -# if item_category == preferred_category: -# ratings.append(5) # High rating for preferred category -# else: -# ratings.append(1) # Low rating otherwise - -# # Step 5: Introduce noise -# num_noisy = int(noise_ratio * num_interactions) -# noisy_indices = np.random.choice(range(num_interactions), num_noisy, replace=False) -# for idx in noisy_indices: -# ratings[idx] = np.random.choice(range(1, 6)) # Replace with random rating - -# # Step 6: Create a DataFrame -# data = pd.DataFrame({ -# 'user_id': user_ids, -# 'product_id': item_ids, -# 'category': [item_categories[item] for item in item_ids], -# 'rating': ratings -# }) - -######################################################################## -print(data.head()) - -le_user = LabelEncoder() -le_item = LabelEncoder() -le_category = LabelEncoder() -le_rating = LabelEncoder() - -data['user_id'] = le_user.fit_transform(data['user_id']) -data['product_id'] = le_item.fit_transform(data['product_id']) -data['category'] = le_category.fit_transform(data['category']) -data['rating'] = le_rating.fit_transform(data['rating']) - -x = data[['user_id', 'product_id', 'category']].values -y = data['rating'].values - -X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42) - -print("X_train shape:", X_train.shape) -print("y_train shape:", Y_train.shape) -print("X_test shape:", X_test.shape) -print("y_test shape:", Y_test.shape) - -users = data['user_id'].unique() -items = data['product_id'].unique() -categories = data['category'].unique() - -# Initialize Graphs with symbols for GTM -number_of_nodes = 3 -symbols = [] -symbols = ["U_" + str(u) for u in users] + ["I_" + str(i) for i in items] + ["C_" + str(c) for c in categories] -print(len(symbols)) -# Train data -graphs_train = Graphs( - X_train.shape[0], - symbols=symbols, - hypervector_size=args.hypervector_size, - hypervector_bits=args.hypervector_bits, - double_hashing = args.double_hashing -) -for graph_id in range(X_train.shape[0]): - graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes) -graphs_train.prepare_node_configuration() -for graph_id in range(X_train.shape[0]): - for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): - number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1 - if node_id == 0: - graphs_train.add_graph_node(graph_id, "User", number_of_edges) - elif node_id == 1: - graphs_train.add_graph_node(graph_id, "Item", number_of_edges) - else: - graphs_train.add_graph_node(graph_id, "Category", number_of_edges) -graphs_train.prepare_edge_configuration() -for graph_id in range(X_train.shape[0]): - for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): - if node_id == 0: - graphs_train.add_graph_node_edge(graph_id, "User", "Item", "UserItem") - - if node_id == 1: - graphs_train.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") - graphs_train.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") - - if node_id == 2: - graphs_train.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") - - graphs_train.add_graph_node_property(graph_id, "User", "U_" + str(X_train[graph_id][0])) - graphs_train.add_graph_node_property(graph_id, "Item", "I_" + str(X_train[graph_id][1])) - graphs_train.add_graph_node_property(graph_id, "Category", "C_" + str(X_train[graph_id][2])) -graphs_train.encode() -print("Training data produced") - -# Test data -graphs_test = Graphs(X_test.shape[0], init_with=graphs_train) -for graph_id in range(X_test.shape[0]): - graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes) -graphs_test.prepare_node_configuration() -for graph_id in range(X_test.shape[0]): - for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): - number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1 - if node_id == 0: - graphs_test.add_graph_node(graph_id, "User", number_of_edges) - elif node_id == 1: - graphs_test.add_graph_node(graph_id, "Item", number_of_edges) - else: - graphs_test.add_graph_node(graph_id, "Category", number_of_edges) -graphs_test.prepare_edge_configuration() -for graph_id in range(X_test.shape[0]): - for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): - if node_id == 0: - graphs_test.add_graph_node_edge(graph_id, "User", "Item", "UserItem") - - if node_id == 1: - graphs_test.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") - graphs_test.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") - - if node_id == 2: - graphs_test.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") - - graphs_test.add_graph_node_property(graph_id, "User", "U_" + str(X_test[graph_id][0])) - graphs_test.add_graph_node_property(graph_id, "Item", "I_" + str(X_test[graph_id][1])) - graphs_test.add_graph_node_property(graph_id, "Category", "C_" + str(X_test[graph_id][2])) -graphs_test.encode() -print("Testing data produced") - -tm = MultiClassGraphTsetlinMachine( - args.number_of_clauses, - args.T, - args.s, - number_of_state_bits = args.number_of_state_bits, - depth=args.depth, - message_size=args.message_size, - message_bits=args.message_bits, - max_included_literals=args.max_included_literals, - double_hashing = args.double_hashing -) - -for i in range(args.epochs): - start_training = time() - tm.fit(graphs_train, Y_train, epochs=1, incremental=True) - stop_training = time() - - start_testing = time() - result_test = 100*(tm.predict(graphs_test) == Y_test).mean() - stop_testing = time() - - result_train = 100*(tm.predict(graphs_train) == Y_train).mean() - - print("%d %.2f %.2f %.2f %.2f" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing)) - -weights = tm.get_state()[1].reshape(2, -1) -for i in range(tm.number_of_clauses): - print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') - l = [] - for k in range(args.hypervector_size * 2): - if tm.ta_action(0, i, k): - if k < args.hypervector_size: - l.append("x%d" % (k)) - else: - l.append("NOT x%d" % (k - args.hypervector_size)) - - for k in range(args.message_size * 2): - if tm.ta_action(1, i, k): - if k < args.message_size: - l.append("c%d" % (k)) - else: - l.append("NOT c%d" % (k - args.message_size)) - - print(" AND ".join(l)) - -# print(graphs_test.hypervectors) -# print(tm.hypervectors) -# print(graphs_test.edge_type_id) \ No newline at end of file diff --git a/examples/applications/recommendation/__pycache__/prepare_dataset.cpython-310.pyc b/examples/applications/recommendation/__pycache__/prepare_dataset.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..334918248b0038345364fc10337498871cad89c2 GIT binary patch literal 1415 zcmZ8hOK&SR7_~i*q)D2lZBzsjC}Kqr_jbjmssQQ2T^1yekh&T9j(w+-PR4`n^bsYi zvds^GRm+ZFfcPukvg)1{E6z75QZKf~kI%>7^LWheZjYh;@uMy-Q^x+H&GRO(`3j%= z41;2dSL~d(vp5&+9G%BXsOV>Qo~T$Qm{Y~SXVdf%H`rND<9{u}g1%Sy+-nRT8t*t~ zp5F^49{8Fh(Td#(&Q?st@3A%a(S5w)I1@NaR$`X4r=nmg{f)oRV5@VsJbGod^krR4 zyp?553njf=etaqIrM%LWl`}azmUFo@^$RB}?OqVTX}>)BPWp?9H|-4wCT~j|pDg=N z@Rzx}T8_W9Wl`3$YEct+Asc-%jYF@oMlEuml`3>|>2+c3ZRjkVwj@ez>(w+3Nn^{} zhn-7V6qUYMya}Tx2Qp=@>&i$KL<1!VL}f4;lGeyH3ULDm!w$hS@-1|YEi&5v&g>rY z_|NIFY?@rM|IVX>TSfV3u%AD*IW%i2av(4<1 zA|BRNr`sR^C`1mQEh!DTEG7keQYh~t{^WYTlv9hKqe*J~opI^QvoGX_)bWqM#FV$ko z?T45wJ+kHao0|qYw0h3iGdfsI9Vy*Pe!$1#NW{@djQKb3mq@kWxOSYm;R= qq%?t7&8__e>unwh`OGpIu&w#-=^X!wN`FD6c0__Mo)@|p^!^25{fROF literal 0 HcmV?d00001 diff --git a/examples/applications/recommendation/main_products.py b/examples/applications/recommendation/main_products.py new file mode 100644 index 00000000..03d5b641 --- /dev/null +++ b/examples/applications/recommendation/main_products.py @@ -0,0 +1,178 @@ +from GraphTsetlinMachine.graphs import Graphs +from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine +from time import time +import argparse +import pandas as pd +import numpy as np +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import LabelEncoder +import prepare_dataset + +def default_args(**kwargs): + parser = argparse.ArgumentParser() + parser.add_argument("--epochs", default=10, type=int) + parser.add_argument("--number-of-clauses", default=1000, type=int) + parser.add_argument("--T", default=10000, type=int) + parser.add_argument("--s", default=10.0, type=float) + parser.add_argument("--number-of-state-bits", default=8, type=int) + parser.add_argument("--depth", default=3, type=int) + parser.add_argument("--hypervector-size", default=4096, type=int) + parser.add_argument("--hypervector-bits", default=256, type=int) + parser.add_argument("--message-size", default=256, type=int) + parser.add_argument("--message-bits", default=2, type=int) + parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') + parser.add_argument("--noise", default=0.01, type=float) + parser.add_argument("--max-included-literals", default=10, type=int) + + args = parser.parse_args() + for key, value in kwargs.items(): + if key in args.__dict__: + setattr(args, key, value) + return args +args = default_args() + +data = prepare_dataset.aug_amazon_products() +print(data.head()) +le_user = LabelEncoder() +le_item = LabelEncoder() +le_category = LabelEncoder() +le_rating = LabelEncoder() +data['user_id'] = le_user.fit_transform(data['user_id']) +data['product_id'] = le_item.fit_transform(data['product_id']) +data['category'] = le_category.fit_transform(data['category']) +data['rating'] = le_rating.fit_transform(data['rating']) +x = data[['user_id', 'product_id', 'category']].values +y = data['rating'].values +X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42) +print("X_train shape:", X_train.shape) +print("y_train shape:", Y_train.shape) +print("X_test shape:", X_test.shape) +print("y_test shape:", Y_test.shape) +users = data['user_id'].unique() +items = data['product_id'].unique() +categories = data['category'].unique() +# Initialize Graphs with symbols for GTM +number_of_nodes = 3 +symbols = [] +symbols = ["U_" + str(u) for u in users] + ["I_" + str(i) for i in items] + ["C_" + str(c) for c in categories] +print("Symbols: ",len(symbols)) + +# Train data +graphs_train = Graphs( + X_train.shape[0], + symbols=symbols, + hypervector_size=args.hypervector_size, + hypervector_bits=args.hypervector_bits, + double_hashing = args.double_hashing +) +for graph_id in range(X_train.shape[0]): + graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes) +graphs_train.prepare_node_configuration() +for graph_id in range(X_train.shape[0]): + for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): + number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1 + if node_id == 0: + graphs_train.add_graph_node(graph_id, "User", number_of_edges) + elif node_id == 1: + graphs_train.add_graph_node(graph_id, "Item", number_of_edges) + else: + graphs_train.add_graph_node(graph_id, "Category", number_of_edges) +graphs_train.prepare_edge_configuration() +for graph_id in range(X_train.shape[0]): + for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): + if node_id == 0: + graphs_train.add_graph_node_edge(graph_id, "User", "Item", "UserItem") + + if node_id == 1: + graphs_train.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") + graphs_train.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") + + if node_id == 2: + graphs_train.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") + + graphs_train.add_graph_node_property(graph_id, "User", "U_" + str(X_train[graph_id][0])) + graphs_train.add_graph_node_property(graph_id, "Item", "I_" + str(X_train[graph_id][1])) + graphs_train.add_graph_node_property(graph_id, "Category", "C_" + str(X_train[graph_id][2])) +graphs_train.encode() +print("Training data produced") + +# Test data +graphs_test = Graphs(X_test.shape[0], init_with=graphs_train) +for graph_id in range(X_test.shape[0]): + graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes) +graphs_test.prepare_node_configuration() +for graph_id in range(X_test.shape[0]): + for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): + number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1 + if node_id == 0: + graphs_test.add_graph_node(graph_id, "User", number_of_edges) + elif node_id == 1: + graphs_test.add_graph_node(graph_id, "Item", number_of_edges) + else: + graphs_test.add_graph_node(graph_id, "Category", number_of_edges) +graphs_test.prepare_edge_configuration() +for graph_id in range(X_test.shape[0]): + for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): + if node_id == 0: + graphs_test.add_graph_node_edge(graph_id, "User", "Item", "UserItem") + + if node_id == 1: + graphs_test.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") + graphs_test.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") + + if node_id == 2: + graphs_test.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") + + graphs_test.add_graph_node_property(graph_id, "User", "U_" + str(X_test[graph_id][0])) + graphs_test.add_graph_node_property(graph_id, "Item", "I_" + str(X_test[graph_id][1])) + graphs_test.add_graph_node_property(graph_id, "Category", "C_" + str(X_test[graph_id][2])) +graphs_test.encode() +print("Testing data produced") + +tm = MultiClassGraphTsetlinMachine( + args.number_of_clauses, + args.T, + args.s, + number_of_state_bits = args.number_of_state_bits, + depth=args.depth, + message_size=args.message_size, + message_bits=args.message_bits, + max_included_literals=args.max_included_literals, + double_hashing = args.double_hashing +) + +for i in range(args.epochs): + start_training = time() + tm.fit(graphs_train, Y_train, epochs=1, incremental=True) + stop_training = time() + + start_testing = time() + result_test = 100*(tm.predict(graphs_test) == Y_test).mean() + stop_testing = time() + + result_train = 100*(tm.predict(graphs_train) == Y_train).mean() + print("%d %.2f %.2f %.2f %.2f" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing)) + +# weights = tm.get_state()[1].reshape(2, -1) +# for i in range(tm.number_of_clauses): +# print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') +# l = [] +# for k in range(args.hypervector_size * 2): +# if tm.ta_action(0, i, k): +# if k < args.hypervector_size: +# l.append("x%d" % (k)) +# else: +# l.append("NOT x%d" % (k - args.hypervector_size)) + +# for k in range(args.message_size * 2): +# if tm.ta_action(1, i, k): +# if k < args.message_size: +# l.append("c%d" % (k)) +# else: +# l.append("NOT c%d" % (k - args.message_size)) + +# print(" AND ".join(l)) + +# print(graphs_test.hypervectors) +# print(tm.hypervectors) +# print(graphs_test.edge_type_id) \ No newline at end of file diff --git a/examples/applications/recommendation/prepare_dataset.py b/examples/applications/recommendation/prepare_dataset.py new file mode 100644 index 00000000..582b569d --- /dev/null +++ b/examples/applications/recommendation/prepare_dataset.py @@ -0,0 +1,145 @@ +import pandas as pd +import kagglehub +import numpy as np + +np.random.seed(42) + +def amazon_products(): + print("Creating training data") + path = kagglehub.dataset_download("karkavelrajaj/amazon-sales-dataset") + print("Path to dataset files:", path) + data_file = path + "/amazon.csv" + org_data = pd.read_csv(data_file) + print("Original data shape:", org_data.shape) + return org_data[['product_id', 'category', 'user_id', 'rating']] + +def aug_amazon_products(): + org_data = amazon_products() + org_data['rating'] = pd.to_numeric(org_data['rating'], errors='coerce') # Coerce invalid values to NaN + org_data.dropna(subset=['rating'], inplace=True) # Drop rows with NaN ratings + org_data['rating'] = org_data['rating'].astype(int) + # Expand the dataset 10 times + data = pd.concat([org_data] * 10, ignore_index=True) + # Shuffle the expanded dataset + data = data.sample(frac=1, random_state=42).reset_index(drop=True) + # Add noise + # Define the noise ratio + noise_ratio = 0.1 # 10% noise + # Select rows to apply noise + num_noisy_rows = int(noise_ratio * len(data)) + noisy_indices = np.random.choice(data.index, size=num_noisy_rows, replace=False) + # Add noise to ratings + data.loc[noisy_indices, 'rating'] = np.random.choice(range(1, 6), size=num_noisy_rows) + # Add noise to categories + unique_categories = data['category'].unique() + data.loc[noisy_indices, 'category'] = np.random.choice(unique_categories, size=num_noisy_rows) + # Print a preview of the noisy and expanded dataset + print("Expanded data shape:", data.shape) + print("Data preview:\n", data.head()) + return data + +def artificial(): + num_users = 5 # Number of unique users + num_items =10 # Number of unique items + num_categories = 5 # Number of unique categories + num_interactions = 1000 # Number of user-item interactions + # Generate random ratings (e.g., between 1 and 5) + ratings = np.random.choice(range(1, 3), num_interactions) + # Generate random user-item interactions + user_ids = np.random.choice(range(num_users), num_interactions) + item_ids = np.random.choice(range(num_items), num_interactions) + categories = np.random.choice(range(num_categories), num_interactions) + + data = pd.DataFrame({ + 'user_id': user_ids, + 'product_id': item_ids, + 'category': categories, + 'rating': ratings + }) + return data + +def artificial_with_user_pref(): + num_users = 100 # Number of unique users + num_items = 50 # Number of unique items + num_categories = 50 # Number of unique categories + num_interactions = 1000 # Number of user-item interactions + noise_ratio = 0.01 # Percentage of noisy interactions + + # Generate user preferences: each user prefers 1-3 random categories + user_preferences = { + user: np.random.choice(range(num_categories), size=np.random.randint(1, 4), replace=False) + for user in range(num_users) + } + + # Assign each item to a category + item_categories = {item: np.random.choice(range(num_categories)) for item in range(num_items)} + + # Generate interactions + user_ids = np.random.choice(range(num_users), num_interactions) + item_ids = np.random.choice(range(num_items), num_interactions) + + # Generate ratings based on the pattern + ratings = [] + for user, item in zip(user_ids, item_ids): + item_category = item_categories[item] + if item_category in user_preferences[user]: + ratings.append(np.random.choice([3, 4])) # High rating for preferred categories + else: + ratings.append(np.random.choice([1, 2])) # Low rating otherwise + + # Introduce noise + num_noisy = int(noise_ratio * num_interactions) + noisy_indices = np.random.choice(range(num_interactions), num_noisy, replace=False) + for idx in noisy_indices: + ratings[idx] = np.random.choice(range(1, 6)) # Replace with random rating + + # Combine into a DataFrame + data = pd.DataFrame({ + 'user_id': user_ids, + 'product_id': item_ids, + 'category': [item_categories[item] for item in item_ids], + 'rating': ratings + }) + return data + +def artificial_pattered(): + num_users = 100 # Number of unique users + num_items = 50 # Number of unique items + num_categories = 5 # Number of unique categories + num_interactions = 10000 # Number of user-item interactions + noise_ratio = 0.01 # Percentage of noisy interactions + + # Step 1: Define deterministic user preferences + user_preferences = {user: user % num_categories for user in range(num_users)} + + # Step 2: Assign items to categories in a cyclic pattern + item_categories = {item: item % num_categories for item in range(num_items)} + + # Step 3: Generate deterministic interactions + user_ids = np.arange(num_interactions) % num_users # Cycle through users + item_ids = np.arange(num_interactions) % num_items # Cycle through items + + # Step 4: Generate ratings based on the pattern + ratings = [] + for user, item in zip(user_ids, item_ids): + preferred_category = user_preferences[user] + item_category = item_categories[item] + if item_category == preferred_category: + ratings.append(5) # High rating for preferred category + else: + ratings.append(1) # Low rating otherwise + + # Step 5: Introduce noise + num_noisy = int(noise_ratio * num_interactions) + noisy_indices = np.random.choice(range(num_interactions), num_noisy, replace=False) + for idx in noisy_indices: + ratings[idx] = np.random.choice(range(1, 6)) # Replace with random rating + + # Step 6: Create a DataFrame + data = pd.DataFrame({ + 'user_id': user_ids, + 'product_id': item_ids, + 'category': [item_categories[item] for item in item_ids], + 'rating': ratings + }) + return data \ No newline at end of file From 801b7e399fd3050920f2b1d988dad94ac6925c88 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Fri, 20 Dec 2024 13:27:26 +0000 Subject: [PATCH 16/35] update --- .../__pycache__/prepare_dataset.cpython-310.pyc | Bin 0 -> 4044 bytes .../main.py} | 13 +++++++++---- .../prepare_dataset.py | 8 +++++--- .../{ => products_recommendation}/test.ipynb | 0 .../__pycache__/prepare_dataset.cpython-310.pyc | Bin 1415 -> 0 bytes 5 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc rename examples/applications/{recommendation/main_products.py => products_recommendation/main.py} (94%) rename examples/applications/{recommendation => products_recommendation}/prepare_dataset.py (97%) rename examples/applications/{ => products_recommendation}/test.ipynb (100%) delete mode 100644 examples/applications/recommendation/__pycache__/prepare_dataset.cpython-310.pyc diff --git a/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc b/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6947f000940c5e0a9189502c8ece11503498ecf GIT binary patch literal 4044 zcma)9&2uA16`$_;&}j5w*%rzgieLg%5LLFRP!zB+yMf(xQhay=36Pj9Vxn%#qm^g0 zJ>y+ljJSBKk{nzGl`99En=ko;`bKd8U*SekNq(*tXIX!zm)Q@;%PV-&yAZ+>Y+!9M^UJrm`L(wk!G->T>N^%6D9nX zgfGhY^+g~m_$>?ehSjc~VJ2&{OY;0HN`_e!_m(piMlm%+n1!Pk9){{+ z_*f29*bn<_;chre;*~TU$aIAaQkjifuZP*ra+a78P%Ljp=)O6sOw3oi>EluJzKVKL z91e`ta=H@^<;}LEgP}^qUN`GRLi^n?lf6V8=+a&)6{$RBylQ*e9jYkKbopV}>kZ`2 z-n+UnaiAlTC-EQ&h2}#{f6{PoC{c9? zp9T1mtm3QYp}Le=GIa5n%>E0F%<5B4kvC-5KD3Zor|%-CdyV9Y@}pmaeLc5DP1KLIm|G3$f0k*8`f{+K=?NK#Kb&&m_M<`?qs}s$!eag zvIVh#QHutRg!skHvu`1CMf;$=ZX#7zwwd;%Qi)36Y;*0Ud+%bWbt#I6gRm>ls3>7l zje2o{OhmDe`)7=lTszw;?CPotW0CB3(hSgosUuV}{Kp@fAHDjw(bL--r?5+-k<=w5 z(@aU3XfyQ{{3xomQS;vZ5OYXz3Ajzo;~}AwX2%>-3X@e;#uy!BNhjXhl`86Lk5-IB z?S*M}FqGOR6eGMC_(DVmak`=;0xJU0_CUt4*h!+U)UF9iyI84*!Gi=d?#0ogJ*mi5 zRe@-Gia>_o0BK!`lPHxPDx5^u;YNoP2OX6>Np-DgV^U0>>iJ@-&ZO`nnVNbiM1$sB z4EK7SXJAbwlRghoWgcs>23ufF-r|nk;7zv7tNe?s${nV@2a`)Mr_CwhF);rl8nZAL zd<PF$z06IfY%$k=!Dc zq@h%j#_L&QB#%;e$nRPYzVQwp`{VNaR$gAR#z7wBPVO&Rk1h3fUOFxk?|_wp9?n8y z&PTUr^c7K^>a$XA=iG2y#c&j@OMt0NSgx8^v0`mpGcluAREX`ss-?WPZav!1{Nplt z_MU~98)E*cpL-NpUJ?riV)eXkSgnAVz#g8NRQ&)g^<{`IG1d8pAV%O>#FMT20q#25CF{ULwEv5r%qmf*Ufs5aZ~3`#EmO0Yuh#~GN9uYOxQ z1g=x2ZezqOe%8Sc8IHT*tqt^~K7?m+zWj;z$!KK?uFjJv+cD_InJ2eb*TGNWAicFZ z9sijq2~j3W^3p_EIgj#q66FaiqB0&Kv}w6r1aivNPcdFQR1@mwXinW%n|S>ho|Ja= zc}v}-?$=0|(kAT&f?g)gS0O&*BW)x3`0pk}k22wn8E}XD(x1(K7mJyyyAP97rsqs? z&eWypG#nbN52Cc#O-Yl|`c3Qe?c>Er^)g1agPFZB)UyVy;U8^}BAiILy5NSQsOk+F zsdXAQr+!F^TO?i~@f`@=Fw8=UlS;-o57dvT?+%F{k)S;)w+(j91xca;_@cMg^ReMD3sX@ag`_98REi)nux$^nG4S3jp6NC z!unD{SOraug9&j}@=6{&w z&;fe!*P%8cr#i@~pOue;3v#N9xfyb57;>7+=Rg|s#rdbG#?`ANz7G*KUPS9khN6Sg z)J2Qzs4hxWyE$s3WzE!VQ64{`8LueK6nawxEo=1R3^H&{#{nqC=c18wSJdxm6;o_R z+`neg$D|KQ5C?3iUsCgb7QcFfOrDwf%?llYO#K?-Pt^Dg#QzKCnOd$~Rm-SgbJbIC z(X4NiFtu!mj}C~Upc_{ewA!NnYioF+sB~=b`F-y|{gy_&LxSp9Js>f?Q2dTwO#v@n zk)}R+Qv%Fv>9*{aUAOC#vh_{rRjU)wMHOa2$CE1v?NWTI;T literal 0 HcmV?d00001 diff --git a/examples/applications/recommendation/main_products.py b/examples/applications/products_recommendation/main.py similarity index 94% rename from examples/applications/recommendation/main_products.py rename to examples/applications/products_recommendation/main.py index 03d5b641..e045607a 100644 --- a/examples/applications/recommendation/main_products.py +++ b/examples/applications/products_recommendation/main.py @@ -10,19 +10,19 @@ def default_args(**kwargs): parser = argparse.ArgumentParser() - parser.add_argument("--epochs", default=10, type=int) + parser.add_argument("--epochs", default=100, type=int) parser.add_argument("--number-of-clauses", default=1000, type=int) parser.add_argument("--T", default=10000, type=int) parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) - parser.add_argument("--depth", default=3, type=int) + parser.add_argument("--depth", default=1, type=int) parser.add_argument("--hypervector-size", default=4096, type=int) parser.add_argument("--hypervector-bits", default=256, type=int) parser.add_argument("--message-size", default=256, type=int) parser.add_argument("--message-bits", default=2, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) - parser.add_argument("--max-included-literals", default=10, type=int) + parser.add_argument("--max-included-literals", default=3, type=int) args = parser.parse_args() for key, value in kwargs.items(): @@ -30,9 +30,14 @@ def default_args(**kwargs): setattr(args, key, value) return args args = default_args() +np.random.seed(42) +# data = prepare_dataset.amazon_products() data = prepare_dataset.aug_amazon_products() -print(data.head()) +# data = prepare_dataset.artificial() +# data = prepare_dataset.artificial_with_user_pref() +# data = prepare_dataset.artificial_pattered() +# print(data.head()) le_user = LabelEncoder() le_item = LabelEncoder() le_category = LabelEncoder() diff --git a/examples/applications/recommendation/prepare_dataset.py b/examples/applications/products_recommendation/prepare_dataset.py similarity index 97% rename from examples/applications/recommendation/prepare_dataset.py rename to examples/applications/products_recommendation/prepare_dataset.py index 582b569d..20162f01 100644 --- a/examples/applications/recommendation/prepare_dataset.py +++ b/examples/applications/products_recommendation/prepare_dataset.py @@ -2,7 +2,6 @@ import kagglehub import numpy as np -np.random.seed(42) def amazon_products(): print("Creating training data") @@ -14,6 +13,7 @@ def amazon_products(): return org_data[['product_id', 'category', 'user_id', 'rating']] def aug_amazon_products(): + np.random.seed(42) org_data = amazon_products() org_data['rating'] = pd.to_numeric(org_data['rating'], errors='coerce') # Coerce invalid values to NaN org_data.dropna(subset=['rating'], inplace=True) # Drop rows with NaN ratings @@ -24,7 +24,7 @@ def aug_amazon_products(): data = data.sample(frac=1, random_state=42).reset_index(drop=True) # Add noise # Define the noise ratio - noise_ratio = 0.1 # 10% noise + noise_ratio = 0.01 # 10% noise # Select rows to apply noise num_noisy_rows = int(noise_ratio * len(data)) noisy_indices = np.random.choice(data.index, size=num_noisy_rows, replace=False) @@ -35,10 +35,10 @@ def aug_amazon_products(): data.loc[noisy_indices, 'category'] = np.random.choice(unique_categories, size=num_noisy_rows) # Print a preview of the noisy and expanded dataset print("Expanded data shape:", data.shape) - print("Data preview:\n", data.head()) return data def artificial(): + np.random.seed(42) num_users = 5 # Number of unique users num_items =10 # Number of unique items num_categories = 5 # Number of unique categories @@ -59,6 +59,7 @@ def artificial(): return data def artificial_with_user_pref(): + np.random.seed(42) num_users = 100 # Number of unique users num_items = 50 # Number of unique items num_categories = 50 # Number of unique categories @@ -103,6 +104,7 @@ def artificial_with_user_pref(): return data def artificial_pattered(): + np.random.seed(42) num_users = 100 # Number of unique users num_items = 50 # Number of unique items num_categories = 5 # Number of unique categories diff --git a/examples/applications/test.ipynb b/examples/applications/products_recommendation/test.ipynb similarity index 100% rename from examples/applications/test.ipynb rename to examples/applications/products_recommendation/test.ipynb diff --git a/examples/applications/recommendation/__pycache__/prepare_dataset.cpython-310.pyc b/examples/applications/recommendation/__pycache__/prepare_dataset.cpython-310.pyc deleted file mode 100644 index 334918248b0038345364fc10337498871cad89c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1415 zcmZ8hOK&SR7_~i*q)D2lZBzsjC}Kqr_jbjmssQQ2T^1yekh&T9j(w+-PR4`n^bsYi zvds^GRm+ZFfcPukvg)1{E6z75QZKf~kI%>7^LWheZjYh;@uMy-Q^x+H&GRO(`3j%= z41;2dSL~d(vp5&+9G%BXsOV>Qo~T$Qm{Y~SXVdf%H`rND<9{u}g1%Sy+-nRT8t*t~ zp5F^49{8Fh(Td#(&Q?st@3A%a(S5w)I1@NaR$`X4r=nmg{f)oRV5@VsJbGod^krR4 zyp?553njf=etaqIrM%LWl`}azmUFo@^$RB}?OqVTX}>)BPWp?9H|-4wCT~j|pDg=N z@Rzx}T8_W9Wl`3$YEct+Asc-%jYF@oMlEuml`3>|>2+c3ZRjkVwj@ez>(w+3Nn^{} zhn-7V6qUYMya}Tx2Qp=@>&i$KL<1!VL}f4;lGeyH3ULDm!w$hS@-1|YEi&5v&g>rY z_|NIFY?@rM|IVX>TSfV3u%AD*IW%i2av(4<1 zA|BRNr`sR^C`1mQEh!DTEG7keQYh~t{^WYTlv9hKqe*J~opI^QvoGX_)bWqM#FV$ko z?T45wJ+kHao0|qYw0h3iGdfsI9Vy*Pe!$1#NW{@djQKb3mq@kWxOSYm;R= qq%?t7&8__e>unwh`OGpIu&w#-=^X!wN`FD6c0__Mo)@|p^!^25{fROF From fdfb81fb27cab73377e095984cdd5bede8002401 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Tue, 24 Dec 2024 11:30:06 +0000 Subject: [PATCH 17/35] add TMClassifier --- .../prepare_dataset.cpython-310.pyc | Bin 4044 -> 4044 bytes .../products_recommendation/baseline.py | 114 ++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 examples/applications/products_recommendation/baseline.py diff --git a/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc b/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc index d6947f000940c5e0a9189502c8ece11503498ecf..7742db56bf6d6b0f6731787e01a26b4ff39baead 100644 GIT binary patch delta 19 ZcmX>je@31wpO=@50SKatH*y`~2LLh>1kL~e delta 19 ZcmX>je@31wpO=@50SF@UH*y`~2LLhb1jhgX diff --git a/examples/applications/products_recommendation/baseline.py b/examples/applications/products_recommendation/baseline.py new file mode 100644 index 00000000..f1d37271 --- /dev/null +++ b/examples/applications/products_recommendation/baseline.py @@ -0,0 +1,114 @@ +import logging +import argparse +import numpy as np +from tmu.models.classification.vanilla_classifier import TMClassifier +from tmu.tools import BenchmarkTimer +from tmu.util.cuda_profiler import CudaProfiler +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import LabelEncoder +import prepare_dataset +from tmu.data import MNIST +from sklearn.preprocessing import OneHotEncoder +import pandas as pd + +_LOGGER = logging.getLogger(__name__) + +def metrics(args): + return dict( + accuracy=[], + train_time=[], + test_time=[], + args=vars(args) + ) + +def prepare_data(): + # Step 1: Load and encode dataset + data = prepare_dataset.aug_amazon_products() + le_user = LabelEncoder() + le_item = LabelEncoder() + le_category = LabelEncoder() + le_rating = LabelEncoder() + data['user_id'] = le_user.fit_transform(data['user_id']) + data['product_id'] = le_item.fit_transform(data['product_id']) + data['category'] = le_category.fit_transform(data['category']) + data['rating'] = le_rating.fit_transform(data['rating']) + + x = data[['user_id', 'product_id', 'category']].values + y = data['rating'].values + # Step 3: One-hot encode features + encoder = OneHotEncoder(sparse_output=False, dtype=np.uint32) + x_binary = encoder.fit_transform(x) + + # Verify feature dimensions + print(f"Number of features after one-hot encoding: {x_binary.shape[1]}") + + x_train, x_test, y_train, y_test = train_test_split(x_binary, y, test_size=0.2, random_state=42) + + y_train = y_train.astype(np.uint32) + y_test = y_test.astype(np.uint32) + + print("x_train shape:", x_train.shape, "dtype:", x_train.dtype) + print("y_train shape:", y_train.shape, "dtype:", y_train.dtype) + print("x_test shape:", x_test.shape, "dtype:", x_test.dtype) + print("y_test shape:", y_test.shape, "dtype:", y_test.dtype) + + return x_train, x_test, y_train, y_test + +def main(args): + experiment_results = metrics(args) + X_train, X_test, Y_train, Y_test = prepare_data() + + tm = TMClassifier( + number_of_clauses=args.num_clauses, + T=args.T, + s=args.s, + max_included_literals=args.max_included_literals, + platform=args.platform, + weighted_clauses=args.weighted_clauses + ) + _LOGGER.info(f"Running {TMClassifier} for {args.epochs}") + for epoch in range(args.epochs): + benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") + with benchmark_total: + benchmark1 = BenchmarkTimer(logger=None, text="Training Time") + with benchmark1: + res = tm.fit( + X_train, + Y_train, + ) + + experiment_results["train_time"].append(benchmark1.elapsed()) + benchmark2 = BenchmarkTimer(logger=None, text="Testing Time") + with benchmark2: + result = 100 * (tm.predict(X_test) == Y_test).mean() + experiment_results["accuracy"].append(result) + experiment_results["test_time"].append(benchmark2.elapsed()) + + _LOGGER.info(f"Epoch: {epoch + 1}, Accuracy: {result:.2f}, Training Time: {benchmark1.elapsed():.2f}s, " + f"Testing Time: {benchmark2.elapsed():.2f}s") + + if args.platform == "CUDA": + CudaProfiler().print_timings(benchmark=benchmark_total) + + return experiment_results + + +def default_args(**kwargs): + parser = argparse.ArgumentParser() + parser.add_argument("--num_clauses", default=2000, type=int) + parser.add_argument("--T", default=5000, type=int) + parser.add_argument("--s", default=10.0, type=float) + parser.add_argument("--max_included_literals", default=32, type=int) + parser.add_argument("--platform", default="CPU_sparse", type=str, choices=["CPU", "CPU_sparse", "CUDA"]) + parser.add_argument("--weighted_clauses", default=True, type=bool) + parser.add_argument("--epochs", default=60, type=int) + args = parser.parse_args() + for key, value in kwargs.items(): + if key in args.__dict__: + setattr(args, key, value) + return args + + +if __name__ == "__main__": + results = main(default_args()) + _LOGGER.info(results) \ No newline at end of file From 3168dc7c889fafd0adada91d73b99dd983d64a5b Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Tue, 24 Dec 2024 17:12:57 +0000 Subject: [PATCH 18/35] update --- .../prepare_dataset.cpython-310.pyc | Bin 4044 -> 5371 bytes .../products_recommendation/baseline.py | 49 ++------------- .../products_recommendation/main.py | 59 ++++++------------ .../prepare_dataset.py | 44 +++++++++++-- 4 files changed, 64 insertions(+), 88 deletions(-) diff --git a/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc b/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc index 7742db56bf6d6b0f6731787e01a26b4ff39baead..a91b323f497e840523e521b9b11aa792ba20e8ba 100644 GIT binary patch literal 5371 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 diff --git a/examples/applications/products_recommendation/baseline.py b/examples/applications/products_recommendation/baseline.py index f1d37271..b390764a 100644 --- a/examples/applications/products_recommendation/baseline.py +++ b/examples/applications/products_recommendation/baseline.py @@ -1,15 +1,9 @@ import logging import argparse -import numpy as np from tmu.models.classification.vanilla_classifier import TMClassifier from tmu.tools import BenchmarkTimer from tmu.util.cuda_profiler import CudaProfiler -from sklearn.model_selection import train_test_split -from sklearn.preprocessing import LabelEncoder import prepare_dataset -from tmu.data import MNIST -from sklearn.preprocessing import OneHotEncoder -import pandas as pd _LOGGER = logging.getLogger(__name__) @@ -21,42 +15,11 @@ def metrics(args): args=vars(args) ) -def prepare_data(): - # Step 1: Load and encode dataset - data = prepare_dataset.aug_amazon_products() - le_user = LabelEncoder() - le_item = LabelEncoder() - le_category = LabelEncoder() - le_rating = LabelEncoder() - data['user_id'] = le_user.fit_transform(data['user_id']) - data['product_id'] = le_item.fit_transform(data['product_id']) - data['category'] = le_category.fit_transform(data['category']) - data['rating'] = le_rating.fit_transform(data['rating']) - - x = data[['user_id', 'product_id', 'category']].values - y = data['rating'].values - # Step 3: One-hot encode features - encoder = OneHotEncoder(sparse_output=False, dtype=np.uint32) - x_binary = encoder.fit_transform(x) - - # Verify feature dimensions - print(f"Number of features after one-hot encoding: {x_binary.shape[1]}") - - x_train, x_test, y_train, y_test = train_test_split(x_binary, y, test_size=0.2, random_state=42) - - y_train = y_train.astype(np.uint32) - y_test = y_test.astype(np.uint32) - - print("x_train shape:", x_train.shape, "dtype:", x_train.dtype) - print("y_train shape:", y_train.shape, "dtype:", y_train.dtype) - print("x_test shape:", x_test.shape, "dtype:", x_test.dtype) - print("y_test shape:", y_test.shape, "dtype:", y_test.dtype) - - return x_train, x_test, y_train, y_test - def main(args): experiment_results = metrics(args) - X_train, X_test, Y_train, Y_test = prepare_data() + data = prepare_dataset.aug_amazon_products() + x, y = prepare_dataset.construct_x_y(data) + X_train, X_test, Y_train, Y_test = prepare_dataset.one_hot_encoding(x,y) tm = TMClassifier( number_of_clauses=args.num_clauses, @@ -92,23 +55,21 @@ def main(args): return experiment_results - def default_args(**kwargs): parser = argparse.ArgumentParser() parser.add_argument("--num_clauses", default=2000, type=int) - parser.add_argument("--T", default=5000, type=int) + parser.add_argument("--T", default=10000, type=int) parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--max_included_literals", default=32, type=int) parser.add_argument("--platform", default="CPU_sparse", type=str, choices=["CPU", "CPU_sparse", "CUDA"]) parser.add_argument("--weighted_clauses", default=True, type=bool) - parser.add_argument("--epochs", default=60, type=int) + parser.add_argument("--epochs", default=10, type=int) args = parser.parse_args() for key, value in kwargs.items(): if key in args.__dict__: setattr(args, key, value) return args - if __name__ == "__main__": results = main(default_args()) _LOGGER.info(results) \ No newline at end of file diff --git a/examples/applications/products_recommendation/main.py b/examples/applications/products_recommendation/main.py index e045607a..41168a93 100644 --- a/examples/applications/products_recommendation/main.py +++ b/examples/applications/products_recommendation/main.py @@ -2,16 +2,13 @@ from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine from time import time import argparse -import pandas as pd import numpy as np -from sklearn.model_selection import train_test_split -from sklearn.preprocessing import LabelEncoder import prepare_dataset def default_args(**kwargs): parser = argparse.ArgumentParser() - parser.add_argument("--epochs", default=100, type=int) - parser.add_argument("--number-of-clauses", default=1000, type=int) + parser.add_argument("--epochs", default=10, type=int) + parser.add_argument("--number-of-clauses", default=2000, type=int) parser.add_argument("--T", default=10000, type=int) parser.add_argument("--s", default=10.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) @@ -22,7 +19,7 @@ def default_args(**kwargs): parser.add_argument("--message-bits", default=2, type=int) parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) - parser.add_argument("--max-included-literals", default=3, type=int) + parser.add_argument("--max-included-literals", default=23, type=int) args = parser.parse_args() for key, value in kwargs.items(): @@ -38,21 +35,8 @@ def default_args(**kwargs): # data = prepare_dataset.artificial_with_user_pref() # data = prepare_dataset.artificial_pattered() # print(data.head()) -le_user = LabelEncoder() -le_item = LabelEncoder() -le_category = LabelEncoder() -le_rating = LabelEncoder() -data['user_id'] = le_user.fit_transform(data['user_id']) -data['product_id'] = le_item.fit_transform(data['product_id']) -data['category'] = le_category.fit_transform(data['category']) -data['rating'] = le_rating.fit_transform(data['rating']) -x = data[['user_id', 'product_id', 'category']].values -y = data['rating'].values -X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42) -print("X_train shape:", X_train.shape) -print("y_train shape:", Y_train.shape) -print("X_test shape:", X_test.shape) -print("y_test shape:", Y_test.shape) +x, y = prepare_dataset.construct_x_y(data) +X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) users = data['user_id'].unique() items = data['product_id'].unique() categories = data['category'].unique() @@ -160,24 +144,21 @@ def default_args(**kwargs): # weights = tm.get_state()[1].reshape(2, -1) # for i in range(tm.number_of_clauses): -# print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') -# l = [] -# for k in range(args.hypervector_size * 2): -# if tm.ta_action(0, i, k): -# if k < args.hypervector_size: -# l.append("x%d" % (k)) -# else: -# l.append("NOT x%d" % (k - args.hypervector_size)) - -# for k in range(args.message_size * 2): -# if tm.ta_action(1, i, k): -# if k < args.message_size: -# l.append("c%d" % (k)) -# else: -# l.append("NOT c%d" % (k - args.message_size)) - -# print(" AND ".join(l)) - +# print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') +# l = [] +# for k in range(args.hypervector_size * 2): +# if tm.ta_action(0, i, k): +# if k < args.hypervector_size: +# l.append("x%d" % (k)) +# else: +# l.append("NOT x%d" % (k - args.hypervector_size)) +# for k in range(args.message_size * 2): +# if tm.ta_action(1, i, k): +# if k < args.message_size: +# l.append("c%d" % (k)) +# else: +# l.append("NOT c%d" % (k - args.message_size)) +# print(" AND ".join(l)) # print(graphs_test.hypervectors) # print(tm.hypervectors) # print(graphs_test.edge_type_id) \ No newline at end of file diff --git a/examples/applications/products_recommendation/prepare_dataset.py b/examples/applications/products_recommendation/prepare_dataset.py index 20162f01..dfe1b50b 100644 --- a/examples/applications/products_recommendation/prepare_dataset.py +++ b/examples/applications/products_recommendation/prepare_dataset.py @@ -1,7 +1,9 @@ import pandas as pd import kagglehub import numpy as np - +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import LabelEncoder +from sklearn.preprocessing import OneHotEncoder def amazon_products(): print("Creating training data") @@ -12,7 +14,7 @@ def amazon_products(): print("Original data shape:", org_data.shape) return org_data[['product_id', 'category', 'user_id', 'rating']] -def aug_amazon_products(): +def aug_amazon_products(noise_ratio = 0.01): np.random.seed(42) org_data = amazon_products() org_data['rating'] = pd.to_numeric(org_data['rating'], errors='coerce') # Coerce invalid values to NaN @@ -23,8 +25,6 @@ def aug_amazon_products(): # Shuffle the expanded dataset data = data.sample(frac=1, random_state=42).reset_index(drop=True) # Add noise - # Define the noise ratio - noise_ratio = 0.01 # 10% noise # Select rows to apply noise num_noisy_rows = int(noise_ratio * len(data)) noisy_indices = np.random.choice(data.index, size=num_noisy_rows, replace=False) @@ -144,4 +144,38 @@ def artificial_pattered(): 'category': [item_categories[item] for item in item_ids], 'rating': ratings }) - return data \ No newline at end of file + return data + +def construct_x_y(data): + le_user = LabelEncoder() + le_item = LabelEncoder() + le_category = LabelEncoder() + le_rating = LabelEncoder() + data['user_id'] = le_user.fit_transform(data['user_id']) + data['product_id'] = le_item.fit_transform(data['product_id']) + data['category'] = le_category.fit_transform(data['category']) + data['rating'] = le_rating.fit_transform(data['rating']) + x = data[['user_id', 'product_id', 'category']].values + y = data['rating'].values + return x,y + +def split_train_test(x,y): + X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42) + print("X_train shape:", X_train.shape) + print("y_train shape:", Y_train.shape) + print("X_test shape:", X_test.shape) + print("y_test shape:", Y_test.shape) + return X_train, X_test, Y_train, Y_test + +def one_hot_encoding(x,y): + encoder = OneHotEncoder(sparse_output=False, dtype=np.uint32) + x_binary = encoder.fit_transform(x) + # print(f"Number of features after one-hot encoding: {x_binary.shape[1]}") + x_train, x_test, y_train, y_test = split_train_test(x_binary, y) + y_train = y_train.astype(np.uint32) + y_test = y_test.astype(np.uint32) + print("x_train shape:", x_train.shape, "dtype:", x_train.dtype) + print("y_train shape:", y_train.shape, "dtype:", y_train.dtype) + print("x_test shape:", x_test.shape, "dtype:", x_test.dtype) + print("y_test shape:", y_test.shape, "dtype:", y_test.dtype) + return x_train, x_test, y_train, y_test \ No newline at end of file From e2232de44dfe505f19dfe0dffd298571cc485df3 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Tue, 24 Dec 2024 18:54:16 +0000 Subject: [PATCH 19/35] add graph nn --- .../prepare_dataset.cpython-310.pyc | Bin 5371 -> 5371 bytes .../products_recommendation/graph_nn.py | 106 ++++++++++++++++++ .../{main.py => graph_tm.py} | 0 .../{baseline.py => tm_classifier.py} | 0 4 files changed, 106 insertions(+) create mode 100644 examples/applications/products_recommendation/graph_nn.py rename examples/applications/products_recommendation/{main.py => graph_tm.py} (100%) rename examples/applications/products_recommendation/{baseline.py => tm_classifier.py} (100%) diff --git a/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc b/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc index a91b323f497e840523e521b9b11aa792ba20e8ba..8a2cd18398677e0c9bd2a85d805bb970ed3cb003 100644 GIT binary patch delta 19 ZcmeyZ`CF4KpO=@50SLNYZ{+$Y0suYN1{(kX delta 19 ZcmeyZ`CF4KpO=@50SE%0Y~=bV0suT-1=|1s diff --git a/examples/applications/products_recommendation/graph_nn.py b/examples/applications/products_recommendation/graph_nn.py new file mode 100644 index 00000000..fa78480d --- /dev/null +++ b/examples/applications/products_recommendation/graph_nn.py @@ -0,0 +1,106 @@ +import torch +import torch.nn.functional as F +from torch_geometric.data import Data +from torch_geometric.nn import GCNConv +from time import time +import prepare_dataset + +# Step 1: Dataset Preparation + +data = prepare_dataset.aug_amazon_products() +x, y = prepare_dataset.construct_x_y(data) +X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) + +# Graph Construction +num_users = len(data['user_id'].unique()) +num_items = len(data['product_id'].unique()) +num_categories = len(data['category'].unique()) +num_nodes = num_users + num_items + num_categories + +# Build edge list +edge_list = [] + +# User ↔ Item edges +for user, item in zip(X_train[:, 0], X_train[:, 1]): + edge_list.append((user, num_users + item)) # User to Item + edge_list.append((num_users + item, user)) # Item to User + +# Item ↔ Category edges +for item, category in zip(X_train[:, 1], X_train[:, 2]): + edge_list.append((num_users + item, num_users + num_items + category)) # Item to Category + edge_list.append((num_users + num_items + category, num_users + item)) # Category to Item + +# Create edge index for PyTorch Geometric +edge_index = torch.tensor(edge_list, dtype=torch.long).t() + +# Node features +node_features = torch.rand((num_nodes, 64), dtype=torch.float) + +# PyTorch Geometric Data object +graph_data = Data(x=node_features, edge_index=edge_index) + +# Step 2: Define GCN Model +class GCN(torch.nn.Module): + def __init__(self, input_dim, hidden_dim, output_dim): + super(GCN, self).__init__() + self.conv1 = GCNConv(input_dim, hidden_dim) + self.conv2 = GCNConv(hidden_dim, output_dim) + + def forward(self, x, edge_index): + x = self.conv1(x, edge_index) + x = F.relu(x) + x = self.conv2(x, edge_index) + return x + +# Initialize Model +model = GCN(input_dim=64, hidden_dim=128, output_dim=64) + +# Define optimizer +optimizer = torch.optim.Adam(model.parameters(), lr=0.01) + +# Convert train/test data to tensors +train_edges = torch.tensor( + [(user, num_users + item) for user, item in zip(X_train[:, 0], X_train[:, 1])], + dtype=torch.long +).t() +train_labels = torch.tensor(Y_train, dtype=torch.float) + +test_edges = torch.tensor( + [(user, num_users + item) for user, item in zip(X_test[:, 0], X_test[:, 1])], + dtype=torch.long +).t() +test_labels = torch.tensor(Y_test, dtype=torch.float) + +# Training Loop with Accuracy Logging +epochs = 1000 +for epoch in range(epochs): + start_time = time() + + # Training Phase + model.train() + optimizer.zero_grad() + out = model(graph_data.x, graph_data.edge_index) + + # User-item embeddings + user_embeddings = out[train_edges[0]] + item_embeddings = out[train_edges[1]] + predicted_ratings = (user_embeddings * item_embeddings).sum(dim=1) + + # Compute loss + loss = F.mse_loss(predicted_ratings, train_labels) + loss.backward() + optimizer.step() + + # Testing Phase + model.eval() + with torch.no_grad(): + out = model(graph_data.x, graph_data.edge_index) + test_user_embeddings = out[test_edges[0]] + test_item_embeddings = out[test_edges[1]] + test_predicted_ratings = (test_user_embeddings * test_item_embeddings).sum(dim=1) + + # Compute accuracy + test_accuracy = ((test_predicted_ratings.round() == test_labels).float().mean().item()) * 100 + + elapsed_time = time() - start_time + print(f"Epoch {epoch + 1}/{epochs}, Loss: {loss.item():.4f}, Accuracy: {test_accuracy:.2f}%, Time: {elapsed_time:.2f}s") diff --git a/examples/applications/products_recommendation/main.py b/examples/applications/products_recommendation/graph_tm.py similarity index 100% rename from examples/applications/products_recommendation/main.py rename to examples/applications/products_recommendation/graph_tm.py diff --git a/examples/applications/products_recommendation/baseline.py b/examples/applications/products_recommendation/tm_classifier.py similarity index 100% rename from examples/applications/products_recommendation/baseline.py rename to examples/applications/products_recommendation/tm_classifier.py From c4546310371c7dbcb0ccad959223c087c0a6669c Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 25 Dec 2024 13:04:24 +0000 Subject: [PATCH 20/35] add main.bash --- .../experiment_results.csv | 6 + .../products_recommendation/graph_nn.py | 226 +++++++------- .../products_recommendation/graph_tm.py | 277 +++++++++--------- .../products_recommendation/main.sh | 16 + .../products_recommendation/test.ipynb | 271 ----------------- .../products_recommendation/tm_classifier.py | 73 +++-- 6 files changed, 323 insertions(+), 546 deletions(-) create mode 100644 examples/applications/products_recommendation/experiment_results.csv create mode 100644 examples/applications/products_recommendation/main.sh delete mode 100644 examples/applications/products_recommendation/test.ipynb diff --git a/examples/applications/products_recommendation/experiment_results.csv b/examples/applications/products_recommendation/experiment_results.csv new file mode 100644 index 00000000..d3f66d27 --- /dev/null +++ b/examples/applications/products_recommendation/experiment_results.csv @@ -0,0 +1,6 @@ +Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy +Graph NN,0.005,0,0,0,1000,CPU,0.03006434440612793,76.72131061553955 +GraphTM,0.005,10000,10.0,23,10,CUDA,34.547648191452026,98.46994535519126 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,89.6943154335022,76.63934426229508 +Graph NN,0.01,0,0,0,1000,CPU,0.01817464828491211,75.95628499984741 +GraphTM,0.01,10000,10.0,23,10,CUDA,34.95576763153076,98.44262295081967 diff --git a/examples/applications/products_recommendation/graph_nn.py b/examples/applications/products_recommendation/graph_nn.py index fa78480d..30292db9 100644 --- a/examples/applications/products_recommendation/graph_nn.py +++ b/examples/applications/products_recommendation/graph_nn.py @@ -1,106 +1,130 @@ +import argparse import torch import torch.nn.functional as F from torch_geometric.data import Data from torch_geometric.nn import GCNConv -from time import time import prepare_dataset - -# Step 1: Dataset Preparation - -data = prepare_dataset.aug_amazon_products() -x, y = prepare_dataset.construct_x_y(data) -X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) - -# Graph Construction -num_users = len(data['user_id'].unique()) -num_items = len(data['product_id'].unique()) -num_categories = len(data['category'].unique()) -num_nodes = num_users + num_items + num_categories - -# Build edge list -edge_list = [] - -# User ↔ Item edges -for user, item in zip(X_train[:, 0], X_train[:, 1]): - edge_list.append((user, num_users + item)) # User to Item - edge_list.append((num_users + item, user)) # Item to User - -# Item ↔ Category edges -for item, category in zip(X_train[:, 1], X_train[:, 2]): - edge_list.append((num_users + item, num_users + num_items + category)) # Item to Category - edge_list.append((num_users + num_items + category, num_users + item)) # Category to Item - -# Create edge index for PyTorch Geometric -edge_index = torch.tensor(edge_list, dtype=torch.long).t() - -# Node features -node_features = torch.rand((num_nodes, 64), dtype=torch.float) - -# PyTorch Geometric Data object -graph_data = Data(x=node_features, edge_index=edge_index) - -# Step 2: Define GCN Model -class GCN(torch.nn.Module): - def __init__(self, input_dim, hidden_dim, output_dim): - super(GCN, self).__init__() - self.conv1 = GCNConv(input_dim, hidden_dim) - self.conv2 = GCNConv(hidden_dim, output_dim) - - def forward(self, x, edge_index): - x = self.conv1(x, edge_index) - x = F.relu(x) - x = self.conv2(x, edge_index) - return x - -# Initialize Model -model = GCN(input_dim=64, hidden_dim=128, output_dim=64) - -# Define optimizer -optimizer = torch.optim.Adam(model.parameters(), lr=0.01) - -# Convert train/test data to tensors -train_edges = torch.tensor( - [(user, num_users + item) for user, item in zip(X_train[:, 0], X_train[:, 1])], - dtype=torch.long -).t() -train_labels = torch.tensor(Y_train, dtype=torch.float) - -test_edges = torch.tensor( - [(user, num_users + item) for user, item in zip(X_test[:, 0], X_test[:, 1])], - dtype=torch.long -).t() -test_labels = torch.tensor(Y_test, dtype=torch.float) - -# Training Loop with Accuracy Logging -epochs = 1000 -for epoch in range(epochs): - start_time = time() - - # Training Phase - model.train() - optimizer.zero_grad() - out = model(graph_data.x, graph_data.edge_index) - - # User-item embeddings - user_embeddings = out[train_edges[0]] - item_embeddings = out[train_edges[1]] - predicted_ratings = (user_embeddings * item_embeddings).sum(dim=1) - - # Compute loss - loss = F.mse_loss(predicted_ratings, train_labels) - loss.backward() - optimizer.step() - - # Testing Phase - model.eval() - with torch.no_grad(): - out = model(graph_data.x, graph_data.edge_index) - test_user_embeddings = out[test_edges[0]] - test_item_embeddings = out[test_edges[1]] - test_predicted_ratings = (test_user_embeddings * test_item_embeddings).sum(dim=1) - - # Compute accuracy - test_accuracy = ((test_predicted_ratings.round() == test_labels).float().mean().item()) * 100 - - elapsed_time = time() - start_time - print(f"Epoch {epoch + 1}/{epochs}, Loss: {loss.item():.4f}, Accuracy: {test_accuracy:.2f}%, Time: {elapsed_time:.2f}s") +from tmu.tools import BenchmarkTimer +import os +import pandas as pd + +def main(args): + results = [] + data = prepare_dataset.aug_amazon_products(noise_ratio = args.dataset_noise_ratio) + x, y = prepare_dataset.construct_x_y(data) + X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) + # Graph Construction + num_users = len(data['user_id'].unique()) + num_items = len(data['product_id'].unique()) + num_categories = len(data['category'].unique()) + num_nodes = num_users + num_items + num_categories + # Build edge list + edge_list = [] + # User ↔ Item edges + for user, item in zip(X_train[:, 0], X_train[:, 1]): + edge_list.append((user, num_users + item)) # User to Item + edge_list.append((num_users + item, user)) # Item to User + # Item ↔ Category edges + for item, category in zip(X_train[:, 1], X_train[:, 2]): + edge_list.append((num_users + item, num_users + num_items + category)) # Item to Category + edge_list.append((num_users + num_items + category, num_users + item)) # Category to Item + # Create edge index for PyTorch Geometric + edge_index = torch.tensor(edge_list, dtype=torch.long).t() + # Node features + node_features = torch.rand((num_nodes, 64), dtype=torch.float) + # PyTorch Geometric Data object + graph_data = Data(x=node_features, edge_index=edge_index) + # Step 2: Define GCN Model + class GCN(torch.nn.Module): + def __init__(self, input_dim, hidden_dim, output_dim): + super(GCN, self).__init__() + self.conv1 = GCNConv(input_dim, hidden_dim) + self.conv2 = GCNConv(hidden_dim, output_dim) + def forward(self, x, edge_index): + x = self.conv1(x, edge_index) + x = F.relu(x) + x = self.conv2(x, edge_index) + return x + # Initialize Model + model = GCN(input_dim=64, hidden_dim=128, output_dim=64) + # Define optimizer + optimizer = torch.optim.Adam(model.parameters(), lr=0.01) + # Convert train/test data to tensors + train_edges = torch.tensor( + [(user, num_users + item) for user, item in zip(X_train[:, 0], X_train[:, 1])], + dtype=torch.long + ).t() + train_labels = torch.tensor(Y_train, dtype=torch.float) + test_edges = torch.tensor( + [(user, num_users + item) for user, item in zip(X_test[:, 0], X_test[:, 1])], + dtype=torch.long + ).t() + test_labels = torch.tensor(Y_test, dtype=torch.float) + # Training Loop with Accuracy Logging + for epoch in range(args.epochs): + benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") + with benchmark_total: + benchmark1 = BenchmarkTimer(logger=None, text="Training Time") + with benchmark1: + # Training Phase + model.train() + optimizer.zero_grad() + out = model(graph_data.x, graph_data.edge_index) + # User-item embeddings + user_embeddings = out[train_edges[0]] + item_embeddings = out[train_edges[1]] + predicted_ratings = (user_embeddings * item_embeddings).sum(dim=1) + # Compute loss + loss = F.mse_loss(predicted_ratings, train_labels) + loss.backward() + optimizer.step() + train_time = benchmark1.elapsed() + # Testing Phase + benchmark2 = BenchmarkTimer(logger=None, text="Testing Time") + with benchmark2: + model.eval() + with torch.no_grad(): + out = model(graph_data.x, graph_data.edge_index) + test_user_embeddings = out[test_edges[0]] + test_item_embeddings = out[test_edges[1]] + test_predicted_ratings = (test_user_embeddings * test_item_embeddings).sum(dim=1) + # Compute accuracy + accuracy = ((test_predicted_ratings.round() == test_labels).float().mean().item()) * 100 + test_time = benchmark2.elapsed() + total_time = benchmark_total.elapsed() + # Append results for each epoch + results.append({ + "Algorithm": "Graph NN", + "Noise_Ratio": args.dataset_noise_ratio, + "T": 0, + "s": 0, + "Max_Included_Literals": 0, + "Epochs": args.epochs, + "Platform": args.platform, + "Total_Time": total_time, + "Accuracy": accuracy, + }) + + # Save results to CSV + results_df = pd.DataFrame(results) + results_file = "experiment_results.csv" + if os.path.exists(results_file): + results_df.to_csv(results_file, mode='a', index=False, header=False) + else: + results_df.to_csv(results_file, index=False) + print(f"Results saved to {results_file}") + + +def default_args(**kwargs): + parser = argparse.ArgumentParser() + parser.add_argument("--platform", default="CPU", type=str, choices=["CPU", "CUDA"]) + parser.add_argument("--epochs", default=1000, type=int) + parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) + args = parser.parse_args() + for key, value in kwargs.items(): + if key in args.__dict__: + setattr(args, key, value) + return args + +if __name__ == "__main__": + main(default_args()) \ No newline at end of file diff --git a/examples/applications/products_recommendation/graph_tm.py b/examples/applications/products_recommendation/graph_tm.py index 41168a93..0ec2171c 100644 --- a/examples/applications/products_recommendation/graph_tm.py +++ b/examples/applications/products_recommendation/graph_tm.py @@ -1,9 +1,145 @@ from GraphTsetlinMachine.graphs import Graphs from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine -from time import time import argparse import numpy as np import prepare_dataset +import pandas as pd +from tmu.tools import BenchmarkTimer +import os + +def main(args): + np.random.seed(42) + results = [] + data = prepare_dataset.aug_amazon_products(noise_ratio = args.dataset_noise_ratio) + x, y = prepare_dataset.construct_x_y(data) + X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) + users = data['user_id'].unique() + items = data['product_id'].unique() + categories = data['category'].unique() + # Initialize Graphs with symbols for GTM + number_of_nodes = 3 + symbols = [] + symbols = ["U_" + str(u) for u in users] + ["I_" + str(i) for i in items] + ["C_" + str(c) for c in categories] + print("Symbols: ",len(symbols)) + + # Train data + graphs_train = Graphs( + X_train.shape[0], + symbols=symbols, + hypervector_size=args.hypervector_size, + hypervector_bits=args.hypervector_bits, + double_hashing = args.double_hashing + ) + for graph_id in range(X_train.shape[0]): + graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes) + graphs_train.prepare_node_configuration() + for graph_id in range(X_train.shape[0]): + for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): + number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1 + if node_id == 0: + graphs_train.add_graph_node(graph_id, "User", number_of_edges) + elif node_id == 1: + graphs_train.add_graph_node(graph_id, "Item", number_of_edges) + else: + graphs_train.add_graph_node(graph_id, "Category", number_of_edges) + graphs_train.prepare_edge_configuration() + for graph_id in range(X_train.shape[0]): + for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): + if node_id == 0: + graphs_train.add_graph_node_edge(graph_id, "User", "Item", "UserItem") + + if node_id == 1: + graphs_train.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") + graphs_train.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") + + if node_id == 2: + graphs_train.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") + + graphs_train.add_graph_node_property(graph_id, "User", "U_" + str(X_train[graph_id][0])) + graphs_train.add_graph_node_property(graph_id, "Item", "I_" + str(X_train[graph_id][1])) + graphs_train.add_graph_node_property(graph_id, "Category", "C_" + str(X_train[graph_id][2])) + graphs_train.encode() + print("Training data produced") + + # Test data + graphs_test = Graphs(X_test.shape[0], init_with=graphs_train) + for graph_id in range(X_test.shape[0]): + graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes) + graphs_test.prepare_node_configuration() + for graph_id in range(X_test.shape[0]): + for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): + number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1 + if node_id == 0: + graphs_test.add_graph_node(graph_id, "User", number_of_edges) + elif node_id == 1: + graphs_test.add_graph_node(graph_id, "Item", number_of_edges) + else: + graphs_test.add_graph_node(graph_id, "Category", number_of_edges) + graphs_test.prepare_edge_configuration() + for graph_id in range(X_test.shape[0]): + for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): + if node_id == 0: + graphs_test.add_graph_node_edge(graph_id, "User", "Item", "UserItem") + + if node_id == 1: + graphs_test.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") + graphs_test.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") + + if node_id == 2: + graphs_test.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") + + graphs_test.add_graph_node_property(graph_id, "User", "U_" + str(X_test[graph_id][0])) + graphs_test.add_graph_node_property(graph_id, "Item", "I_" + str(X_test[graph_id][1])) + graphs_test.add_graph_node_property(graph_id, "Category", "C_" + str(X_test[graph_id][2])) + graphs_test.encode() + print("Testing data produced") + + tm = MultiClassGraphTsetlinMachine( + args.number_of_clauses, + args.T, + args.s, + number_of_state_bits = args.number_of_state_bits, + depth=args.depth, + message_size=args.message_size, + message_bits=args.message_bits, + max_included_literals=args.max_included_literals, + double_hashing = args.double_hashing + ) + + for epoch in range(args.epochs): + benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") + with benchmark_total: + benchmark1 = BenchmarkTimer(logger=None, text="Training Time") + with benchmark1: + tm.fit(graphs_train, Y_train, epochs=1, incremental=True) + train_time = benchmark1.elapsed() + + benchmark2 = BenchmarkTimer(logger=None, text="Testing Time") + with benchmark2: + accuracy = 100*(tm.predict(graphs_test) == Y_test).mean() + test_time = benchmark2.elapsed() + total_time = benchmark_total.elapsed() + # result_train = 100*(tm.predict(graphs_train) == Y_train).mean() + results.append({ + "Algorithm": "GraphTM", + "Noise_Ratio": args.dataset_noise_ratio, + "T": args.T, + "s": args.s, + "Max_Included_Literals": args.max_included_literals, + "Epochs": args.epochs, + "Platform": "CUDA", + "Total_Time": total_time, + "Accuracy": accuracy, + }) + + # Save results to CSV + results_df = pd.DataFrame(results) + results_file = "experiment_results.csv" + if os.path.exists(results_file): + results_df.to_csv(results_file, mode='a', index=False, header=False) + else: + results_df.to_csv(results_file, index=False) + print(f"Results saved to {results_file}") def default_args(**kwargs): parser = argparse.ArgumentParser() @@ -20,145 +156,12 @@ def default_args(**kwargs): parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') parser.add_argument("--noise", default=0.01, type=float) parser.add_argument("--max-included-literals", default=23, type=int) - + parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) args = parser.parse_args() for key, value in kwargs.items(): if key in args.__dict__: setattr(args, key, value) return args -args = default_args() -np.random.seed(42) - -# data = prepare_dataset.amazon_products() -data = prepare_dataset.aug_amazon_products() -# data = prepare_dataset.artificial() -# data = prepare_dataset.artificial_with_user_pref() -# data = prepare_dataset.artificial_pattered() -# print(data.head()) -x, y = prepare_dataset.construct_x_y(data) -X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) -users = data['user_id'].unique() -items = data['product_id'].unique() -categories = data['category'].unique() -# Initialize Graphs with symbols for GTM -number_of_nodes = 3 -symbols = [] -symbols = ["U_" + str(u) for u in users] + ["I_" + str(i) for i in items] + ["C_" + str(c) for c in categories] -print("Symbols: ",len(symbols)) - -# Train data -graphs_train = Graphs( - X_train.shape[0], - symbols=symbols, - hypervector_size=args.hypervector_size, - hypervector_bits=args.hypervector_bits, - double_hashing = args.double_hashing -) -for graph_id in range(X_train.shape[0]): - graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes) -graphs_train.prepare_node_configuration() -for graph_id in range(X_train.shape[0]): - for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): - number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1 - if node_id == 0: - graphs_train.add_graph_node(graph_id, "User", number_of_edges) - elif node_id == 1: - graphs_train.add_graph_node(graph_id, "Item", number_of_edges) - else: - graphs_train.add_graph_node(graph_id, "Category", number_of_edges) -graphs_train.prepare_edge_configuration() -for graph_id in range(X_train.shape[0]): - for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): - if node_id == 0: - graphs_train.add_graph_node_edge(graph_id, "User", "Item", "UserItem") - - if node_id == 1: - graphs_train.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") - graphs_train.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") - - if node_id == 2: - graphs_train.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") - - graphs_train.add_graph_node_property(graph_id, "User", "U_" + str(X_train[graph_id][0])) - graphs_train.add_graph_node_property(graph_id, "Item", "I_" + str(X_train[graph_id][1])) - graphs_train.add_graph_node_property(graph_id, "Category", "C_" + str(X_train[graph_id][2])) -graphs_train.encode() -print("Training data produced") - -# Test data -graphs_test = Graphs(X_test.shape[0], init_with=graphs_train) -for graph_id in range(X_test.shape[0]): - graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes) -graphs_test.prepare_node_configuration() -for graph_id in range(X_test.shape[0]): - for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): - number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1 - if node_id == 0: - graphs_test.add_graph_node(graph_id, "User", number_of_edges) - elif node_id == 1: - graphs_test.add_graph_node(graph_id, "Item", number_of_edges) - else: - graphs_test.add_graph_node(graph_id, "Category", number_of_edges) -graphs_test.prepare_edge_configuration() -for graph_id in range(X_test.shape[0]): - for node_id in range(graphs_test.number_of_graph_nodes[graph_id]): - if node_id == 0: - graphs_test.add_graph_node_edge(graph_id, "User", "Item", "UserItem") - - if node_id == 1: - graphs_test.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") - graphs_test.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") - - if node_id == 2: - graphs_test.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") - - graphs_test.add_graph_node_property(graph_id, "User", "U_" + str(X_test[graph_id][0])) - graphs_test.add_graph_node_property(graph_id, "Item", "I_" + str(X_test[graph_id][1])) - graphs_test.add_graph_node_property(graph_id, "Category", "C_" + str(X_test[graph_id][2])) -graphs_test.encode() -print("Testing data produced") - -tm = MultiClassGraphTsetlinMachine( - args.number_of_clauses, - args.T, - args.s, - number_of_state_bits = args.number_of_state_bits, - depth=args.depth, - message_size=args.message_size, - message_bits=args.message_bits, - max_included_literals=args.max_included_literals, - double_hashing = args.double_hashing -) - -for i in range(args.epochs): - start_training = time() - tm.fit(graphs_train, Y_train, epochs=1, incremental=True) - stop_training = time() - - start_testing = time() - result_test = 100*(tm.predict(graphs_test) == Y_test).mean() - stop_testing = time() - - result_train = 100*(tm.predict(graphs_train) == Y_train).mean() - print("%d %.2f %.2f %.2f %.2f" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing)) -# weights = tm.get_state()[1].reshape(2, -1) -# for i in range(tm.number_of_clauses): -# print("Clause #%d W:(%d %d)" % (i, weights[0,i], weights[1,i]), end=' ') -# l = [] -# for k in range(args.hypervector_size * 2): -# if tm.ta_action(0, i, k): -# if k < args.hypervector_size: -# l.append("x%d" % (k)) -# else: -# l.append("NOT x%d" % (k - args.hypervector_size)) -# for k in range(args.message_size * 2): -# if tm.ta_action(1, i, k): -# if k < args.message_size: -# l.append("c%d" % (k)) -# else: -# l.append("NOT c%d" % (k - args.message_size)) -# print(" AND ".join(l)) -# print(graphs_test.hypervectors) -# print(tm.hypervectors) -# print(graphs_test.edge_type_id) \ No newline at end of file +if __name__ == "__main__": + main(default_args()) \ No newline at end of file diff --git a/examples/applications/products_recommendation/main.sh b/examples/applications/products_recommendation/main.sh new file mode 100644 index 00000000..8c7a22ad --- /dev/null +++ b/examples/applications/products_recommendation/main.sh @@ -0,0 +1,16 @@ +echo `date`, Setup the environment ... +set -e # exit if error + +models="graph_tm tm_classifier graph_nn" +dataset_noise_ratios="0.005 0.01 0.02 0.05 0.1 0.2" + +for N in $dataset_noise_ratios; do + echo `date`, Running Graph NN ... + python3 graph_nn.py --dataset_noise_ratio $N + + echo `date`, Running Graph Tsetlin Machine ... + python3 graph_tm.py --dataset_noise_ratio $N + + echo `date`, Running Tsetlin Machine Classifier ... + python3 tm_classifier.py --dataset_noise_ratio $N +done \ No newline at end of file diff --git a/examples/applications/products_recommendation/test.ipynb b/examples/applications/products_recommendation/test.ipynb deleted file mode 100644 index 1465bf14..00000000 --- a/examples/applications/products_recommendation/test.ipynb +++ /dev/null @@ -1,271 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.10/dist-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n", - "usage: ipykernel_launcher.py [-h] [--epochs EPOCHS]\n", - " [--number-of-clauses NUMBER_OF_CLAUSES] [--T T]\n", - " [--s S]\n", - " [--number-of-state-bits NUMBER_OF_STATE_BITS]\n", - " [--depth DEPTH]\n", - " [--hypervector-size HYPERVECTOR_SIZE]\n", - " [--hypervector-bits HYPERVECTOR_BITS]\n", - " [--message-size MESSAGE_SIZE]\n", - " [--message-bits MESSAGE_BITS] [--double-hashing]\n", - " [--noise NOISE]\n", - " [--max-included-literals MAX_INCLUDED_LITERALS]\n", - "ipykernel_launcher.py: error: unrecognized arguments: --f=/root/.local/share/jupyter/runtime/kernel-v306f6e67794e909fd94dbef768cafee2e613728cc.json\n" - ] - }, - { - "ename": "SystemExit", - "evalue": "2", - "output_type": "error", - "traceback": [ - "An exception has occurred, use %tb to see the full traceback.\n", - "\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m 2\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/root/.local/lib/python3.10/site-packages/IPython/core/interactiveshell.py:3585: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n", - " warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n" - ] - } - ], - "source": [ - "from GraphTsetlinMachine.graphs import Graphs\n", - "from GraphTsetlinMachine.tm import MultiClassGraphTsetlinMachine\n", - "from time import time\n", - "import argparse\n", - "import pandas as pd\n", - "import numpy as np\n", - "import kagglehub\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import LabelEncoder\n", - "\n", - "def default_args(**kwargs):\n", - " parser = argparse.ArgumentParser()\n", - " parser.add_argument(\"--epochs\", default=250, type=int)\n", - " parser.add_argument(\"--number-of-clauses\", default=10000, type=int)\n", - " parser.add_argument(\"--T\", default=10000, type=int)\n", - " parser.add_argument(\"--s\", default=10.0, type=float)\n", - " parser.add_argument(\"--number-of-state-bits\", default=8, type=int)\n", - " parser.add_argument(\"--depth\", default=1, type=int)\n", - " parser.add_argument(\"--hypervector-size\", default=4096, type=int)\n", - " parser.add_argument(\"--hypervector-bits\", default=256, type=int)\n", - " parser.add_argument(\"--message-size\", default=4096, type=int)\n", - " parser.add_argument(\"--message-bits\", default=256, type=int)\n", - " parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true')\n", - " parser.add_argument(\"--noise\", default=0.01, type=float)\n", - " parser.add_argument(\"--max-included-literals\", default=10, type=int)\n", - "\n", - " args = parser.parse_args()\n", - " for key, value in kwargs.items():\n", - " if key in args.__dict__:\n", - " setattr(args, key, value)\n", - " return args\n", - "\n", - "args = default_args()\n", - "\n", - "############################# real dataset ########################\n", - "\n", - "print(\"Creating training data\")\n", - "path = kagglehub.dataset_download(\"karkavelrajaj/amazon-sales-dataset\")\n", - "print(\"Path to dataset files:\", path)\n", - "data_file = path + \"/amazon.csv\" \n", - "org_data = pd.read_csv(data_file)\n", - "# print(\"Data preview:\", data.head())\n", - "org_data = org_data[['product_id', 'category', 'user_id', 'rating']]\n", - "#################################### expanded \n", - "org_data['rating'] = pd.to_numeric(org_data['rating'], errors='coerce') # Coerce invalid values to NaN\n", - "org_data.dropna(subset=['rating'], inplace=True) # Drop rows with NaN ratings\n", - "org_data['rating'] = org_data['rating'].astype(int)\n", - "# Expand the dataset 10 times\n", - "data = pd.concat([org_data] * 10, ignore_index=True)\n", - "\n", - "# Shuffle the expanded dataset\n", - "data = data.sample(frac=1, random_state=42).reset_index(drop=True)\n", - "\n", - "# Add noise\n", - "# Define the noise ratio\n", - "noise_ratio = 0.1 # 10% noise\n", - "\n", - "# Select rows to apply noise\n", - "num_noisy_rows = int(noise_ratio * len(data))\n", - "noisy_indices = np.random.choice(data.index, size=num_noisy_rows, replace=False)\n", - "\n", - "# Add noise to ratings\n", - "data.loc[noisy_indices, 'rating'] = np.random.choice(range(1, 6), size=num_noisy_rows)\n", - "\n", - "# Add noise to categories\n", - "unique_categories = data['category'].unique()\n", - "data.loc[noisy_indices, 'category'] = np.random.choice(unique_categories, size=num_noisy_rows)\n", - "\n", - "# Print a preview of the noisy and expanded dataset\n", - "print(\"Original data shape:\", org_data.shape)\n", - "print(\"Expanded data shape:\", data.shape)\n", - "print(\"Data preview:\\n\", data.head())\n", - "\n", - "print(data.head())\n", - " \n", - "le_user = LabelEncoder()\n", - "le_item = LabelEncoder()\n", - "le_category = LabelEncoder()\n", - "le_rating = LabelEncoder() \n", - "\n", - "data['user_id'] = le_user.fit_transform(data['user_id'])\n", - "data['product_id'] = le_item.fit_transform(data['product_id'])\n", - "data['category'] = le_category.fit_transform(data['category'])\n", - "data['rating'] = le_rating.fit_transform(data['rating'])\n", - "\n", - "x = data[['user_id', 'product_id', 'category']].values \n", - "y = data['rating'].values \n", - "\n", - "X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42)\n", - "\n", - "print(\"X_train shape:\", X_train.shape)\n", - "print(\"y_train shape:\", Y_train.shape)\n", - "print(\"X_test shape:\", X_test.shape)\n", - "print(\"y_test shape:\", Y_test.shape)\n", - "\n", - "users = data['user_id'].unique()\n", - "items = data['product_id'].unique()\n", - "categories = data['category'].unique()\n", - "\n", - "# Initialize Graphs with symbols for GTM\n", - "number_of_nodes = 3\n", - "symbols = []\n", - "symbols = [\"U_\" + str(u) for u in users] + [\"I_\" + str(i) for i in items] + [\"C_\" + str(c) for c in categories] \n", - "print(len(symbols))\n", - "# Train data\n", - "graphs_train = Graphs(\n", - " X_train.shape[0],\n", - " symbols=symbols,\n", - " hypervector_size=args.hypervector_size,\n", - " hypervector_bits=args.hypervector_bits,\n", - " double_hashing = args.double_hashing\n", - ")\n", - "for graph_id in range(X_train.shape[0]):\n", - " graphs_train.set_number_of_graph_nodes(graph_id, number_of_nodes)\n", - "graphs_train.prepare_node_configuration()\n", - "for graph_id in range(X_train.shape[0]):\n", - " for node_id in range(graphs_train.number_of_graph_nodes[graph_id]):\n", - " number_of_edges = 2 if node_id > 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1\n", - " if node_id == 0:\n", - " graphs_train.add_graph_node(graph_id, \"User\", number_of_edges)\n", - " elif node_id == 1:\n", - " graphs_train.add_graph_node(graph_id, \"Item\", number_of_edges)\n", - " else:\n", - " graphs_train.add_graph_node(graph_id, \"Category\", number_of_edges)\n", - "graphs_train.prepare_edge_configuration()\n", - "for graph_id in range(X_train.shape[0]):\n", - " for node_id in range(graphs_train.number_of_graph_nodes[graph_id]):\n", - " if node_id == 0:\n", - " graphs_train.add_graph_node_edge(graph_id, \"User\", \"Item\", \"UserItem\")\n", - " \n", - " if node_id == 1:\n", - " graphs_train.add_graph_node_edge(graph_id, \"Item\", \"Category\", \"ItemCategory\")\n", - " graphs_train.add_graph_node_edge(graph_id, \"Item\", \"User\", \"ItemUser\")\n", - " \n", - " if node_id == 2:\n", - " graphs_train.add_graph_node_edge(graph_id, \"Category\", \"Item\", \"CatrgoryItem\")\n", - "\n", - " graphs_train.add_graph_node_property(graph_id, \"User\", \"U_\" + str(X_train[graph_id][0]))\n", - " graphs_train.add_graph_node_property(graph_id, \"Item\", \"I_\" + str(X_train[graph_id][1]))\n", - " graphs_train.add_graph_node_property(graph_id, \"Category\", \"C_\" + str(X_train[graph_id][2]))\n", - "graphs_train.encode()\n", - "print(\"Training data produced\")\n", - "\n", - "# Test data\n", - "graphs_test = Graphs(X_test.shape[0], init_with=graphs_train)\n", - "for graph_id in range(X_test.shape[0]):\n", - " graphs_test.set_number_of_graph_nodes(graph_id, number_of_nodes)\n", - "graphs_test.prepare_node_configuration()\n", - "for graph_id in range(X_test.shape[0]):\n", - " for node_id in range(graphs_test.number_of_graph_nodes[graph_id]):\n", - " number_of_edges = 2 if node_id > 0 and node_id < graphs_test.number_of_graph_nodes[graph_id]-1 else 1\n", - " if node_id == 0:\n", - " graphs_test.add_graph_node(graph_id, \"User\", number_of_edges)\n", - " elif node_id == 1:\n", - " graphs_test.add_graph_node(graph_id, \"Item\", number_of_edges)\n", - " else:\n", - " graphs_test.add_graph_node(graph_id, \"Category\", number_of_edges)\n", - "graphs_test.prepare_edge_configuration()\n", - "for graph_id in range(X_test.shape[0]):\n", - " for node_id in range(graphs_test.number_of_graph_nodes[graph_id]):\n", - " if node_id == 0:\n", - " graphs_test.add_graph_node_edge(graph_id, \"User\", \"Item\", \"UserItem\")\n", - " \n", - " if node_id == 1:\n", - " graphs_test.add_graph_node_edge(graph_id, \"Item\", \"Category\", \"ItemCategory\")\n", - " graphs_test.add_graph_node_edge(graph_id, \"Item\", \"User\", \"ItemUser\")\n", - " \n", - " if node_id == 2:\n", - " graphs_test.add_graph_node_edge(graph_id, \"Category\", \"Item\", \"CatrgoryItem\")\n", - "\n", - " graphs_test.add_graph_node_property(graph_id, \"User\", \"U_\" + str(X_test[graph_id][0]))\n", - " graphs_test.add_graph_node_property(graph_id, \"Item\", \"I_\" + str(X_test[graph_id][1]))\n", - " graphs_test.add_graph_node_property(graph_id, \"Category\", \"C_\" + str(X_test[graph_id][2]))\n", - "graphs_test.encode()\n", - "print(\"Testing data produced\")\n", - "\n", - "tm = MultiClassGraphTsetlinMachine(\n", - " args.number_of_clauses,\n", - " args.T,\n", - " args.s,\n", - " number_of_state_bits = args.number_of_state_bits,\n", - " depth=args.depth,\n", - " message_size=args.message_size,\n", - " message_bits=args.message_bits,\n", - " max_included_literals=args.max_included_literals,\n", - " double_hashing = args.double_hashing\n", - ")\n", - "\n", - "for i in range(args.epochs):\n", - " start_training = time()\n", - " tm.fit(graphs_train, Y_train, epochs=1, incremental=True)\n", - " stop_training = time()\n", - "\n", - " start_testing = time()\n", - " result_test = 100*(tm.predict(graphs_test) == Y_test).mean()\n", - " stop_testing = time()\n", - "\n", - " result_train = 100*(tm.predict(graphs_train) == Y_train).mean()\n", - "\n", - " print(\"%d %.2f %.2f %.2f %.2f\" % (i, result_train, result_test, stop_training-start_training, stop_testing-start_testing))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/applications/products_recommendation/tm_classifier.py b/examples/applications/products_recommendation/tm_classifier.py index b390764a..1a2928d0 100644 --- a/examples/applications/products_recommendation/tm_classifier.py +++ b/examples/applications/products_recommendation/tm_classifier.py @@ -1,60 +1,59 @@ -import logging import argparse from tmu.models.classification.vanilla_classifier import TMClassifier from tmu.tools import BenchmarkTimer -from tmu.util.cuda_profiler import CudaProfiler import prepare_dataset +import pandas as pd +import os -_LOGGER = logging.getLogger(__name__) - -def metrics(args): - return dict( - accuracy=[], - train_time=[], - test_time=[], - args=vars(args) - ) - -def main(args): - experiment_results = metrics(args) - data = prepare_dataset.aug_amazon_products() +def main(args): + results = [] + data = prepare_dataset.aug_amazon_products(noise_ratio = args.dataset_noise_ratio) x, y = prepare_dataset.construct_x_y(data) X_train, X_test, Y_train, Y_test = prepare_dataset.one_hot_encoding(x,y) - tm = TMClassifier( number_of_clauses=args.num_clauses, T=args.T, s=args.s, max_included_literals=args.max_included_literals, platform=args.platform, - weighted_clauses=args.weighted_clauses + weighted_clauses=args.weighted_clauses, ) - _LOGGER.info(f"Running {TMClassifier} for {args.epochs}") + for epoch in range(args.epochs): benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") with benchmark_total: benchmark1 = BenchmarkTimer(logger=None, text="Training Time") with benchmark1: - res = tm.fit( - X_train, - Y_train, - ) - - experiment_results["train_time"].append(benchmark1.elapsed()) + tm.fit(X_train, Y_train) + train_time = benchmark1.elapsed() benchmark2 = BenchmarkTimer(logger=None, text="Testing Time") with benchmark2: - result = 100 * (tm.predict(X_test) == Y_test).mean() - experiment_results["accuracy"].append(result) - experiment_results["test_time"].append(benchmark2.elapsed()) - - _LOGGER.info(f"Epoch: {epoch + 1}, Accuracy: {result:.2f}, Training Time: {benchmark1.elapsed():.2f}s, " - f"Testing Time: {benchmark2.elapsed():.2f}s") - - if args.platform == "CUDA": - CudaProfiler().print_timings(benchmark=benchmark_total) - - return experiment_results + accuracy = 100 * (tm.predict(X_test) == Y_test).mean() + test_time = benchmark2.elapsed() + total_time = benchmark_total.elapsed() + + # Append results for each epoch + results.append({ + "Algorithm": "TMClassifier", + "Noise_Ratio": args.dataset_noise_ratio, + "T": args.T, + "s": args.s, + "Max_Included_Literals": args.max_included_literals, + "Epochs": args.epochs, + "Platform": args.platform, + "Total_Time": total_time, + "Accuracy": accuracy, + }) + # Save results to CSV + results_df = pd.DataFrame(results) + results_file = "experiment_results.csv" + if os.path.exists(results_file): + results_df.to_csv(results_file, mode='a', index=False, header=False) + else: + results_df.to_csv(results_file, index=False) + print(f"Results saved to {results_file}") + def default_args(**kwargs): parser = argparse.ArgumentParser() parser.add_argument("--num_clauses", default=2000, type=int) @@ -64,6 +63,7 @@ def default_args(**kwargs): parser.add_argument("--platform", default="CPU_sparse", type=str, choices=["CPU", "CPU_sparse", "CUDA"]) parser.add_argument("--weighted_clauses", default=True, type=bool) parser.add_argument("--epochs", default=10, type=int) + parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) args = parser.parse_args() for key, value in kwargs.items(): if key in args.__dict__: @@ -71,5 +71,4 @@ def default_args(**kwargs): return args if __name__ == "__main__": - results = main(default_args()) - _LOGGER.info(results) \ No newline at end of file + main(default_args()) \ No newline at end of file From 84d8012259f3a253f102b6321f508a1da474743d Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Wed, 25 Dec 2024 15:40:00 +0000 Subject: [PATCH 21/35] add results --- .../experiment_results.csv | 6 ------ examples/recomm_system/README.md | 2 ++ .../prepare_dataset.cpython-310.pyc | Bin examples/recomm_system/experiment_results.csv | 19 ++++++++++++++++++ .../graph_nn.py | 0 .../graph_tm.py | 0 .../main.sh | 0 .../prepare_dataset.py | 0 .../tm_classifier.py | 0 9 files changed, 21 insertions(+), 6 deletions(-) delete mode 100644 examples/applications/products_recommendation/experiment_results.csv create mode 100644 examples/recomm_system/README.md rename examples/{applications/products_recommendation => recomm_system}/__pycache__/prepare_dataset.cpython-310.pyc (100%) create mode 100644 examples/recomm_system/experiment_results.csv rename examples/{applications/products_recommendation => recomm_system}/graph_nn.py (100%) rename examples/{applications/products_recommendation => recomm_system}/graph_tm.py (100%) rename examples/{applications/products_recommendation => recomm_system}/main.sh (100%) rename examples/{applications/products_recommendation => recomm_system}/prepare_dataset.py (100%) rename examples/{applications/products_recommendation => recomm_system}/tm_classifier.py (100%) diff --git a/examples/applications/products_recommendation/experiment_results.csv b/examples/applications/products_recommendation/experiment_results.csv deleted file mode 100644 index d3f66d27..00000000 --- a/examples/applications/products_recommendation/experiment_results.csv +++ /dev/null @@ -1,6 +0,0 @@ -Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy -Graph NN,0.005,0,0,0,1000,CPU,0.03006434440612793,76.72131061553955 -GraphTM,0.005,10000,10.0,23,10,CUDA,34.547648191452026,98.46994535519126 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,89.6943154335022,76.63934426229508 -Graph NN,0.01,0,0,0,1000,CPU,0.01817464828491211,75.95628499984741 -GraphTM,0.01,10000,10.0,23,10,CUDA,34.95576763153076,98.44262295081967 diff --git a/examples/recomm_system/README.md b/examples/recomm_system/README.md new file mode 100644 index 00000000..e7fa211a --- /dev/null +++ b/examples/recomm_system/README.md @@ -0,0 +1,2 @@ +cd examples/recomm_system/ +bash main.sh \ No newline at end of file diff --git a/examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc b/examples/recomm_system/__pycache__/prepare_dataset.cpython-310.pyc similarity index 100% rename from examples/applications/products_recommendation/__pycache__/prepare_dataset.cpython-310.pyc rename to examples/recomm_system/__pycache__/prepare_dataset.cpython-310.pyc diff --git a/examples/recomm_system/experiment_results.csv b/examples/recomm_system/experiment_results.csv new file mode 100644 index 00000000..cb6e80f7 --- /dev/null +++ b/examples/recomm_system/experiment_results.csv @@ -0,0 +1,19 @@ +Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy +Graph NN,0.005,0,0,0,1000,CPU,0.03006434440612793,76.72131061553955 +GraphTM,0.005,10000,10.0,23,10,CUDA,34.547648191452026,98.46994535519126 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,89.6943154335022,76.63934426229508 +Graph NN,0.01,0,0,0,1000,CPU,0.01817464828491211,75.95628499984741 +GraphTM,0.01,10000,10.0,23,10,CUDA,34.95576763153076,98.44262295081967 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,96.10501098632812,74.93169398907104 +Graph NN,0.02,0,0,0,1000,CPU,0.03073263168334961,81.22950792312622 +GraphTM,0.02,10000,10.0,23,10,CUDA,36.0724892616272,97.43169398907104 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,95.67133641242981,72.40437158469946 +Graph NN,0.05,0,0,0,1000,CPU,0.014258623123168945,83.52459073066711 +GraphTM,0.05,10000,10.0,23,10,CUDA,38.86628317832947,95.0 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.7427487373352,64.65163934426229 +Graph NN,0.1,0,0,0,1000,CPU,0.022305965423583984,73.33333492279053 +GraphTM,0.1,10000,10.0,23,10,CUDA,37.45086216926575,90.08196721311475 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,90.45554423332214,49.8292349726776 +Graph NN,0.2,0,0,0,1000,CPU,0.03204679489135742,59.863388538360596 +GraphTM,0.2,10000,10.0,23,10,CUDA,16.268279790878296,78.77049180327869 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,96.16712856292725,20.184426229508194 diff --git a/examples/applications/products_recommendation/graph_nn.py b/examples/recomm_system/graph_nn.py similarity index 100% rename from examples/applications/products_recommendation/graph_nn.py rename to examples/recomm_system/graph_nn.py diff --git a/examples/applications/products_recommendation/graph_tm.py b/examples/recomm_system/graph_tm.py similarity index 100% rename from examples/applications/products_recommendation/graph_tm.py rename to examples/recomm_system/graph_tm.py diff --git a/examples/applications/products_recommendation/main.sh b/examples/recomm_system/main.sh similarity index 100% rename from examples/applications/products_recommendation/main.sh rename to examples/recomm_system/main.sh diff --git a/examples/applications/products_recommendation/prepare_dataset.py b/examples/recomm_system/prepare_dataset.py similarity index 100% rename from examples/applications/products_recommendation/prepare_dataset.py rename to examples/recomm_system/prepare_dataset.py diff --git a/examples/applications/products_recommendation/tm_classifier.py b/examples/recomm_system/tm_classifier.py similarity index 100% rename from examples/applications/products_recommendation/tm_classifier.py rename to examples/recomm_system/tm_classifier.py From d68ae7153845b1ed2f09ebf2b2726a9e21444b99 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Thu, 26 Dec 2024 16:01:53 +0000 Subject: [PATCH 22/35] fair comparisons --- examples/recomm_system/experiment_results.csv | 36 +++++++++++++++++++ examples/recomm_system/graph_nn.py | 12 +++---- examples/recomm_system/graph_tm.py | 10 +++--- examples/recomm_system/tm_classifier.py | 10 +++--- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/examples/recomm_system/experiment_results.csv b/examples/recomm_system/experiment_results.csv index cb6e80f7..957f7701 100644 --- a/examples/recomm_system/experiment_results.csv +++ b/examples/recomm_system/experiment_results.csv @@ -17,3 +17,39 @@ TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,90.45554423332214,49.8292349726776 Graph NN,0.2,0,0,0,1000,CPU,0.03204679489135742,59.863388538360596 GraphTM,0.2,10000,10.0,23,10,CUDA,16.268279790878296,78.77049180327869 TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,96.16712856292725,20.184426229508194 +Graph NN,0.005,0,0,0,1000,CPU,0.0168764591217041,76.85792446136475 +GraphTM,0.005,10000,10.0,23,10,CUDA,31.40691065788269,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,88.05298614501953,76.74180327868852 +Graph NN,0.01,0,0,0,1000,CPU,0.01720118522644043,87.4316930770874 +GraphTM,0.01,10000,10.0,23,10,CUDA,31.529547214508057,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,89.19472336769104,74.93169398907104 +Graph NN,0.02,0,0,0,1000,CPU,0.014032602310180664,78.36065292358398 +GraphTM,0.02,10000,10.0,23,10,CUDA,32.8007595539093,97.62295081967213 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,94.56675243377686,72.6775956284153 +Graph NN,0.05,0,0,0,1000,CPU,0.016784191131591797,76.88524723052979 +GraphTM,0.05,10000,10.0,23,10,CUDA,34.84256434440613,94.75409836065573 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.4975814819336,64.1051912568306 +Graph NN,0.1,0,0,0,1000,CPU,0.014883041381835938,70.54644823074341 +GraphTM,0.1,10000,10.0,23,10,CUDA,36.750433683395386,89.97267759562841 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,96.35110449790955,50.341530054644814 +Graph NN,0.2,0,0,0,1000,CPU,0.03427433967590332,61.50273084640503 +GraphTM,0.2,10000,10.0,23,10,CUDA,39.63756251335144,79.01639344262294 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,97.00698733329773,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,370.7295939922333,87.5683069229126 +GraphTM,0.005,10000,10.0,23,10,CUDA,342.7878243923187,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,954.4101324081421,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,304.6031119823456,86.74863576889038 +GraphTM,0.01,10000,10.0,23,10,CUDA,346.8704605102539,98.25136612021858 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,978.3629264831543,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,403.2585175037384,75.30054450035095 +GraphTM,0.02,10000,10.0,23,10,CUDA,353.39254236221313,97.65027322404372 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.3300836086273,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,398.8085067272186,93.8524603843689 +GraphTM,0.05,10000,10.0,23,10,CUDA,368.16111874580383,94.59016393442623 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,960.4506890773773,63.661202185792355 +Graph NN,0.1,0,0,0,20000,CPU,388.4886665344238,75.43715834617615 +GraphTM,0.1,10000,10.0,23,10,CUDA,340.63327074050903,90.43715846994536 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,972.1077370643616,49.35109289617486 +Graph NN,0.2,0,0,0,20000,CPU,438.5506749153137,64.04371857643127 +GraphTM,0.2,10000,10.0,23,10,CUDA,357.2651107311249,77.89617486338798 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,948.7157049179077,20.116120218579233 diff --git a/examples/recomm_system/graph_nn.py b/examples/recomm_system/graph_nn.py index 30292db9..9ef5fbed 100644 --- a/examples/recomm_system/graph_nn.py +++ b/examples/recomm_system/graph_nn.py @@ -61,9 +61,9 @@ def forward(self, x, edge_index): ).t() test_labels = torch.tensor(Y_test, dtype=torch.float) # Training Loop with Accuracy Logging - for epoch in range(args.epochs): - benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") - with benchmark_total: + benchmark_total = BenchmarkTimer(logger=None, text="Epochs Time") + with benchmark_total: + for epoch in range(args.epochs): benchmark1 = BenchmarkTimer(logger=None, text="Training Time") with benchmark1: # Training Phase @@ -91,8 +91,8 @@ def forward(self, x, edge_index): # Compute accuracy accuracy = ((test_predicted_ratings.round() == test_labels).float().mean().item()) * 100 test_time = benchmark2.elapsed() - total_time = benchmark_total.elapsed() - # Append results for each epoch + total_time = benchmark_total.elapsed() + # Append results for each epoch results.append({ "Algorithm": "Graph NN", "Noise_Ratio": args.dataset_noise_ratio, @@ -118,7 +118,7 @@ def forward(self, x, edge_index): def default_args(**kwargs): parser = argparse.ArgumentParser() parser.add_argument("--platform", default="CPU", type=str, choices=["CPU", "CUDA"]) - parser.add_argument("--epochs", default=1000, type=int) + parser.add_argument("--epochs", default=20000, type=int) parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) args = parser.parse_args() for key, value in kwargs.items(): diff --git a/examples/recomm_system/graph_tm.py b/examples/recomm_system/graph_tm.py index 0ec2171c..d1464c75 100644 --- a/examples/recomm_system/graph_tm.py +++ b/examples/recomm_system/graph_tm.py @@ -106,9 +106,9 @@ def main(args): double_hashing = args.double_hashing ) - for epoch in range(args.epochs): - benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") - with benchmark_total: + benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") + with benchmark_total: + for epoch in range(args.epochs): benchmark1 = BenchmarkTimer(logger=None, text="Training Time") with benchmark1: tm.fit(graphs_train, Y_train, epochs=1, incremental=True) @@ -118,8 +118,8 @@ def main(args): with benchmark2: accuracy = 100*(tm.predict(graphs_test) == Y_test).mean() test_time = benchmark2.elapsed() - total_time = benchmark_total.elapsed() - # result_train = 100*(tm.predict(graphs_train) == Y_train).mean() + total_time = benchmark_total.elapsed() + # result_train = 100*(tm.predict(graphs_train) == Y_train).mean() results.append({ "Algorithm": "GraphTM", "Noise_Ratio": args.dataset_noise_ratio, diff --git a/examples/recomm_system/tm_classifier.py b/examples/recomm_system/tm_classifier.py index 1a2928d0..876f8c4f 100644 --- a/examples/recomm_system/tm_classifier.py +++ b/examples/recomm_system/tm_classifier.py @@ -19,9 +19,9 @@ def main(args): weighted_clauses=args.weighted_clauses, ) - for epoch in range(args.epochs): - benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") - with benchmark_total: + benchmark_total = BenchmarkTimer(logger=None, text="Epoch Time") + with benchmark_total: + for epoch in range(args.epochs): benchmark1 = BenchmarkTimer(logger=None, text="Training Time") with benchmark1: tm.fit(X_train, Y_train) @@ -30,9 +30,9 @@ def main(args): with benchmark2: accuracy = 100 * (tm.predict(X_test) == Y_test).mean() test_time = benchmark2.elapsed() - total_time = benchmark_total.elapsed() + total_time = benchmark_total.elapsed() - # Append results for each epoch + # Append results for each epoch results.append({ "Algorithm": "TMClassifier", "Noise_Ratio": args.dataset_noise_ratio, From c3d895b2840f9cb98fd19512ba7df5682d231647 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Mon, 17 Feb 2025 11:34:50 +0000 Subject: [PATCH 23/35] update --- examples/recomm_system/experiment_results.csv | 234 +++++++++++---- .../recomm_system/experiment_results_old.csv | 271 ++++++++++++++++++ examples/recomm_system/graph_tm.py | 6 + examples/recomm_system/main.sh | 28 +- examples/recomm_system/test.ipynb | 186 ++++++++++++ 5 files changed, 662 insertions(+), 63 deletions(-) create mode 100644 examples/recomm_system/experiment_results_old.csv create mode 100644 examples/recomm_system/test.ipynb diff --git a/examples/recomm_system/experiment_results.csv b/examples/recomm_system/experiment_results.csv index 957f7701..b394dad6 100644 --- a/examples/recomm_system/experiment_results.csv +++ b/examples/recomm_system/experiment_results.csv @@ -1,55 +1,181 @@ Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy -Graph NN,0.005,0,0,0,1000,CPU,0.03006434440612793,76.72131061553955 -GraphTM,0.005,10000,10.0,23,10,CUDA,34.547648191452026,98.46994535519126 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,89.6943154335022,76.63934426229508 -Graph NN,0.01,0,0,0,1000,CPU,0.01817464828491211,75.95628499984741 -GraphTM,0.01,10000,10.0,23,10,CUDA,34.95576763153076,98.44262295081967 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,96.10501098632812,74.93169398907104 -Graph NN,0.02,0,0,0,1000,CPU,0.03073263168334961,81.22950792312622 -GraphTM,0.02,10000,10.0,23,10,CUDA,36.0724892616272,97.43169398907104 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,95.67133641242981,72.40437158469946 -Graph NN,0.05,0,0,0,1000,CPU,0.014258623123168945,83.52459073066711 -GraphTM,0.05,10000,10.0,23,10,CUDA,38.86628317832947,95.0 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.7427487373352,64.65163934426229 -Graph NN,0.1,0,0,0,1000,CPU,0.022305965423583984,73.33333492279053 -GraphTM,0.1,10000,10.0,23,10,CUDA,37.45086216926575,90.08196721311475 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,90.45554423332214,49.8292349726776 -Graph NN,0.2,0,0,0,1000,CPU,0.03204679489135742,59.863388538360596 -GraphTM,0.2,10000,10.0,23,10,CUDA,16.268279790878296,78.77049180327869 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,96.16712856292725,20.184426229508194 -Graph NN,0.005,0,0,0,1000,CPU,0.0168764591217041,76.85792446136475 -GraphTM,0.005,10000,10.0,23,10,CUDA,31.40691065788269,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,88.05298614501953,76.74180327868852 -Graph NN,0.01,0,0,0,1000,CPU,0.01720118522644043,87.4316930770874 -GraphTM,0.01,10000,10.0,23,10,CUDA,31.529547214508057,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,89.19472336769104,74.93169398907104 -Graph NN,0.02,0,0,0,1000,CPU,0.014032602310180664,78.36065292358398 -GraphTM,0.02,10000,10.0,23,10,CUDA,32.8007595539093,97.62295081967213 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,94.56675243377686,72.6775956284153 -Graph NN,0.05,0,0,0,1000,CPU,0.016784191131591797,76.88524723052979 -GraphTM,0.05,10000,10.0,23,10,CUDA,34.84256434440613,94.75409836065573 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.4975814819336,64.1051912568306 -Graph NN,0.1,0,0,0,1000,CPU,0.014883041381835938,70.54644823074341 -GraphTM,0.1,10000,10.0,23,10,CUDA,36.750433683395386,89.97267759562841 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,96.35110449790955,50.341530054644814 -Graph NN,0.2,0,0,0,1000,CPU,0.03427433967590332,61.50273084640503 -GraphTM,0.2,10000,10.0,23,10,CUDA,39.63756251335144,79.01639344262294 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,97.00698733329773,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,370.7295939922333,87.5683069229126 -GraphTM,0.005,10000,10.0,23,10,CUDA,342.7878243923187,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,954.4101324081421,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,304.6031119823456,86.74863576889038 -GraphTM,0.01,10000,10.0,23,10,CUDA,346.8704605102539,98.25136612021858 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,978.3629264831543,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,403.2585175037384,75.30054450035095 -GraphTM,0.02,10000,10.0,23,10,CUDA,353.39254236221313,97.65027322404372 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.3300836086273,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,398.8085067272186,93.8524603843689 -GraphTM,0.05,10000,10.0,23,10,CUDA,368.16111874580383,94.59016393442623 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,960.4506890773773,63.661202185792355 -Graph NN,0.1,0,0,0,20000,CPU,388.4886665344238,75.43715834617615 -GraphTM,0.1,10000,10.0,23,10,CUDA,340.63327074050903,90.43715846994536 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,972.1077370643616,49.35109289617486 -Graph NN,0.2,0,0,0,20000,CPU,438.5506749153137,64.04371857643127 -GraphTM,0.2,10000,10.0,23,10,CUDA,357.2651107311249,77.89617486338798 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,948.7157049179077,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,418.9250466823578,75.62841773033142 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.35683226585388,98.68852459016394 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1059.1634759902954,76.81010928961749 +Graph NN,0.01,0,0,0,20000,CPU,550.6980571746826,94.50819492340088 +GraphTM,0.01,10000,10.0,23,10,CUDA,114.06276345252991,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1051.916612625122,75.3415300546448 +Graph NN,0.02,0,0,0,20000,CPU,475.44024682044983,75.30054450035095 +GraphTM,0.02,10000,10.0,23,10,CUDA,121.55624794960022,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1043.9487817287445,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,411.8552327156067,80.98360896110535 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.7814338207245,94.20765027322405 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1044.2656917572021,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,484.6550889015198,68.7158465385437 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.34457921981812,89.72677595628416 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1061.191523551941,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,483.8463816642761,71.28415107727051 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.18810439109802,78.49726775956285 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1071.927158355713,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,473.5806052684784,86.36612296104431 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.18979954719543,98.60655737704917 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,979.0509588718414,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,444.6897065639496,93.55190992355347 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.48035550117493,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1007.9654748439789,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,386.32835030555725,93.22404265403748 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.46316766738892,97.73224043715847 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1017.5866801738739,73.25819672131148 +Graph NN,0.05,0,0,0,20000,CPU,417.78410935401917,73.1693983078003 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.64952206611633,95.08196721311475 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,945.0465729236603,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,481.6537721157074,77.18579173088074 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.57958960533142,90.08196721311475 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,938.0212676525116,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,391.36059975624084,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.49347591400146,77.65027322404372 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,940.9758951663971,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,480.5005066394806,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.65927052497864,98.19672131147541 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.7581994533539,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,449.22584795951843,76.36612057685852 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.07226181030273,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1010.8711988925934,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,403.96647000312805,96.85792326927185 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.02044725418091,97.78688524590164 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1011.7896072864532,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,460.688773393631,85.00000238418579 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.04891228675842,94.69945355191257 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1014.1492829322815,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,407.9346880912781,74.1256833076477 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.6586093902588,90.08196721311475 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,990.8282098770142,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,437.8108870983124,65.60109257698059 +GraphTM,0.2,10000,10.0,23,10,CUDA,168.44772601127625,78.93442622950819 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1022.1848647594452,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,430.3925087451935,89.20764923095703 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.6658935546875,98.68852459016394 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1016.199923992157,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,396.3338620662689,84.23497080802917 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.67849016189575,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,944.4602844715118,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,434.91951632499695,93.25136542320251 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.31921482086182,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,933.2245874404907,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,483.2671537399292,80.32786846160889 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.68922591209412,94.78142076502732 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,994.6384744644165,64.13934426229508 +Graph NN,0.1,0,0,0,20000,CPU,424.9935986995697,81.33879899978638 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.08107113838196,89.59016393442623 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,944.0273253917694,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,333.49274706840515,61.50273084640503 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.906751871109,78.98907103825137 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,965.9725024700165,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,377.28471970558167,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.61631536483765,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,976.8008840084076,76.67349726775956 +Graph NN,0.01,0,0,0,20000,CPU,473.2922372817993,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.87212014198303,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,942.7254059314728,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,357.36573815345764,75.40983557701111 +GraphTM,0.02,10000,10.0,23,10,CUDA,119.41612005233765,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,985.81947016716,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,440.75843334198,73.08743000030518 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.8215868473053,94.91803278688525 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,997.739678144455,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,426.73446226119995,88.55191469192505 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.54467248916626,89.94535519125682 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,980.096907377243,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,387.20843958854675,75.71038007736206 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.7962884902954,77.56830601092896 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,987.0616261959076,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,455.586905002594,83.41529965400696 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.7424705028534,98.5792349726776 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,998.4698519706726,76.81010928961749 +Graph NN,0.01,0,0,0,20000,CPU,466.44022035598755,98.52458834648132 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.78495740890503,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,932.3163437843323,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,455.35024762153625,88.96175026893616 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.741384267807,97.75956284153006 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,974.3740100860596,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,399.9565739631653,73.60655665397644 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.17181992530823,94.67213114754098 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,971.1499485969543,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,447.5498752593994,70.8743155002594 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.6928951740265,89.80874316939891 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,962.4737737178802,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,403.6350507736206,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.02189421653748,78.16939890710383 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,947.2696743011475,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,470.0121097564697,81.20218515396118 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.51706099510193,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,974.2360310554504,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,466.69573068618774,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.95063591003418,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,948.407201051712,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,288.0073969364166,92.92349815368652 +GraphTM,0.02,10000,10.0,23,10,CUDA,119.34772634506226,97.48633879781421 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.228814125061,39.51502732240437 +Graph NN,0.05,0,0,0,20000,CPU,477.7228500843048,89.86338973045349 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.2427453994751,94.86338797814207 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,964.5819866657257,34.56284153005464 +Graph NN,0.1,0,0,0,20000,CPU,459.15181946754456,71.22950553894043 +GraphTM,0.1,10000,10.0,23,10,CUDA,148.52941298484802,89.67213114754098 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,981.4810082912445,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,356.59899377822876,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.7598683834076,76.85792349726775 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,959.9282560348511,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,378.94336581230164,80.32786846160889 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.55144882202148,98.44262295081967 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.1284465789795,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,407.1111581325531,94.31694149971008 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.06348276138306,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.711061000824,39.65163934426229 +Graph NN,0.02,0,0,0,20000,CPU,402.2970163822174,79.80874180793762 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.20444130897522,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,998.2885782718658,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,400.97751235961914,85.30054688453674 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.81029963493347,94.78142076502732 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1003.2194263935089,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,413.25741934776306,74.59016442298889 +GraphTM,0.1,10000,10.0,23,10,CUDA,148.70455861091614,89.89071038251366 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,974.4099938869476,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,369.36416029930115,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.01750564575195,78.55191256830601 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,990.2080008983612,20.184426229508194 +Graph NN,0.005,0,0,0,20000,CPU,440.5256702899933,90.4644787311554 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.76434278488159,98.55191256830601 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1004.704318523407,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,385.76011848449707,77.62295007705688 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.28425002098083,98.44262295081967 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,953.8945541381836,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,422.2995481491089,90.71038365364075 +GraphTM,0.02,10000,10.0,23,10,CUDA,121.29091334342957,97.6775956284153 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1002.099497795105,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,383.33483958244324,81.8306028842926 +GraphTM,0.05,10000,10.0,23,10,CUDA,134.72863698005676,94.53551912568307 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,936.831921339035,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,320.32143545150757,83.60655903816223 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.56500816345215,89.15300546448087 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,955.8687121868134,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,432.34014868736267,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.61127710342407,79.12568306010928 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,945.0617082118988,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,458.87039852142334,79.37158346176147 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.9952290058136,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,985.8775904178619,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,453.55728340148926,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.85269451141357,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.0662143230438,75.06830601092896 +Graph NN,0.02,0,0,0,20000,CPU,416.2407822608948,91.66666865348816 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.69959592819214,97.78688524590164 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.9127674102783,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,311.2621831893921,75.46448111534119 +GraphTM,0.05,10000,10.0,23,10,CUDA,134.66055345535278,94.89071038251366 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,953.3380017280579,63.25136612021858 +Graph NN,0.1,0,0,0,20000,CPU,425.43416261672974,73.79781603813171 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.67951107025146,90.27322404371586 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.5897221565247,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,379.8497235774994,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.7126281261444,77.81420765027323 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,955.9427745342255,20.116120218579233 diff --git a/examples/recomm_system/experiment_results_old.csv b/examples/recomm_system/experiment_results_old.csv new file mode 100644 index 00000000..f715ba6a --- /dev/null +++ b/examples/recomm_system/experiment_results_old.csv @@ -0,0 +1,271 @@ +Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy +Graph NN,0.005,0,0,0,1000,CPU,0.03006434440612793,76.72131061553955 +GraphTM,0.005,10000,10.0,23,10,CUDA,34.547648191452026,98.46994535519126 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,89.6943154335022,76.63934426229508 +Graph NN,0.01,0,0,0,1000,CPU,0.01817464828491211,75.95628499984741 +GraphTM,0.01,10000,10.0,23,10,CUDA,34.95576763153076,98.44262295081967 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,96.10501098632812,74.93169398907104 +Graph NN,0.02,0,0,0,1000,CPU,0.03073263168334961,81.22950792312622 +GraphTM,0.02,10000,10.0,23,10,CUDA,36.0724892616272,97.43169398907104 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,95.67133641242981,72.40437158469946 +Graph NN,0.05,0,0,0,1000,CPU,0.014258623123168945,83.52459073066711 +GraphTM,0.05,10000,10.0,23,10,CUDA,38.86628317832947,95.0 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.7427487373352,64.65163934426229 +Graph NN,0.1,0,0,0,1000,CPU,0.022305965423583984,73.33333492279053 +GraphTM,0.1,10000,10.0,23,10,CUDA,37.45086216926575,90.08196721311475 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,90.45554423332214,49.8292349726776 +Graph NN,0.2,0,0,0,1000,CPU,0.03204679489135742,59.863388538360596 +GraphTM,0.2,10000,10.0,23,10,CUDA,16.268279790878296,78.77049180327869 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,96.16712856292725,20.184426229508194 +Graph NN,0.005,0,0,0,1000,CPU,0.0168764591217041,76.85792446136475 +GraphTM,0.005,10000,10.0,23,10,CUDA,31.40691065788269,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,88.05298614501953,76.74180327868852 +Graph NN,0.01,0,0,0,1000,CPU,0.01720118522644043,87.4316930770874 +GraphTM,0.01,10000,10.0,23,10,CUDA,31.529547214508057,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,89.19472336769104,74.93169398907104 +Graph NN,0.02,0,0,0,1000,CPU,0.014032602310180664,78.36065292358398 +GraphTM,0.02,10000,10.0,23,10,CUDA,32.8007595539093,97.62295081967213 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,94.56675243377686,72.6775956284153 +Graph NN,0.05,0,0,0,1000,CPU,0.016784191131591797,76.88524723052979 +GraphTM,0.05,10000,10.0,23,10,CUDA,34.84256434440613,94.75409836065573 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.4975814819336,64.1051912568306 +Graph NN,0.1,0,0,0,1000,CPU,0.014883041381835938,70.54644823074341 +GraphTM,0.1,10000,10.0,23,10,CUDA,36.750433683395386,89.97267759562841 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,96.35110449790955,50.341530054644814 +Graph NN,0.2,0,0,0,1000,CPU,0.03427433967590332,61.50273084640503 +GraphTM,0.2,10000,10.0,23,10,CUDA,39.63756251335144,79.01639344262294 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,97.00698733329773,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,370.7295939922333,87.5683069229126 +GraphTM,0.005,10000,10.0,23,10,CUDA,342.7878243923187,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,954.4101324081421,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,304.6031119823456,86.74863576889038 +GraphTM,0.01,10000,10.0,23,10,CUDA,346.8704605102539,98.25136612021858 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,978.3629264831543,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,403.2585175037384,75.30054450035095 +GraphTM,0.02,10000,10.0,23,10,CUDA,353.39254236221313,97.65027322404372 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.3300836086273,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,398.8085067272186,93.8524603843689 +GraphTM,0.05,10000,10.0,23,10,CUDA,368.16111874580383,94.59016393442623 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,960.4506890773773,63.661202185792355 +Graph NN,0.1,0,0,0,20000,CPU,388.4886665344238,75.43715834617615 +GraphTM,0.1,10000,10.0,23,10,CUDA,340.63327074050903,90.43715846994536 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,972.1077370643616,49.35109289617486 +Graph NN,0.2,0,0,0,20000,CPU,438.5506749153137,64.04371857643127 +GraphTM,0.2,10000,10.0,23,10,CUDA,357.2651107311249,77.89617486338798 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,948.7157049179077,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,335.8319003582001,94.97267603874207 +GraphTM,0.005,10000,10.0,23,10,CUDA,343.08735728263855,98.63387978142076 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.0340785980225,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,380.5575759410858,94.37158703804016 +GraphTM,0.01,10000,10.0,23,10,CUDA,346.9574134349823,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,948.3826260566711,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,317.0974416732788,80.6010901927948 +GraphTM,0.02,10000,10.0,23,10,CUDA,352.5908226966858,97.5136612021858 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,966.0719907283783,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,472.30924010276794,73.08743000030518 +GraphTM,0.05,10000,10.0,23,10,CUDA,352.63378834724426,94.18032786885246 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,959.5826976299286,64.31010928961749 +Graph NN,0.1,0,0,0,20000,CPU,461.1769962310791,82.45901465415955 +GraphTM,0.1,10000,10.0,23,10,CUDA,384.25392842292786,89.80874316939891 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,968.517664194107,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,338.83801436424255,61.39343976974487 +GraphTM,0.2,10000,10.0,23,10,CUDA,406.0366141796112,79.37158469945356 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,956.5074710845947,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,449.974244594574,99.07103776931763 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.82642030715942,98.63387978142076 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,958.8415122032166,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,340.71677923202515,91.557377576828 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.30413746833801,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,954.5596807003021,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,395.9958527088165,90.95628261566162 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.9222981929779,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,969.4929764270782,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,480.05427837371826,84.83606576919556 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.44805693626404,94.67213114754098 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,960.4112854003906,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,383.12051796913147,70.8743155002594 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.93119883537292,89.86338797814207 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,951.469316482544,49.35109289617486 +Graph NN,0.2,0,0,0,20000,CPU,463.9883725643158,66.22951030731201 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.47470378875732,78.16939890710383 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,960.5258178710938,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,475.9830324649811,82.54098296165466 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.21395993232727,98.7431693989071 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1007.2876415252686,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,383.468213558197,84.89071130752563 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.81892561912537,98.16939890710383 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1012.9538216590881,75.0 +Graph NN,0.02,0,0,0,20000,CPU,420.129834651947,78.87977957725525 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.55745768547058,97.75956284153006 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1015.7262468338013,72.43852459016394 +Graph NN,0.05,0,0,0,20000,CPU,402.9082715511322,88.90710473060608 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.1779272556305,94.69945355191257 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1003.5450174808502,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,465.9741690158844,71.61202430725098 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.92307353019714,90.21857923497268 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,993.3001370429993,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,477.5556457042694,61.967211961746216 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.91576671600342,78.71584699453553 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,968.9711816310883,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,432.9368100166321,87.9781424999237 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.05442261695862,98.4153005464481 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,996.241945028305,77.11748633879782 +Graph NN,0.01,0,0,0,20000,CPU,487.0275945663452,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,114.20750546455383,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,965.2801012992859,74.89754098360656 +Graph NN,0.02,0,0,0,20000,CPU,469.96120142936707,84.61748361587524 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.18490934371948,97.62295081967213 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,996.0747539997101,73.05327868852459 +Graph NN,0.05,0,0,0,20000,CPU,391.52739334106445,94.4535493850708 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.62234830856323,94.89071038251366 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1008.111634016037,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,393.4089164733887,82.24043846130371 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.06821942329407,90.21857923497268 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1029.8733656406403,46.89207650273224 +Graph NN,0.2,0,0,0,20000,CPU,457.90059518814087,64.50819969177246 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.8122251033783,78.5792349726776 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,994.4631915092468,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,468.43779039382935,93.66120100021362 +GraphTM,0.005,10000,10.0,23,10,CUDA,791.0080873966217,98.66120218579235 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1003.8278872966766,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,432.6524693965912,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,114.20011568069458,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1002.5212485790253,74.55601092896174 +Graph NN,0.02,0,0,0,20000,CPU,369.3357195854187,77.92349457740784 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.16606998443604,97.78688524590164 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1012.7241668701172,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,425.18350195884705,73.49726557731628 +GraphTM,0.05,10000,10.0,23,10,CUDA,134.74739480018616,94.53551912568307 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,989.5920696258545,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,490.52463579177856,74.23497438430786 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.663067817688,90.05464480874316 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1006.5979704856873,49.86338797814208 +Graph NN,0.2,0,0,0,20000,CPU,430.0901610851288,55.51912784576416 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.53561758995056,78.52459016393442 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,978.9952318668365,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,348.87419414520264,88.87978196144104 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.35069704055786,98.49726775956285 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1027.553718328476,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,459.8675227165222,94.97267603874207 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.4369592666626,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1020.3086180686951,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,402.3793728351593,98.08743000030518 +GraphTM,0.02,10000,10.0,23,10,CUDA,121.04798412322998,97.78688524590164 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1001.1654710769653,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,372.8648886680603,77.81420946121216 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.42569255828857,94.78142076502732 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1007.9532639980316,64.31010928961749 +Graph NN,0.1,0,0,0,20000,CPU,379.2149317264557,88.55191469192505 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.3813440799713,89.50819672131148 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1043.259267091751,49.65846994535519 +Graph NN,0.2,0,0,0,20000,CPU,327.1461730003357,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.63331365585327,77.75956284153006 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1010.9232707023621,20.081967213114755 +Graph NN,0.005,0,0,0,20000,CPU,365.3540139198303,84.56284403800964 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.86703443527222,98.55191256830601 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,985.2240512371063,76.84426229508196 +Graph NN,0.01,0,0,0,20000,CPU,419.19047832489014,90.65573811531067 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.7970187664032,98.19672131147541 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1064.9949398040771,75.27322404371584 +Graph NN,0.02,0,0,0,20000,CPU,331.5898778438568,82.13114738464355 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.9221625328064,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,995.9801988601685,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,471.61706471443176,76.4207661151886 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.71256685256958,94.31693989071039 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1049.4032156467438,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,408.78746509552,75.76502561569214 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.7326798439026,89.86338797814207 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1033.6956369876862,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,606.6176900863647,75.84699392318726 +GraphTM,0.2,10000,10.0,23,10,CUDA,767.3086304664612,79.18032786885246 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1133.7219278812408,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,581.8730342388153,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,331.4337913990021,98.68852459016394 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1139.0209171772003,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,625.7649390697479,79.91803288459778 +GraphTM,0.01,10000,10.0,23,10,CUDA,390.8302972316742,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1126.1463103294373,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,400.4486656188965,88.87978196144104 +GraphTM,0.02,10000,10.0,23,10,CUDA,1433.5869204998016,97.73224043715847 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,950.7241444587708,72.43852459016394 +Graph NN,0.05,0,0,0,20000,CPU,425.54064321517944,88.22404146194458 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.85678553581238,95.0 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,980.2039513587952,40.26639344262295 +Graph NN,0.1,0,0,0,20000,CPU,452.5277452468872,75.38251280784607 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.88782930374146,89.80874316939891 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1026.7852320671082,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,470.88474774360657,69.67213153839111 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.65682435035706,78.38797814207649 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1025.9789564609528,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,415.4326367378235,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.78167200088501,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1003.7237763404846,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,444.45101857185364,92.65027046203613 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.90761637687683,98.14207650273225 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,952.2491714954376,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,320.37370920181274,93.90710592269897 +GraphTM,0.02,10000,10.0,23,10,CUDA,119.93352174758911,97.78688524590164 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,943.684113740921,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,481.5506682395935,73.08743000030518 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.72563362121582,94.75409836065573 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1023.0283312797546,63.661202185792355 +Graph NN,0.1,0,0,0,20000,CPU,493.5546169281006,70.92896103858948 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.45619106292725,89.80874316939891 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1015.6581709384918,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,413.9959945678711,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.9294879436493,78.77049180327869 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,986.7937209606171,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,378.53097796440125,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.98681783676147,98.30601092896175 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1019.9160070419312,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,474.00093841552734,91.0109281539917 +GraphTM,0.01,10000,10.0,23,10,CUDA,111.94242978096008,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,999.8850407600403,75.03415300546447 +Graph NN,0.02,0,0,0,20000,CPU,346.5858099460602,79.3169379234314 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.32013273239136,97.81420765027322 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,937.4906117916107,71.92622950819673 +Graph NN,0.05,0,0,0,20000,CPU,408.48123002052307,79.61748838424683 +GraphTM,0.05,10000,10.0,23,10,CUDA,134.27622246742249,94.72677595628414 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,998.1966772079468,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,373.10851979255676,70.8743155002594 +GraphTM,0.1,10000,10.0,23,10,CUDA,148.95248794555664,89.86338797814207 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,993.9887461662292,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,388.21142077445984,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,168.77049660682678,76.93989071038251 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,947.7270972728729,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,370.7274992465973,75.79234838485718 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.92479467391968,98.27868852459017 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.8954434394836,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,382.68008041381836,90.8196747303009 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.02455401420593,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,958.4739623069763,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,466.3325071334839,96.22950553894043 +GraphTM,0.02,10000,10.0,23,10,CUDA,121.06816530227661,97.6775956284153 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,952.7009084224701,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,462.6835868358612,75.79234838485718 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.21898555755615,94.53551912568307 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,974.2475302219391,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,425.79654932022095,87.18579411506653 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.70053339004517,90.0 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1005.1148529052734,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,454.7309219837189,60.10928750038147 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.75228261947632,78.68852459016394 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,949.2937788963318,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,570.247394323349,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,478.04068207740784,98.5792349726776 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1043.9900722503662,76.22950819672131 +Graph NN,0.01,0,0,0,20000,CPU,428.5804445743561,98.68852496147156 +GraphTM,0.01,10000,10.0,23,10,CUDA,522.4638862609863,98.44262295081967 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1060.4919381141663,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,432.5051038265228,76.25682950019836 +GraphTM,0.02,10000,10.0,23,10,CUDA,465.56538343429565,97.73224043715847 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1074.2418582439423,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,492.7251534461975,85.16393303871155 +GraphTM,0.05,10000,10.0,23,10,CUDA,688.4105927944183,94.91803278688525 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1055.8136265277863,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,584.2829260826111,78.22404503822327 +GraphTM,0.1,10000,10.0,23,10,CUDA,625.4286091327667,90.13661202185791 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1055.7545056343079,48.83879781420765 +Graph NN,0.2,0,0,0,20000,CPU,318.2997555732727,67.40437150001526 +GraphTM,0.2,10000,10.0,23,10,CUDA,1264.404123544693,77.62295081967213 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1000.3779845237732,20.081967213114755 diff --git a/examples/recomm_system/graph_tm.py b/examples/recomm_system/graph_tm.py index d1464c75..d03d3be9 100644 --- a/examples/recomm_system/graph_tm.py +++ b/examples/recomm_system/graph_tm.py @@ -14,8 +14,14 @@ def main(args): x, y = prepare_dataset.construct_x_y(data) X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) users = data['user_id'].unique() + print("Users: ",len(users)) + items = data['product_id'].unique() + print("Items: ",len(items)) + categories = data['category'].unique() + print("Categories: ",len(categories)) + # Initialize Graphs with symbols for GTM number_of_nodes = 3 symbols = [] diff --git a/examples/recomm_system/main.sh b/examples/recomm_system/main.sh index 8c7a22ad..a5db0425 100644 --- a/examples/recomm_system/main.sh +++ b/examples/recomm_system/main.sh @@ -1,16 +1,26 @@ +#!/bin/bash + echo `date`, Setup the environment ... set -e # exit if error models="graph_tm tm_classifier graph_nn" dataset_noise_ratios="0.005 0.01 0.02 0.05 0.1 0.2" +num_iterations=10 # Number of times to repeat the experiments + +for (( i=1; i<=num_iterations; i++ )) +do + echo "Iteration $i of $num_iterations" + + for N in $dataset_noise_ratios; do + echo `date`, Running Graph NN ... + python3 graph_nn.py --dataset_noise_ratio $N + + echo `date`, Running Graph Tsetlin Machine ... + python3 graph_tm.py --dataset_noise_ratio $N + + echo `date`, Running Tsetlin Machine Classifier ... + python3 tm_classifier.py --dataset_noise_ratio $N + done +done -for N in $dataset_noise_ratios; do - echo `date`, Running Graph NN ... - python3 graph_nn.py --dataset_noise_ratio $N - echo `date`, Running Graph Tsetlin Machine ... - python3 graph_tm.py --dataset_noise_ratio $N - - echo `date`, Running Tsetlin Machine Classifier ... - python3 tm_classifier.py --dataset_noise_ratio $N -done \ No newline at end of file diff --git a/examples/recomm_system/test.ipynb b/examples/recomm_system/test.ipynb new file mode 100644 index 00000000..4e44624f --- /dev/null +++ b/examples/recomm_system/test.ipynb @@ -0,0 +1,186 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating training data\n", + "Warning: Looks like you're using an outdated `kagglehub` version (installed: 0.3.5), please consider upgrading to the latest version (0.3.6).\n", + "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", + "Original data shape: (1465, 16)\n", + "Expanded data shape: (14640, 4)\n", + "Dataset saved to noisy_dataset_0.005.csv\n", + "Creating training data\n", + "Warning: Looks like you're using an outdated `kagglehub` version (installed: 0.3.5), please consider upgrading to the latest version (0.3.6).\n", + "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", + "Original data shape: (1465, 16)\n", + "Expanded data shape: (14640, 4)\n", + "Dataset saved to noisy_dataset_0.01.csv\n", + "Creating training data\n", + "Warning: Looks like you're using an outdated `kagglehub` version (installed: 0.3.5), please consider upgrading to the latest version (0.3.6).\n", + "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", + "Original data shape: (1465, 16)\n", + "Expanded data shape: (14640, 4)\n", + "Dataset saved to noisy_dataset_0.02.csv\n", + "Creating training data\n", + "Warning: Looks like you're using an outdated `kagglehub` version (installed: 0.3.5), please consider upgrading to the latest version (0.3.6).\n", + "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", + "Original data shape: (1465, 16)\n", + "Expanded data shape: (14640, 4)\n", + "Dataset saved to noisy_dataset_0.05.csv\n", + "Creating training data\n", + "Warning: Looks like you're using an outdated `kagglehub` version (installed: 0.3.5), please consider upgrading to the latest version (0.3.6).\n", + "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", + "Original data shape: (1465, 16)\n", + "Expanded data shape: (14640, 4)\n", + "Dataset saved to noisy_dataset_0.1.csv\n", + "Creating training data\n", + "Warning: Looks like you're using an outdated `kagglehub` version (installed: 0.3.5), please consider upgrading to the latest version (0.3.6).\n", + "Path to dataset files: /root/.cache/kagglehub/datasets/karkavelrajaj/amazon-sales-dataset/versions/1\n", + "Original data shape: (1465, 16)\n", + "Expanded data shape: (14640, 4)\n", + "Dataset saved to noisy_dataset_0.2.csv\n" + ] + } + ], + "source": [ + "import prepare_dataset\n", + "import pandas as pd\n", + "import os\n", + "\n", + "dataset_noise_ratios = [0.005,0.01,0.02,0.05,0.1,0.2]\n", + "for noise in dataset_noise_ratios:\n", + " data = prepare_dataset.aug_amazon_products(noise_ratio = noise)\n", + " df = pd.DataFrame(data)\n", + " noise_dataset_file = f\"noisy_dataset_{noise}.csv\"\n", + " if os.path.exists(noise_dataset_file):\n", + " df.to_csv(noise_dataset_file, mode='a', index=False, header=False)\n", + " else:\n", + " df.to_csv(noise_dataset_file, index=False)\n", + " print(f\"Dataset saved to {noise_dataset_file}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Algorithm Noise_Ratio T s Max_Included_Literals Epochs \\\n", + "0 Graph NN 0.005 0 0.0 0 20000 \n", + "1 GraphTM 0.005 10000 10.0 23 10 \n", + "2 TMClassifier 0.005 10000 10.0 32 10 \n", + "3 Graph NN 0.010 0 0.0 0 20000 \n", + "4 GraphTM 0.010 10000 10.0 23 10 \n", + ".. ... ... ... ... ... ... \n", + "175 GraphTM 0.100 10000 10.0 23 10 \n", + "176 TMClassifier 0.100 10000 10.0 32 10 \n", + "177 Graph NN 0.200 0 0.0 0 20000 \n", + "178 GraphTM 0.200 10000 10.0 23 10 \n", + "179 TMClassifier 0.200 10000 10.0 32 10 \n", + "\n", + " Platform Total_Time Accuracy \n", + "0 CPU 418.925047 75.628418 \n", + "1 CUDA 110.356832 98.688525 \n", + "2 CPU_sparse 1059.163476 76.810109 \n", + "3 CPU 550.698057 94.508195 \n", + "4 CUDA 114.062763 98.415301 \n", + ".. ... ... ... \n", + "175 CUDA 150.679511 90.273224 \n", + "176 CPU_sparse 967.589722 49.590164 \n", + "177 CPU 379.849724 64.153004 \n", + "178 CUDA 169.712628 77.814208 \n", + "179 CPU_sparse 955.942775 20.116120 \n", + "\n", + "[180 rows x 9 columns]\n", + "\n", + "\\begin{table}[h!]\n", + "\\centering\n", + "\\begin{tabular}{|c|c|c|c|}\n", + "\\hline\n", + "\\textbf{Noise Ratio} & \\textbf{GCN (\\%)} & \\textbf{GTM (\\%)} & \\textbf{TMClassifier (\\%)} \\\\ \\hline\n", + "0.005 & 81.73 & 98.62 & 76.70 \\\\ \\hline\n", + "0.01 & 84.73 & 98.34 & 71.43 \\\\ \\hline\n", + "0.02 & 87.81 & 97.76 & 69.09 \\\\ \\hline\n", + "0.05 & 79.86 & 94.74 & 61.04 \\\\ \\hline\n", + "0.1 & 76.40 & 89.82 & 49.60 \\\\ \\hline\n", + "0.2 & 65.90 & 78.22 & 20.12 \\\\ \\hline\n", + "\\end{tabular}\n", + "\\caption{Average accuracy comparison of GCN, GraphTM, and TMClassifier for varying noise ratios.}\n", + "\\label{tab:recomm_sys_accuracy}\n", + "\\end{table}\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "data = pd.read_csv(\"experiment_results.csv\")\n", + "\n", + "# Extract records within the specified range, e.g., rows 3 to 5 (0-indexed)\n", + "# This assumes each algorithm data spans three consecutive rows\n", + "start_index = 0\n", + "range_records = data.iloc[start_index:len(data)]\n", + "print(range_records)\n", + "# Create a dictionary to store the accuracy values\n", + "noise_accuracies = {}\n", + "\n", + "# Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy\n", + "# Group the data by Algorithm and Noise Ratio to calculate average accuracies\n", + "grouped_data = data.groupby(['Algorithm', 'Noise_Ratio']).agg({'Accuracy': 'mean'}).reset_index()\n", + "\n", + "# Pivot the data to get a structure suitable for LaTeX table generation\n", + "pivot_data = grouped_data.pivot(index='Noise_Ratio', columns='Algorithm', values='Accuracy')\n", + " \n", + "# Generate LaTeX table\n", + "latex_table = \"\"\"\n", + "\\\\begin{table}[h!]\n", + "\\\\centering\n", + "\\\\begin{tabular}{|c|c|c|c|}\n", + "\\\\hline\n", + "\\\\textbf{Noise Ratio} & \\\\textbf{GCN (\\\\%)} & \\\\textbf{GTM (\\\\%)} & \\\\textbf{TMClassifier (\\\\%)} \\\\\\\\ \\\\hline\n", + "\"\"\"\n", + "\n", + "# Iterate over the pivot data to construct the table rows\n", + "for noise_ratio, row in pivot_data.iterrows():\n", + " latex_table += f\"{noise_ratio} & \"\n", + " latex_table += f\"{row['Graph NN']:.2f} & {row['GraphTM']:.2f} & {row['TMClassifier']:.2f} \\\\\\\\ \\\\hline\\n\"\n", + "\n", + "latex_table += \"\\\\end{tabular}\\n\"\n", + "latex_table += \"\\\\caption{Average accuracy comparison of GCN, GraphTM, and TMClassifier for varying noise ratios.}\\n\"\n", + "latex_table += \"\\\\label{tab:recomm_sys_accuracy}\\n\"\n", + "latex_table += \"\\\\end{table}\"\n", + "\n", + "print(latex_table)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 26e208394e7dfd0d2dbd3cf0f9ce16e4457916fb Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Tue, 25 Feb 2025 08:54:16 +0000 Subject: [PATCH 24/35] adding exp id --- examples/recomm_system/experiment_results.csv | 183 +----------------- .../experiment_results_ensamble.csv | 181 +++++++++++++++++ examples/recomm_system/graph_nn.py | 4 +- examples/recomm_system/graph_tm.py | 2 + examples/recomm_system/main.sh | 9 +- examples/recomm_system/test.ipynb | 31 +-- examples/recomm_system/tm_classifier.py | 2 + 7 files changed, 198 insertions(+), 214 deletions(-) create mode 100644 examples/recomm_system/experiment_results_ensamble.csv diff --git a/examples/recomm_system/experiment_results.csv b/examples/recomm_system/experiment_results.csv index b394dad6..09e4f8e7 100644 --- a/examples/recomm_system/experiment_results.csv +++ b/examples/recomm_system/experiment_results.csv @@ -1,181 +1,2 @@ -Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy -Graph NN,0.005,0,0,0,20000,CPU,418.9250466823578,75.62841773033142 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.35683226585388,98.68852459016394 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1059.1634759902954,76.81010928961749 -Graph NN,0.01,0,0,0,20000,CPU,550.6980571746826,94.50819492340088 -GraphTM,0.01,10000,10.0,23,10,CUDA,114.06276345252991,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1051.916612625122,75.3415300546448 -Graph NN,0.02,0,0,0,20000,CPU,475.44024682044983,75.30054450035095 -GraphTM,0.02,10000,10.0,23,10,CUDA,121.55624794960022,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1043.9487817287445,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,411.8552327156067,80.98360896110535 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.7814338207245,94.20765027322405 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1044.2656917572021,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,484.6550889015198,68.7158465385437 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.34457921981812,89.72677595628416 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1061.191523551941,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,483.8463816642761,71.28415107727051 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.18810439109802,78.49726775956285 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1071.927158355713,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,473.5806052684784,86.36612296104431 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.18979954719543,98.60655737704917 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,979.0509588718414,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,444.6897065639496,93.55190992355347 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.48035550117493,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1007.9654748439789,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,386.32835030555725,93.22404265403748 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.46316766738892,97.73224043715847 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1017.5866801738739,73.25819672131148 -Graph NN,0.05,0,0,0,20000,CPU,417.78410935401917,73.1693983078003 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.64952206611633,95.08196721311475 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,945.0465729236603,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,481.6537721157074,77.18579173088074 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.57958960533142,90.08196721311475 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,938.0212676525116,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,391.36059975624084,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.49347591400146,77.65027322404372 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,940.9758951663971,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,480.5005066394806,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.65927052497864,98.19672131147541 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.7581994533539,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,449.22584795951843,76.36612057685852 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.07226181030273,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1010.8711988925934,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,403.96647000312805,96.85792326927185 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.02044725418091,97.78688524590164 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1011.7896072864532,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,460.688773393631,85.00000238418579 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.04891228675842,94.69945355191257 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1014.1492829322815,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,407.9346880912781,74.1256833076477 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.6586093902588,90.08196721311475 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,990.8282098770142,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,437.8108870983124,65.60109257698059 -GraphTM,0.2,10000,10.0,23,10,CUDA,168.44772601127625,78.93442622950819 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1022.1848647594452,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,430.3925087451935,89.20764923095703 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.6658935546875,98.68852459016394 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1016.199923992157,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,396.3338620662689,84.23497080802917 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.67849016189575,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,944.4602844715118,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,434.91951632499695,93.25136542320251 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.31921482086182,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,933.2245874404907,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,483.2671537399292,80.32786846160889 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.68922591209412,94.78142076502732 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,994.6384744644165,64.13934426229508 -Graph NN,0.1,0,0,0,20000,CPU,424.9935986995697,81.33879899978638 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.08107113838196,89.59016393442623 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,944.0273253917694,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,333.49274706840515,61.50273084640503 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.906751871109,78.98907103825137 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,965.9725024700165,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,377.28471970558167,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.61631536483765,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,976.8008840084076,76.67349726775956 -Graph NN,0.01,0,0,0,20000,CPU,473.2922372817993,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.87212014198303,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,942.7254059314728,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,357.36573815345764,75.40983557701111 -GraphTM,0.02,10000,10.0,23,10,CUDA,119.41612005233765,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,985.81947016716,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,440.75843334198,73.08743000030518 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.8215868473053,94.91803278688525 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,997.739678144455,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,426.73446226119995,88.55191469192505 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.54467248916626,89.94535519125682 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,980.096907377243,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,387.20843958854675,75.71038007736206 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.7962884902954,77.56830601092896 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,987.0616261959076,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,455.586905002594,83.41529965400696 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.7424705028534,98.5792349726776 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,998.4698519706726,76.81010928961749 -Graph NN,0.01,0,0,0,20000,CPU,466.44022035598755,98.52458834648132 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.78495740890503,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,932.3163437843323,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,455.35024762153625,88.96175026893616 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.741384267807,97.75956284153006 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,974.3740100860596,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,399.9565739631653,73.60655665397644 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.17181992530823,94.67213114754098 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,971.1499485969543,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,447.5498752593994,70.8743155002594 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.6928951740265,89.80874316939891 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,962.4737737178802,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,403.6350507736206,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.02189421653748,78.16939890710383 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,947.2696743011475,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,470.0121097564697,81.20218515396118 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.51706099510193,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,974.2360310554504,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,466.69573068618774,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.95063591003418,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,948.407201051712,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,288.0073969364166,92.92349815368652 -GraphTM,0.02,10000,10.0,23,10,CUDA,119.34772634506226,97.48633879781421 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.228814125061,39.51502732240437 -Graph NN,0.05,0,0,0,20000,CPU,477.7228500843048,89.86338973045349 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.2427453994751,94.86338797814207 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,964.5819866657257,34.56284153005464 -Graph NN,0.1,0,0,0,20000,CPU,459.15181946754456,71.22950553894043 -GraphTM,0.1,10000,10.0,23,10,CUDA,148.52941298484802,89.67213114754098 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,981.4810082912445,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,356.59899377822876,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.7598683834076,76.85792349726775 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,959.9282560348511,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,378.94336581230164,80.32786846160889 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.55144882202148,98.44262295081967 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.1284465789795,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,407.1111581325531,94.31694149971008 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.06348276138306,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.711061000824,39.65163934426229 -Graph NN,0.02,0,0,0,20000,CPU,402.2970163822174,79.80874180793762 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.20444130897522,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,998.2885782718658,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,400.97751235961914,85.30054688453674 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.81029963493347,94.78142076502732 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1003.2194263935089,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,413.25741934776306,74.59016442298889 -GraphTM,0.1,10000,10.0,23,10,CUDA,148.70455861091614,89.89071038251366 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,974.4099938869476,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,369.36416029930115,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.01750564575195,78.55191256830601 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,990.2080008983612,20.184426229508194 -Graph NN,0.005,0,0,0,20000,CPU,440.5256702899933,90.4644787311554 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.76434278488159,98.55191256830601 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1004.704318523407,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,385.76011848449707,77.62295007705688 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.28425002098083,98.44262295081967 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,953.8945541381836,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,422.2995481491089,90.71038365364075 -GraphTM,0.02,10000,10.0,23,10,CUDA,121.29091334342957,97.6775956284153 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1002.099497795105,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,383.33483958244324,81.8306028842926 -GraphTM,0.05,10000,10.0,23,10,CUDA,134.72863698005676,94.53551912568307 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,936.831921339035,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,320.32143545150757,83.60655903816223 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.56500816345215,89.15300546448087 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,955.8687121868134,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,432.34014868736267,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.61127710342407,79.12568306010928 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,945.0617082118988,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,458.87039852142334,79.37158346176147 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.9952290058136,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,985.8775904178619,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,453.55728340148926,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.85269451141357,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.0662143230438,75.06830601092896 -Graph NN,0.02,0,0,0,20000,CPU,416.2407822608948,91.66666865348816 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.69959592819214,97.78688524590164 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.9127674102783,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,311.2621831893921,75.46448111534119 -GraphTM,0.05,10000,10.0,23,10,CUDA,134.66055345535278,94.89071038251366 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,953.3380017280579,63.25136612021858 -Graph NN,0.1,0,0,0,20000,CPU,425.43416261672974,73.79781603813171 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.67951107025146,90.27322404371586 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.5897221565247,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,379.8497235774994,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.7126281261444,77.81420765027323 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,955.9427745342255,20.116120218579233 +Exp_id,Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy +20250225083536,Graph NN,0.005,0,0,0,2000,CPU,44.10563063621521,80.87431788444519 diff --git a/examples/recomm_system/experiment_results_ensamble.csv b/examples/recomm_system/experiment_results_ensamble.csv new file mode 100644 index 00000000..b394dad6 --- /dev/null +++ b/examples/recomm_system/experiment_results_ensamble.csv @@ -0,0 +1,181 @@ +Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy +Graph NN,0.005,0,0,0,20000,CPU,418.9250466823578,75.62841773033142 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.35683226585388,98.68852459016394 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1059.1634759902954,76.81010928961749 +Graph NN,0.01,0,0,0,20000,CPU,550.6980571746826,94.50819492340088 +GraphTM,0.01,10000,10.0,23,10,CUDA,114.06276345252991,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1051.916612625122,75.3415300546448 +Graph NN,0.02,0,0,0,20000,CPU,475.44024682044983,75.30054450035095 +GraphTM,0.02,10000,10.0,23,10,CUDA,121.55624794960022,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1043.9487817287445,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,411.8552327156067,80.98360896110535 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.7814338207245,94.20765027322405 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1044.2656917572021,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,484.6550889015198,68.7158465385437 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.34457921981812,89.72677595628416 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1061.191523551941,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,483.8463816642761,71.28415107727051 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.18810439109802,78.49726775956285 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1071.927158355713,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,473.5806052684784,86.36612296104431 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.18979954719543,98.60655737704917 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,979.0509588718414,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,444.6897065639496,93.55190992355347 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.48035550117493,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1007.9654748439789,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,386.32835030555725,93.22404265403748 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.46316766738892,97.73224043715847 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1017.5866801738739,73.25819672131148 +Graph NN,0.05,0,0,0,20000,CPU,417.78410935401917,73.1693983078003 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.64952206611633,95.08196721311475 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,945.0465729236603,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,481.6537721157074,77.18579173088074 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.57958960533142,90.08196721311475 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,938.0212676525116,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,391.36059975624084,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.49347591400146,77.65027322404372 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,940.9758951663971,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,480.5005066394806,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.65927052497864,98.19672131147541 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.7581994533539,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,449.22584795951843,76.36612057685852 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.07226181030273,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1010.8711988925934,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,403.96647000312805,96.85792326927185 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.02044725418091,97.78688524590164 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1011.7896072864532,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,460.688773393631,85.00000238418579 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.04891228675842,94.69945355191257 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1014.1492829322815,64.00273224043715 +Graph NN,0.1,0,0,0,20000,CPU,407.9346880912781,74.1256833076477 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.6586093902588,90.08196721311475 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,990.8282098770142,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,437.8108870983124,65.60109257698059 +GraphTM,0.2,10000,10.0,23,10,CUDA,168.44772601127625,78.93442622950819 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1022.1848647594452,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,430.3925087451935,89.20764923095703 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.6658935546875,98.68852459016394 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1016.199923992157,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,396.3338620662689,84.23497080802917 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.67849016189575,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,944.4602844715118,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,434.91951632499695,93.25136542320251 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.31921482086182,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,933.2245874404907,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,483.2671537399292,80.32786846160889 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.68922591209412,94.78142076502732 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,994.6384744644165,64.13934426229508 +Graph NN,0.1,0,0,0,20000,CPU,424.9935986995697,81.33879899978638 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.08107113838196,89.59016393442623 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,944.0273253917694,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,333.49274706840515,61.50273084640503 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.906751871109,78.98907103825137 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,965.9725024700165,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,377.28471970558167,75.68305730819702 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.61631536483765,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,976.8008840084076,76.67349726775956 +Graph NN,0.01,0,0,0,20000,CPU,473.2922372817993,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.87212014198303,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,942.7254059314728,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,357.36573815345764,75.40983557701111 +GraphTM,0.02,10000,10.0,23,10,CUDA,119.41612005233765,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,985.81947016716,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,440.75843334198,73.08743000030518 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.8215868473053,94.91803278688525 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,997.739678144455,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,426.73446226119995,88.55191469192505 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.54467248916626,89.94535519125682 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,980.096907377243,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,387.20843958854675,75.71038007736206 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.7962884902954,77.56830601092896 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,987.0616261959076,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,455.586905002594,83.41529965400696 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.7424705028534,98.5792349726776 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,998.4698519706726,76.81010928961749 +Graph NN,0.01,0,0,0,20000,CPU,466.44022035598755,98.52458834648132 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.78495740890503,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,932.3163437843323,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,455.35024762153625,88.96175026893616 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.741384267807,97.75956284153006 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,974.3740100860596,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,399.9565739631653,73.60655665397644 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.17181992530823,94.67213114754098 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,971.1499485969543,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,447.5498752593994,70.8743155002594 +GraphTM,0.1,10000,10.0,23,10,CUDA,149.6928951740265,89.80874316939891 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,962.4737737178802,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,403.6350507736206,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.02189421653748,78.16939890710383 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,947.2696743011475,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,470.0121097564697,81.20218515396118 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.51706099510193,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,974.2360310554504,76.74180327868852 +Graph NN,0.01,0,0,0,20000,CPU,466.69573068618774,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.95063591003418,98.4153005464481 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,948.407201051712,74.86338797814209 +Graph NN,0.02,0,0,0,20000,CPU,288.0073969364166,92.92349815368652 +GraphTM,0.02,10000,10.0,23,10,CUDA,119.34772634506226,97.48633879781421 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.228814125061,39.51502732240437 +Graph NN,0.05,0,0,0,20000,CPU,477.7228500843048,89.86338973045349 +GraphTM,0.05,10000,10.0,23,10,CUDA,135.2427453994751,94.86338797814207 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,964.5819866657257,34.56284153005464 +Graph NN,0.1,0,0,0,20000,CPU,459.15181946754456,71.22950553894043 +GraphTM,0.1,10000,10.0,23,10,CUDA,148.52941298484802,89.67213114754098 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,981.4810082912445,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,356.59899377822876,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.7598683834076,76.85792349726775 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,959.9282560348511,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,378.94336581230164,80.32786846160889 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.55144882202148,98.44262295081967 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.1284465789795,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,407.1111581325531,94.31694149971008 +GraphTM,0.01,10000,10.0,23,10,CUDA,112.06348276138306,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.711061000824,39.65163934426229 +Graph NN,0.02,0,0,0,20000,CPU,402.2970163822174,79.80874180793762 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.20444130897522,97.8415300546448 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,998.2885782718658,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,400.97751235961914,85.30054688453674 +GraphTM,0.05,10000,10.0,23,10,CUDA,136.81029963493347,94.78142076502732 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1003.2194263935089,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,413.25741934776306,74.59016442298889 +GraphTM,0.1,10000,10.0,23,10,CUDA,148.70455861091614,89.89071038251366 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,974.4099938869476,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,369.36416029930115,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,170.01750564575195,78.55191256830601 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,990.2080008983612,20.184426229508194 +Graph NN,0.005,0,0,0,20000,CPU,440.5256702899933,90.4644787311554 +GraphTM,0.005,10000,10.0,23,10,CUDA,109.76434278488159,98.55191256830601 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1004.704318523407,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,385.76011848449707,77.62295007705688 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.28425002098083,98.44262295081967 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,953.8945541381836,74.93169398907104 +Graph NN,0.02,0,0,0,20000,CPU,422.2995481491089,90.71038365364075 +GraphTM,0.02,10000,10.0,23,10,CUDA,121.29091334342957,97.6775956284153 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1002.099497795105,72.1311475409836 +Graph NN,0.05,0,0,0,20000,CPU,383.33483958244324,81.8306028842926 +GraphTM,0.05,10000,10.0,23,10,CUDA,134.72863698005676,94.53551912568307 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,936.831921339035,64.1051912568306 +Graph NN,0.1,0,0,0,20000,CPU,320.32143545150757,83.60655903816223 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.56500816345215,89.15300546448087 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,955.8687121868134,49.62431693989071 +Graph NN,0.2,0,0,0,20000,CPU,432.34014868736267,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.61127710342407,79.12568306010928 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,945.0617082118988,20.116120218579233 +Graph NN,0.005,0,0,0,20000,CPU,458.87039852142334,79.37158346176147 +GraphTM,0.005,10000,10.0,23,10,CUDA,110.9952290058136,98.82513661202185 +TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,985.8775904178619,76.63934426229508 +Graph NN,0.01,0,0,0,20000,CPU,453.55728340148926,76.06557607650757 +GraphTM,0.01,10000,10.0,23,10,CUDA,113.85269451141357,98.27868852459017 +TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.0662143230438,75.06830601092896 +Graph NN,0.02,0,0,0,20000,CPU,416.2407822608948,91.66666865348816 +GraphTM,0.02,10000,10.0,23,10,CUDA,120.69959592819214,97.78688524590164 +TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.9127674102783,72.40437158469946 +Graph NN,0.05,0,0,0,20000,CPU,311.2621831893921,75.46448111534119 +GraphTM,0.05,10000,10.0,23,10,CUDA,134.66055345535278,94.89071038251366 +TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,953.3380017280579,63.25136612021858 +Graph NN,0.1,0,0,0,20000,CPU,425.43416261672974,73.79781603813171 +GraphTM,0.1,10000,10.0,23,10,CUDA,150.67951107025146,90.27322404371586 +TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.5897221565247,49.59016393442623 +Graph NN,0.2,0,0,0,20000,CPU,379.8497235774994,64.15300369262695 +GraphTM,0.2,10000,10.0,23,10,CUDA,169.7126281261444,77.81420765027323 +TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,955.9427745342255,20.116120218579233 diff --git a/examples/recomm_system/graph_nn.py b/examples/recomm_system/graph_nn.py index 9ef5fbed..ef6922a7 100644 --- a/examples/recomm_system/graph_nn.py +++ b/examples/recomm_system/graph_nn.py @@ -94,6 +94,7 @@ def forward(self, x, edge_index): total_time = benchmark_total.elapsed() # Append results for each epoch results.append({ + "Exp_id": args.exp_id, "Algorithm": "Graph NN", "Noise_Ratio": args.dataset_noise_ratio, "T": 0, @@ -118,8 +119,9 @@ def forward(self, x, edge_index): def default_args(**kwargs): parser = argparse.ArgumentParser() parser.add_argument("--platform", default="CPU", type=str, choices=["CPU", "CUDA"]) - parser.add_argument("--epochs", default=20000, type=int) + parser.add_argument("--epochs", default=2000, type=int) parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) + parser.add_argument("--exp_id", default="", type=str) args = parser.parse_args() for key, value in kwargs.items(): if key in args.__dict__: diff --git a/examples/recomm_system/graph_tm.py b/examples/recomm_system/graph_tm.py index d03d3be9..27c30828 100644 --- a/examples/recomm_system/graph_tm.py +++ b/examples/recomm_system/graph_tm.py @@ -127,6 +127,7 @@ def main(args): total_time = benchmark_total.elapsed() # result_train = 100*(tm.predict(graphs_train) == Y_train).mean() results.append({ + "Exp_id": args.exp_id, "Algorithm": "GraphTM", "Noise_Ratio": args.dataset_noise_ratio, "T": args.T, @@ -163,6 +164,7 @@ def default_args(**kwargs): parser.add_argument("--noise", default=0.01, type=float) parser.add_argument("--max-included-literals", default=23, type=int) parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) + parser.add_argument("--exp_id", default="", type=str) args = parser.parse_args() for key, value in kwargs.items(): if key in args.__dict__: diff --git a/examples/recomm_system/main.sh b/examples/recomm_system/main.sh index a5db0425..82b03778 100644 --- a/examples/recomm_system/main.sh +++ b/examples/recomm_system/main.sh @@ -6,6 +6,9 @@ set -e # exit if error models="graph_tm tm_classifier graph_nn" dataset_noise_ratios="0.005 0.01 0.02 0.05 0.1 0.2" num_iterations=10 # Number of times to repeat the experiments +exp_id=$(date +%Y%m%d%H%M%S) + +echo 'Experiment ID: ' $exp_id for (( i=1; i<=num_iterations; i++ )) do @@ -13,13 +16,13 @@ do for N in $dataset_noise_ratios; do echo `date`, Running Graph NN ... - python3 graph_nn.py --dataset_noise_ratio $N + python3 graph_nn.py --dataset_noise_ratio $N --exp_id $exp_id echo `date`, Running Graph Tsetlin Machine ... - python3 graph_tm.py --dataset_noise_ratio $N + python3 graph_tm.py --dataset_noise_ratio $N --exp_id $exp_id echo `date`, Running Tsetlin Machine Classifier ... - python3 tm_classifier.py --dataset_noise_ratio $N + python3 tm_classifier.py --dataset_noise_ratio $N --exp_id $exp_id done done diff --git a/examples/recomm_system/test.ipynb b/examples/recomm_system/test.ipynb index 4e44624f..9873a435 100644 --- a/examples/recomm_system/test.ipynb +++ b/examples/recomm_system/test.ipynb @@ -67,40 +67,13 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " Algorithm Noise_Ratio T s Max_Included_Literals Epochs \\\n", - "0 Graph NN 0.005 0 0.0 0 20000 \n", - "1 GraphTM 0.005 10000 10.0 23 10 \n", - "2 TMClassifier 0.005 10000 10.0 32 10 \n", - "3 Graph NN 0.010 0 0.0 0 20000 \n", - "4 GraphTM 0.010 10000 10.0 23 10 \n", - ".. ... ... ... ... ... ... \n", - "175 GraphTM 0.100 10000 10.0 23 10 \n", - "176 TMClassifier 0.100 10000 10.0 32 10 \n", - "177 Graph NN 0.200 0 0.0 0 20000 \n", - "178 GraphTM 0.200 10000 10.0 23 10 \n", - "179 TMClassifier 0.200 10000 10.0 32 10 \n", - "\n", - " Platform Total_Time Accuracy \n", - "0 CPU 418.925047 75.628418 \n", - "1 CUDA 110.356832 98.688525 \n", - "2 CPU_sparse 1059.163476 76.810109 \n", - "3 CPU 550.698057 94.508195 \n", - "4 CUDA 114.062763 98.415301 \n", - ".. ... ... ... \n", - "175 CUDA 150.679511 90.273224 \n", - "176 CPU_sparse 967.589722 49.590164 \n", - "177 CPU 379.849724 64.153004 \n", - "178 CUDA 169.712628 77.814208 \n", - "179 CPU_sparse 955.942775 20.116120 \n", - "\n", - "[180 rows x 9 columns]\n", "\n", "\\begin{table}[h!]\n", "\\centering\n", @@ -128,7 +101,7 @@ "# This assumes each algorithm data spans three consecutive rows\n", "start_index = 0\n", "range_records = data.iloc[start_index:len(data)]\n", - "print(range_records)\n", + "# print(range_records)\n", "# Create a dictionary to store the accuracy values\n", "noise_accuracies = {}\n", "\n", diff --git a/examples/recomm_system/tm_classifier.py b/examples/recomm_system/tm_classifier.py index 876f8c4f..cb6cb458 100644 --- a/examples/recomm_system/tm_classifier.py +++ b/examples/recomm_system/tm_classifier.py @@ -34,6 +34,7 @@ def main(args): # Append results for each epoch results.append({ + "Exp_id": args.exp_id, "Algorithm": "TMClassifier", "Noise_Ratio": args.dataset_noise_ratio, "T": args.T, @@ -64,6 +65,7 @@ def default_args(**kwargs): parser.add_argument("--weighted_clauses", default=True, type=bool) parser.add_argument("--epochs", default=10, type=int) parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) + parser.add_argument("--exp_id", default="", type=str) args = parser.parse_args() for key, value in kwargs.items(): if key in args.__dict__: From f057bbe0829815da8fc7a8edff522031161a1272 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Fri, 28 Feb 2025 07:39:30 +0000 Subject: [PATCH 25/35] update --- examples/recomm_system/experiment_results.csv | 94 +++++++++++++++++++ examples/recomm_system/test.ipynb | 25 +++-- 2 files changed, 106 insertions(+), 13 deletions(-) diff --git a/examples/recomm_system/experiment_results.csv b/examples/recomm_system/experiment_results.csv index 09e4f8e7..a2902234 100644 --- a/examples/recomm_system/experiment_results.csv +++ b/examples/recomm_system/experiment_results.csv @@ -1,2 +1,96 @@ Exp_id,Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy 20250225083536,Graph NN,0.005,0,0,0,2000,CPU,44.10563063621521,80.87431788444519 +20250225090119,Graph NN,0.005,0,0,0,2000,CPU,49.34887194633484,84.45355296134949 +20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,109.94287848472595,98.82513661202185 +20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.8344459533691,76.63934426229508 +20250225090119,Graph NN,0.01,0,0,0,2000,CPU,36.30448269844055,81.99453353881836 +20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,113.23237609863281,98.4153005464481 +20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,936.9574060440063,74.93169398907104 +20250225090119,Graph NN,0.02,0,0,0,2000,CPU,38.477863073349,87.54098415374756 +20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.61202812194824,97.73224043715847 +20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1001.9182693958282,72.1311475409836 +20250225090119,Graph NN,0.05,0,0,0,2000,CPU,48.03118896484375,79.20765280723572 +20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,135.30033922195435,95.10928961748634 +20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,962.4823818206787,64.17349726775956 +20250225090119,Graph NN,0.1,0,0,0,2000,CPU,35.70058226585388,73.55191111564636 +20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,150.0443034172058,90.19125683060109 +20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,936.1979103088379,49.35109289617486 +20250225090119,Graph NN,0.2,0,0,0,2000,CPU,40.174824714660645,63.22404146194458 +20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,169.9642357826233,77.95081967213115 +20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,959.6620714664459,20.116120218579233 +20250225090119,Graph NN,0.005,0,0,0,2000,CPU,35.725218534469604,89.75409865379333 +20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,110.31502270698547,98.60655737704917 +20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1024.4315028190613,76.74180327868852 +20250225090119,Graph NN,0.01,0,0,0,2000,CPU,32.86650729179382,83.03278684616089 +20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,112.99009418487549,98.4153005464481 +20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1040.9654848575592,73.49726775956285 +20250225090119,Graph NN,0.02,0,0,0,2000,CPU,29.535728454589844,88.63387703895569 +20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.96075296401978,97.78688524590164 +20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1054.357099056244,72.78005464480874 +20250225090119,Graph NN,0.05,0,0,0,2000,CPU,47.468485832214355,75.10929107666016 +20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,134.4755368232727,95.08196721311475 +20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,949.9652540683746,63.79781420765027 +20250225090119,Graph NN,0.1,0,0,0,2000,CPU,38.58360719680786,71.967214345932 +20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,148.94670748710632,90.1639344262295 +20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1027.843326807022,49.14617486338798 +20250225090119,Graph NN,0.2,0,0,0,2000,CPU,37.01042413711548,66.42076373100281 +20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,169.78875064849854,79.94535519125682 +20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1019.9154229164124,20.116120218579233 +20250225090119,Graph NN,0.005,0,0,0,2000,CPU,46.6854362487793,75.84699392318726 +20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,110.07307553291321,98.82513661202185 +20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1019.9013290405273,76.74180327868852 +20250225090119,Graph NN,0.01,0,0,0,2000,CPU,41.087942600250244,83.77048969268799 +20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,112.69408297538757,98.4153005464481 +20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1012.4928967952728,75.10245901639344 +20250225090119,Graph NN,0.02,0,0,0,2000,CPU,42.92523193359375,88.44262361526489 +20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.11772298812866,97.59562841530055 +20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1006.3243997097015,72.1311475409836 +20250225090119,Graph NN,0.05,0,0,0,2000,CPU,36.374452352523804,85.49180030822754 +20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,134.70963144302368,94.15300546448087 +20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,959.455883026123,64.00273224043715 +20250225090119,Graph NN,0.1,0,0,0,2000,CPU,39.68649101257324,78.68852615356445 +20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,151.08690643310547,89.31693989071037 +20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1008.2197906970978,49.24863387978142 +20250225090119,Graph NN,0.2,0,0,0,2000,CPU,36.5257625579834,67.73223876953125 +20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,170.00959873199463,76.66666666666667 +20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,974.8701865673065,20.116120218579233 +20250225090119,Graph NN,0.005,0,0,0,2000,CPU,42.808833599090576,87.62295246124268 +20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,110.3779969215393,98.63387978142076 +20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,959.8772912025452,76.63934426229508 +20250225090119,Graph NN,0.01,0,0,0,2000,CPU,42.59048676490784,82.07650184631348 +20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,113.87734937667847,98.4153005464481 +20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,990.1339011192322,74.93169398907104 +20250225090119,Graph NN,0.02,0,0,0,2000,CPU,35.95067048072815,79.64481115341187 +20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.58509016036987,97.8415300546448 +20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,976.5062215328217,71.9603825136612 +20250225090119,Graph NN,0.05,0,0,0,2000,CPU,49.44124245643616,76.09289884567261 +20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,136.56197214126587,94.89071038251366 +20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,971.7774770259857,63.25136612021858 +20250225090119,Graph NN,0.1,0,0,0,2000,CPU,45.797210931777954,73.5792338848114 +20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,149.67395901679993,89.23497267759562 +20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,979.9483859539032,49.59016393442623 +20250225090119,Graph NN,0.2,0,0,0,2000,CPU,41.42583513259888,68.27868819236755 +20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,170.87367057800293,79.18032786885246 +20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,961.5906836986542,20.081967213114755 +20250225090119,Graph NN,0.005,0,0,0,2000,CPU,43.93612337112427,79.20765280723572 +20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,109.73634815216064,98.63387978142076 +20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,965.0153555870056,76.63934426229508 +20250225090119,Graph NN,0.01,0,0,0,2000,CPU,49.67618227005005,92.45901703834534 +20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,113.5588014125824,98.4153005464481 +20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,983.9533984661102,74.4535519125683 +20250225090119,Graph NN,0.02,0,0,0,2000,CPU,36.16115427017212,80.87431788444519 +20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.58146834373474,97.81420765027322 +20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,944.9977910518646,71.51639344262296 +20250225090119,Graph NN,0.05,0,0,0,2000,CPU,48.164318561553955,83.77048969268799 +20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,135.97020173072815,94.75409836065573 +20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,937.3424286842346,64.1051912568306 +20250225090119,Graph NN,0.1,0,0,0,2000,CPU,46.862754344940186,70.84699273109436 +20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,149.9700825214386,89.72677595628416 +20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,990.8207032680511,49.86338797814208 +20250225090119,Graph NN,0.2,0,0,0,2000,CPU,48.0979220867157,63.66119980812073 +20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,170.79332089424133,78.63387978142077 +20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,990.5863327980042,20.116120218579233 +20250225090119,Graph NN,0.005,0,0,0,2000,CPU,39.39827084541321,83.2513689994812 +20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,109.96842241287231,98.52459016393442 +20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,941.0268743038177,76.63934426229508 +20250225090119,Graph NN,0.01,0,0,0,2000,CPU,37.69904541969299,93.44262480735779 diff --git a/examples/recomm_system/test.ipynb b/examples/recomm_system/test.ipynb index 9873a435..c5c06961 100644 --- a/examples/recomm_system/test.ipynb +++ b/examples/recomm_system/test.ipynb @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -80,12 +80,12 @@ "\\begin{tabular}{|c|c|c|c|}\n", "\\hline\n", "\\textbf{Noise Ratio} & \\textbf{GCN (\\%)} & \\textbf{GTM (\\%)} & \\textbf{TMClassifier (\\%)} \\\\ \\hline\n", - "0.005 & 81.73 & 98.62 & 76.70 \\\\ \\hline\n", - "0.01 & 84.73 & 98.34 & 71.43 \\\\ \\hline\n", - "0.02 & 87.81 & 97.76 & 69.09 \\\\ \\hline\n", - "0.05 & 79.86 & 94.74 & 61.04 \\\\ \\hline\n", - "0.1 & 76.40 & 89.82 & 49.60 \\\\ \\hline\n", - "0.2 & 65.90 & 78.22 & 20.12 \\\\ \\hline\n", + "0.005 & 83.36 & 98.67 & 76.67 \\\\ \\hline\n", + "0.01 & 86.13 & 98.42 & 74.58 \\\\ \\hline\n", + "0.02 & 85.03 & 97.75 & 72.10 \\\\ \\hline\n", + "0.05 & 79.93 & 94.80 & 63.87 \\\\ \\hline\n", + "0.1 & 73.73 & 89.73 & 49.44 \\\\ \\hline\n", + "0.2 & 65.86 & 78.48 & 20.11 \\\\ \\hline\n", "\\end{tabular}\n", "\\caption{Average accuracy comparison of GCN, GraphTM, and TMClassifier for varying noise ratios.}\n", "\\label{tab:recomm_sys_accuracy}\n", @@ -96,18 +96,17 @@ "source": [ "import pandas as pd\n", "data = pd.read_csv(\"experiment_results.csv\")\n", + "exp_id = \"20250225090119\" \n", + "data['Exp_id'] = data['Exp_id'].astype(str)\n", + "filtered_data = data[data['Exp_id'] == exp_id]\n", + "# print(filtered_data)\n", "\n", - "# Extract records within the specified range, e.g., rows 3 to 5 (0-indexed)\n", - "# This assumes each algorithm data spans three consecutive rows\n", - "start_index = 0\n", - "range_records = data.iloc[start_index:len(data)]\n", - "# print(range_records)\n", "# Create a dictionary to store the accuracy values\n", "noise_accuracies = {}\n", "\n", "# Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy\n", "# Group the data by Algorithm and Noise Ratio to calculate average accuracies\n", - "grouped_data = data.groupby(['Algorithm', 'Noise_Ratio']).agg({'Accuracy': 'mean'}).reset_index()\n", + "grouped_data = filtered_data.groupby(['Algorithm', 'Noise_Ratio']).agg({'Accuracy': 'mean'}).reset_index()\n", "\n", "# Pivot the data to get a structure suitable for LaTeX table generation\n", "pivot_data = grouped_data.pivot(index='Noise_Ratio', columns='Algorithm', values='Accuracy')\n", From de8eb1b65a68af29572ac6c9c370207845ab9fc1 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Fri, 28 Feb 2025 07:40:11 +0000 Subject: [PATCH 26/35] update --- examples/recomm_system/test.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/recomm_system/test.ipynb b/examples/recomm_system/test.ipynb index c5c06961..07b30e69 100644 --- a/examples/recomm_system/test.ipynb +++ b/examples/recomm_system/test.ipynb @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 1, "metadata": {}, "outputs": [ { From bfdf40c91faef3868a184e64813dfbb5da077487 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Thu, 10 Apr 2025 10:19:34 +0000 Subject: [PATCH 27/35] rerun --- examples/recomm_system/experiment_results.csv | 275 ++++++++++++------ .../experiment_results_ensamble.csv | 181 ------------ .../recomm_system/experiment_results_old.csv | 271 ----------------- examples/recomm_system/test.ipynb | 16 +- 4 files changed, 188 insertions(+), 555 deletions(-) delete mode 100644 examples/recomm_system/experiment_results_ensamble.csv delete mode 100644 examples/recomm_system/experiment_results_old.csv diff --git a/examples/recomm_system/experiment_results.csv b/examples/recomm_system/experiment_results.csv index a2902234..45da5c4e 100644 --- a/examples/recomm_system/experiment_results.csv +++ b/examples/recomm_system/experiment_results.csv @@ -1,96 +1,181 @@ Exp_id,Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy -20250225083536,Graph NN,0.005,0,0,0,2000,CPU,44.10563063621521,80.87431788444519 -20250225090119,Graph NN,0.005,0,0,0,2000,CPU,49.34887194633484,84.45355296134949 -20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,109.94287848472595,98.82513661202185 -20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.8344459533691,76.63934426229508 -20250225090119,Graph NN,0.01,0,0,0,2000,CPU,36.30448269844055,81.99453353881836 -20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,113.23237609863281,98.4153005464481 -20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,936.9574060440063,74.93169398907104 -20250225090119,Graph NN,0.02,0,0,0,2000,CPU,38.477863073349,87.54098415374756 -20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.61202812194824,97.73224043715847 -20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1001.9182693958282,72.1311475409836 -20250225090119,Graph NN,0.05,0,0,0,2000,CPU,48.03118896484375,79.20765280723572 -20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,135.30033922195435,95.10928961748634 -20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,962.4823818206787,64.17349726775956 -20250225090119,Graph NN,0.1,0,0,0,2000,CPU,35.70058226585388,73.55191111564636 -20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,150.0443034172058,90.19125683060109 -20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,936.1979103088379,49.35109289617486 -20250225090119,Graph NN,0.2,0,0,0,2000,CPU,40.174824714660645,63.22404146194458 -20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,169.9642357826233,77.95081967213115 -20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,959.6620714664459,20.116120218579233 -20250225090119,Graph NN,0.005,0,0,0,2000,CPU,35.725218534469604,89.75409865379333 -20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,110.31502270698547,98.60655737704917 -20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1024.4315028190613,76.74180327868852 -20250225090119,Graph NN,0.01,0,0,0,2000,CPU,32.86650729179382,83.03278684616089 -20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,112.99009418487549,98.4153005464481 -20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1040.9654848575592,73.49726775956285 -20250225090119,Graph NN,0.02,0,0,0,2000,CPU,29.535728454589844,88.63387703895569 -20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.96075296401978,97.78688524590164 -20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1054.357099056244,72.78005464480874 -20250225090119,Graph NN,0.05,0,0,0,2000,CPU,47.468485832214355,75.10929107666016 -20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,134.4755368232727,95.08196721311475 -20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,949.9652540683746,63.79781420765027 -20250225090119,Graph NN,0.1,0,0,0,2000,CPU,38.58360719680786,71.967214345932 -20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,148.94670748710632,90.1639344262295 -20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1027.843326807022,49.14617486338798 -20250225090119,Graph NN,0.2,0,0,0,2000,CPU,37.01042413711548,66.42076373100281 -20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,169.78875064849854,79.94535519125682 -20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1019.9154229164124,20.116120218579233 -20250225090119,Graph NN,0.005,0,0,0,2000,CPU,46.6854362487793,75.84699392318726 -20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,110.07307553291321,98.82513661202185 -20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1019.9013290405273,76.74180327868852 -20250225090119,Graph NN,0.01,0,0,0,2000,CPU,41.087942600250244,83.77048969268799 -20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,112.69408297538757,98.4153005464481 -20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1012.4928967952728,75.10245901639344 -20250225090119,Graph NN,0.02,0,0,0,2000,CPU,42.92523193359375,88.44262361526489 -20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.11772298812866,97.59562841530055 -20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1006.3243997097015,72.1311475409836 -20250225090119,Graph NN,0.05,0,0,0,2000,CPU,36.374452352523804,85.49180030822754 -20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,134.70963144302368,94.15300546448087 -20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,959.455883026123,64.00273224043715 -20250225090119,Graph NN,0.1,0,0,0,2000,CPU,39.68649101257324,78.68852615356445 -20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,151.08690643310547,89.31693989071037 -20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1008.2197906970978,49.24863387978142 -20250225090119,Graph NN,0.2,0,0,0,2000,CPU,36.5257625579834,67.73223876953125 -20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,170.00959873199463,76.66666666666667 -20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,974.8701865673065,20.116120218579233 -20250225090119,Graph NN,0.005,0,0,0,2000,CPU,42.808833599090576,87.62295246124268 -20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,110.3779969215393,98.63387978142076 -20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,959.8772912025452,76.63934426229508 -20250225090119,Graph NN,0.01,0,0,0,2000,CPU,42.59048676490784,82.07650184631348 -20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,113.87734937667847,98.4153005464481 -20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,990.1339011192322,74.93169398907104 -20250225090119,Graph NN,0.02,0,0,0,2000,CPU,35.95067048072815,79.64481115341187 -20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.58509016036987,97.8415300546448 -20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,976.5062215328217,71.9603825136612 -20250225090119,Graph NN,0.05,0,0,0,2000,CPU,49.44124245643616,76.09289884567261 -20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,136.56197214126587,94.89071038251366 -20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,971.7774770259857,63.25136612021858 -20250225090119,Graph NN,0.1,0,0,0,2000,CPU,45.797210931777954,73.5792338848114 -20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,149.67395901679993,89.23497267759562 -20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,979.9483859539032,49.59016393442623 -20250225090119,Graph NN,0.2,0,0,0,2000,CPU,41.42583513259888,68.27868819236755 -20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,170.87367057800293,79.18032786885246 -20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,961.5906836986542,20.081967213114755 -20250225090119,Graph NN,0.005,0,0,0,2000,CPU,43.93612337112427,79.20765280723572 -20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,109.73634815216064,98.63387978142076 -20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,965.0153555870056,76.63934426229508 -20250225090119,Graph NN,0.01,0,0,0,2000,CPU,49.67618227005005,92.45901703834534 -20250225090119,GraphTM,0.01,10000,10.0,23,10,CUDA,113.5588014125824,98.4153005464481 -20250225090119,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,983.9533984661102,74.4535519125683 -20250225090119,Graph NN,0.02,0,0,0,2000,CPU,36.16115427017212,80.87431788444519 -20250225090119,GraphTM,0.02,10000,10.0,23,10,CUDA,120.58146834373474,97.81420765027322 -20250225090119,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,944.9977910518646,71.51639344262296 -20250225090119,Graph NN,0.05,0,0,0,2000,CPU,48.164318561553955,83.77048969268799 -20250225090119,GraphTM,0.05,10000,10.0,23,10,CUDA,135.97020173072815,94.75409836065573 -20250225090119,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,937.3424286842346,64.1051912568306 -20250225090119,Graph NN,0.1,0,0,0,2000,CPU,46.862754344940186,70.84699273109436 -20250225090119,GraphTM,0.1,10000,10.0,23,10,CUDA,149.9700825214386,89.72677595628416 -20250225090119,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,990.8207032680511,49.86338797814208 -20250225090119,Graph NN,0.2,0,0,0,2000,CPU,48.0979220867157,63.66119980812073 -20250225090119,GraphTM,0.2,10000,10.0,23,10,CUDA,170.79332089424133,78.63387978142077 -20250225090119,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,990.5863327980042,20.116120218579233 -20250225090119,Graph NN,0.005,0,0,0,2000,CPU,39.39827084541321,83.2513689994812 -20250225090119,GraphTM,0.005,10000,10.0,23,10,CUDA,109.96842241287231,98.52459016393442 -20250225090119,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,941.0268743038177,76.63934426229508 -20250225090119,Graph NN,0.01,0,0,0,2000,CPU,37.69904541969299,93.44262480735779 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,47.380565881729126,84.23497080802917 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.12741780281067,98.63387978142076 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1190.9095215797424,77.11748633879782 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,49.00558853149414,92.65027046203613 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.65191793441772,98.44262295081967 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1020.6083555221558,74.86338797814209 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,44.6860625743866,77.13114619255066 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.2872724533081,97.78688524590164 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1246.0178999900818,72.40437158469946 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,82.58793544769287,88.46994638442993 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,137.15939092636108,94.39890710382514 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1317.742176771164,63.25136612021858 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,54.852065563201904,76.4207661151886 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,151.09674072265625,89.89071038251366 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1123.5956239700317,49.59016393442623 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,51.210848808288574,68.93442869186401 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.72992277145386,78.5792349726776 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1148.6567842960358,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,48.660605907440186,86.63934469223022 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.17098808288574,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1061.7185904979706,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,49.778627157211304,95.76502442359924 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.88378477096558,98.4153005464481 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1058.3029556274414,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,39.869826555252075,76.5573799610138 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.86488842964172,97.6775956284153 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1157.85533452034,72.40437158469946 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,39.27051615715027,80.21857738494873 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,137.07859206199646,94.42622950819673 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1060.4789934158325,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,41.18854546546936,78.032785654068 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.01649594306946,89.86338797814207 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1074.8029758930206,49.21448087431694 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.942272901535034,68.22404265403748 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.39786314964294,78.0327868852459 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1051.4041996002197,20.081967213114755 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,48.943641662597656,80.43715953826904 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,111.18853044509888,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1000.6668944358826,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,34.4648540019989,84.59016680717468 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.77461814880371,98.27868852459017 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1045.2479929924011,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,40.32768535614014,77.40437388420105 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.75347566604614,97.8415300546448 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1042.6038060188293,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,49.051427602767944,76.85792446136475 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,135.81657576560974,94.89071038251366 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1049.5465006828308,63.69535519125683 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,50.19066071510315,74.07103776931763 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.23873829841614,89.69945355191257 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1161.7163217067719,48.80464480874317 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.93249225616455,63.06011080741882 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,169.8643877506256,79.20765027322403 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,968.4304020404816,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,46.011924266815186,80.24590015411377 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,109.72403120994568,98.66120218579235 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1174.494342327118,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,41.743159532547,80.02732396125793 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.41021490097046,98.4153005464481 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1171.6064977645874,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,44.349541664123535,87.45901584625244 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.4791738986969,97.45901639344262 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,952.0120975971222,71.65300546448088 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,48.69317936897278,75.92896223068237 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.3904469013214,94.4535519125683 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,969.868058681488,64.00273224043715 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,44.044572591781616,70.8743155002594 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,149.6289074420929,89.8360655737705 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,953.6086061000824,50.10245901639344 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,44.549598932266235,61.284154653549194 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.53832936286926,79.53551912568307 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,972.7086639404297,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,47.114877223968506,81.69398903846741 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,109.53987145423889,98.68852459016394 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,957.2526223659515,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,37.89606070518494,85.65573692321777 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.25655388832092,98.30601092896175 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1173.4506571292877,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,47.68080997467041,83.36065411567688 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.15364933013916,97.8688524590164 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1153.5412156581879,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,41.10796904563904,83.41529965400696 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.6818916797638,95.0 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,967.7902429103851,63.25136612021858 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,36.63528251647949,82.81420469284058 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.54849863052368,89.31693989071037 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,965.3704278469086,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.28898596763611,64.61748480796814 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,169.49659419059753,79.97267759562841 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1158.38462972641,20.21857923497268 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,43.29892086982727,77.95081734657288 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.77093839645386,98.68852459016394 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.0426867008209,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,40.48178577423096,91.17486476898193 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.66628408432007,98.3879781420765 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1151.3295328617096,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,46.342252254486084,91.42076373100281 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.12805104255676,97.70491803278688 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,956.9201290607452,72.37021857923497 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,48.09459686279297,90.16393423080444 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.35990571975708,94.31693989071039 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,951.3514447212219,64.00273224043715 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,47.61181974411011,77.04917788505554 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,149.66685557365417,90.40983606557377 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1159.4669754505157,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.52361035346985,61.666667461395264 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45302724838257,79.09836065573771 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,942.1310601234436,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,42.33190155029297,80.79234957695007 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.67640900611877,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1151.425032377243,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,46.83778142929077,79.94535565376282 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.82480311393738,98.25136612021858 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,959.6910009384155,74.86338797814209 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,46.91451978683472,79.26229238510132 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.25436019897461,97.81420765027322 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.5784142017365,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,45.216925859451294,79.56284284591675 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.08299708366394,94.89071038251366 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,941.2294843196869,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,35.09868001937866,70.24590373039246 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.008531332016,89.97267759562841 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.8004837036133,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.60944890975952,60.76502799987793 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.61232328414917,78.52459016393442 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1174.2148485183716,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,44.02885293960571,86.72131299972534 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.33011960983276,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.813972711563,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,34.82557439804077,91.83059930801392 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.68903136253357,98.30601092896175 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1142.874398946762,74.86338797814209 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,38.12274146080017,84.09836292266846 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.88822174072266,97.89617486338797 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,958.9832980632782,72.60928961748634 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,47.38658022880554,83.63388180732727 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.52869582176208,95.0 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,982.7437946796417,64.00273224043715 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,50.3098578453064,78.49726676940918 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.58712220191956,90.10928961748634 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,952.3902399539948,48.97540983606557 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,47.68881940841675,67.54098534584045 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.5669903755188,78.44262295081967 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1160.643584728241,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,42.35506534576416,80.71038126945496 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.72827911376953,98.46994535519126 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1161.2603483200073,76.70765027322405 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,44.48380947113037,75.95628499984741 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.78427290916443,98.4153005464481 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1164.732885837555,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,41.45829200744629,88.27868700027466 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.14582562446594,97.62295081967213 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.4570569992065,72.40437158469946 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,44.6593804359436,75.7377028465271 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.09871077537537,94.72677595628414 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1170.4177556037903,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,41.33125162124634,78.38797569274902 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.5243456363678,89.61748633879782 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,940.6334030628204,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,43.79690456390381,63.387978076934814 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.47909784317017,77.34972677595628 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,951.3798985481262,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,44.20913028717041,94.4535493850708 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.41194748878479,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.4012093544006,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,43.56287693977356,77.86885499954224 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.86108899116516,98.25136612021858 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1165.0554220676422,74.55601092896174 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,43.18827676773071,90.76502919197083 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.40065360069275,97.6775956284153 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1142.509984254837,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,46.11475706100464,87.2950792312622 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.23513627052307,93.98907103825137 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1018.888409614563,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,46.72879457473755,72.92349934577942 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.53106451034546,89.75409836065575 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1152.1242747306824,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.78840351104736,61.72131299972534 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45607113838196,78.5792349726776 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1150.6887817382812,20.184426229508194 diff --git a/examples/recomm_system/experiment_results_ensamble.csv b/examples/recomm_system/experiment_results_ensamble.csv deleted file mode 100644 index b394dad6..00000000 --- a/examples/recomm_system/experiment_results_ensamble.csv +++ /dev/null @@ -1,181 +0,0 @@ -Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy -Graph NN,0.005,0,0,0,20000,CPU,418.9250466823578,75.62841773033142 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.35683226585388,98.68852459016394 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1059.1634759902954,76.81010928961749 -Graph NN,0.01,0,0,0,20000,CPU,550.6980571746826,94.50819492340088 -GraphTM,0.01,10000,10.0,23,10,CUDA,114.06276345252991,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1051.916612625122,75.3415300546448 -Graph NN,0.02,0,0,0,20000,CPU,475.44024682044983,75.30054450035095 -GraphTM,0.02,10000,10.0,23,10,CUDA,121.55624794960022,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1043.9487817287445,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,411.8552327156067,80.98360896110535 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.7814338207245,94.20765027322405 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1044.2656917572021,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,484.6550889015198,68.7158465385437 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.34457921981812,89.72677595628416 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1061.191523551941,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,483.8463816642761,71.28415107727051 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.18810439109802,78.49726775956285 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1071.927158355713,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,473.5806052684784,86.36612296104431 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.18979954719543,98.60655737704917 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,979.0509588718414,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,444.6897065639496,93.55190992355347 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.48035550117493,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1007.9654748439789,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,386.32835030555725,93.22404265403748 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.46316766738892,97.73224043715847 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1017.5866801738739,73.25819672131148 -Graph NN,0.05,0,0,0,20000,CPU,417.78410935401917,73.1693983078003 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.64952206611633,95.08196721311475 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,945.0465729236603,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,481.6537721157074,77.18579173088074 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.57958960533142,90.08196721311475 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,938.0212676525116,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,391.36059975624084,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.49347591400146,77.65027322404372 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,940.9758951663971,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,480.5005066394806,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.65927052497864,98.19672131147541 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.7581994533539,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,449.22584795951843,76.36612057685852 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.07226181030273,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1010.8711988925934,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,403.96647000312805,96.85792326927185 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.02044725418091,97.78688524590164 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1011.7896072864532,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,460.688773393631,85.00000238418579 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.04891228675842,94.69945355191257 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1014.1492829322815,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,407.9346880912781,74.1256833076477 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.6586093902588,90.08196721311475 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,990.8282098770142,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,437.8108870983124,65.60109257698059 -GraphTM,0.2,10000,10.0,23,10,CUDA,168.44772601127625,78.93442622950819 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1022.1848647594452,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,430.3925087451935,89.20764923095703 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.6658935546875,98.68852459016394 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1016.199923992157,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,396.3338620662689,84.23497080802917 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.67849016189575,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,944.4602844715118,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,434.91951632499695,93.25136542320251 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.31921482086182,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,933.2245874404907,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,483.2671537399292,80.32786846160889 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.68922591209412,94.78142076502732 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,994.6384744644165,64.13934426229508 -Graph NN,0.1,0,0,0,20000,CPU,424.9935986995697,81.33879899978638 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.08107113838196,89.59016393442623 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,944.0273253917694,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,333.49274706840515,61.50273084640503 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.906751871109,78.98907103825137 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,965.9725024700165,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,377.28471970558167,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.61631536483765,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,976.8008840084076,76.67349726775956 -Graph NN,0.01,0,0,0,20000,CPU,473.2922372817993,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.87212014198303,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,942.7254059314728,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,357.36573815345764,75.40983557701111 -GraphTM,0.02,10000,10.0,23,10,CUDA,119.41612005233765,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,985.81947016716,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,440.75843334198,73.08743000030518 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.8215868473053,94.91803278688525 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,997.739678144455,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,426.73446226119995,88.55191469192505 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.54467248916626,89.94535519125682 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,980.096907377243,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,387.20843958854675,75.71038007736206 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.7962884902954,77.56830601092896 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,987.0616261959076,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,455.586905002594,83.41529965400696 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.7424705028534,98.5792349726776 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,998.4698519706726,76.81010928961749 -Graph NN,0.01,0,0,0,20000,CPU,466.44022035598755,98.52458834648132 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.78495740890503,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,932.3163437843323,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,455.35024762153625,88.96175026893616 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.741384267807,97.75956284153006 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,974.3740100860596,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,399.9565739631653,73.60655665397644 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.17181992530823,94.67213114754098 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,971.1499485969543,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,447.5498752593994,70.8743155002594 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.6928951740265,89.80874316939891 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,962.4737737178802,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,403.6350507736206,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.02189421653748,78.16939890710383 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,947.2696743011475,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,470.0121097564697,81.20218515396118 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.51706099510193,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,974.2360310554504,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,466.69573068618774,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.95063591003418,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,948.407201051712,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,288.0073969364166,92.92349815368652 -GraphTM,0.02,10000,10.0,23,10,CUDA,119.34772634506226,97.48633879781421 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.228814125061,39.51502732240437 -Graph NN,0.05,0,0,0,20000,CPU,477.7228500843048,89.86338973045349 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.2427453994751,94.86338797814207 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,964.5819866657257,34.56284153005464 -Graph NN,0.1,0,0,0,20000,CPU,459.15181946754456,71.22950553894043 -GraphTM,0.1,10000,10.0,23,10,CUDA,148.52941298484802,89.67213114754098 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,981.4810082912445,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,356.59899377822876,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.7598683834076,76.85792349726775 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,959.9282560348511,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,378.94336581230164,80.32786846160889 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.55144882202148,98.44262295081967 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.1284465789795,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,407.1111581325531,94.31694149971008 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.06348276138306,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.711061000824,39.65163934426229 -Graph NN,0.02,0,0,0,20000,CPU,402.2970163822174,79.80874180793762 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.20444130897522,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,998.2885782718658,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,400.97751235961914,85.30054688453674 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.81029963493347,94.78142076502732 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1003.2194263935089,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,413.25741934776306,74.59016442298889 -GraphTM,0.1,10000,10.0,23,10,CUDA,148.70455861091614,89.89071038251366 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,974.4099938869476,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,369.36416029930115,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.01750564575195,78.55191256830601 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,990.2080008983612,20.184426229508194 -Graph NN,0.005,0,0,0,20000,CPU,440.5256702899933,90.4644787311554 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.76434278488159,98.55191256830601 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1004.704318523407,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,385.76011848449707,77.62295007705688 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.28425002098083,98.44262295081967 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,953.8945541381836,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,422.2995481491089,90.71038365364075 -GraphTM,0.02,10000,10.0,23,10,CUDA,121.29091334342957,97.6775956284153 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1002.099497795105,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,383.33483958244324,81.8306028842926 -GraphTM,0.05,10000,10.0,23,10,CUDA,134.72863698005676,94.53551912568307 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,936.831921339035,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,320.32143545150757,83.60655903816223 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.56500816345215,89.15300546448087 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,955.8687121868134,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,432.34014868736267,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.61127710342407,79.12568306010928 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,945.0617082118988,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,458.87039852142334,79.37158346176147 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.9952290058136,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,985.8775904178619,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,453.55728340148926,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.85269451141357,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,941.0662143230438,75.06830601092896 -Graph NN,0.02,0,0,0,20000,CPU,416.2407822608948,91.66666865348816 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.69959592819214,97.78688524590164 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.9127674102783,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,311.2621831893921,75.46448111534119 -GraphTM,0.05,10000,10.0,23,10,CUDA,134.66055345535278,94.89071038251366 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,953.3380017280579,63.25136612021858 -Graph NN,0.1,0,0,0,20000,CPU,425.43416261672974,73.79781603813171 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.67951107025146,90.27322404371586 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.5897221565247,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,379.8497235774994,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.7126281261444,77.81420765027323 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,955.9427745342255,20.116120218579233 diff --git a/examples/recomm_system/experiment_results_old.csv b/examples/recomm_system/experiment_results_old.csv deleted file mode 100644 index f715ba6a..00000000 --- a/examples/recomm_system/experiment_results_old.csv +++ /dev/null @@ -1,271 +0,0 @@ -Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy -Graph NN,0.005,0,0,0,1000,CPU,0.03006434440612793,76.72131061553955 -GraphTM,0.005,10000,10.0,23,10,CUDA,34.547648191452026,98.46994535519126 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,89.6943154335022,76.63934426229508 -Graph NN,0.01,0,0,0,1000,CPU,0.01817464828491211,75.95628499984741 -GraphTM,0.01,10000,10.0,23,10,CUDA,34.95576763153076,98.44262295081967 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,96.10501098632812,74.93169398907104 -Graph NN,0.02,0,0,0,1000,CPU,0.03073263168334961,81.22950792312622 -GraphTM,0.02,10000,10.0,23,10,CUDA,36.0724892616272,97.43169398907104 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,95.67133641242981,72.40437158469946 -Graph NN,0.05,0,0,0,1000,CPU,0.014258623123168945,83.52459073066711 -GraphTM,0.05,10000,10.0,23,10,CUDA,38.86628317832947,95.0 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.7427487373352,64.65163934426229 -Graph NN,0.1,0,0,0,1000,CPU,0.022305965423583984,73.33333492279053 -GraphTM,0.1,10000,10.0,23,10,CUDA,37.45086216926575,90.08196721311475 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,90.45554423332214,49.8292349726776 -Graph NN,0.2,0,0,0,1000,CPU,0.03204679489135742,59.863388538360596 -GraphTM,0.2,10000,10.0,23,10,CUDA,16.268279790878296,78.77049180327869 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,96.16712856292725,20.184426229508194 -Graph NN,0.005,0,0,0,1000,CPU,0.0168764591217041,76.85792446136475 -GraphTM,0.005,10000,10.0,23,10,CUDA,31.40691065788269,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,88.05298614501953,76.74180327868852 -Graph NN,0.01,0,0,0,1000,CPU,0.01720118522644043,87.4316930770874 -GraphTM,0.01,10000,10.0,23,10,CUDA,31.529547214508057,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,89.19472336769104,74.93169398907104 -Graph NN,0.02,0,0,0,1000,CPU,0.014032602310180664,78.36065292358398 -GraphTM,0.02,10000,10.0,23,10,CUDA,32.8007595539093,97.62295081967213 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,94.56675243377686,72.6775956284153 -Graph NN,0.05,0,0,0,1000,CPU,0.016784191131591797,76.88524723052979 -GraphTM,0.05,10000,10.0,23,10,CUDA,34.84256434440613,94.75409836065573 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,96.4975814819336,64.1051912568306 -Graph NN,0.1,0,0,0,1000,CPU,0.014883041381835938,70.54644823074341 -GraphTM,0.1,10000,10.0,23,10,CUDA,36.750433683395386,89.97267759562841 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,96.35110449790955,50.341530054644814 -Graph NN,0.2,0,0,0,1000,CPU,0.03427433967590332,61.50273084640503 -GraphTM,0.2,10000,10.0,23,10,CUDA,39.63756251335144,79.01639344262294 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,97.00698733329773,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,370.7295939922333,87.5683069229126 -GraphTM,0.005,10000,10.0,23,10,CUDA,342.7878243923187,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,954.4101324081421,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,304.6031119823456,86.74863576889038 -GraphTM,0.01,10000,10.0,23,10,CUDA,346.8704605102539,98.25136612021858 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,978.3629264831543,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,403.2585175037384,75.30054450035095 -GraphTM,0.02,10000,10.0,23,10,CUDA,353.39254236221313,97.65027322404372 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.3300836086273,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,398.8085067272186,93.8524603843689 -GraphTM,0.05,10000,10.0,23,10,CUDA,368.16111874580383,94.59016393442623 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,960.4506890773773,63.661202185792355 -Graph NN,0.1,0,0,0,20000,CPU,388.4886665344238,75.43715834617615 -GraphTM,0.1,10000,10.0,23,10,CUDA,340.63327074050903,90.43715846994536 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,972.1077370643616,49.35109289617486 -Graph NN,0.2,0,0,0,20000,CPU,438.5506749153137,64.04371857643127 -GraphTM,0.2,10000,10.0,23,10,CUDA,357.2651107311249,77.89617486338798 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,948.7157049179077,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,335.8319003582001,94.97267603874207 -GraphTM,0.005,10000,10.0,23,10,CUDA,343.08735728263855,98.63387978142076 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,947.0340785980225,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,380.5575759410858,94.37158703804016 -GraphTM,0.01,10000,10.0,23,10,CUDA,346.9574134349823,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,948.3826260566711,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,317.0974416732788,80.6010901927948 -GraphTM,0.02,10000,10.0,23,10,CUDA,352.5908226966858,97.5136612021858 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,966.0719907283783,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,472.30924010276794,73.08743000030518 -GraphTM,0.05,10000,10.0,23,10,CUDA,352.63378834724426,94.18032786885246 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,959.5826976299286,64.31010928961749 -Graph NN,0.1,0,0,0,20000,CPU,461.1769962310791,82.45901465415955 -GraphTM,0.1,10000,10.0,23,10,CUDA,384.25392842292786,89.80874316939891 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,968.517664194107,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,338.83801436424255,61.39343976974487 -GraphTM,0.2,10000,10.0,23,10,CUDA,406.0366141796112,79.37158469945356 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,956.5074710845947,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,449.974244594574,99.07103776931763 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.82642030715942,98.63387978142076 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,958.8415122032166,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,340.71677923202515,91.557377576828 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.30413746833801,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,954.5596807003021,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,395.9958527088165,90.95628261566162 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.9222981929779,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,969.4929764270782,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,480.05427837371826,84.83606576919556 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.44805693626404,94.67213114754098 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,960.4112854003906,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,383.12051796913147,70.8743155002594 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.93119883537292,89.86338797814207 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,951.469316482544,49.35109289617486 -Graph NN,0.2,0,0,0,20000,CPU,463.9883725643158,66.22951030731201 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.47470378875732,78.16939890710383 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,960.5258178710938,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,475.9830324649811,82.54098296165466 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.21395993232727,98.7431693989071 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1007.2876415252686,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,383.468213558197,84.89071130752563 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.81892561912537,98.16939890710383 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1012.9538216590881,75.0 -Graph NN,0.02,0,0,0,20000,CPU,420.129834651947,78.87977957725525 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.55745768547058,97.75956284153006 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1015.7262468338013,72.43852459016394 -Graph NN,0.05,0,0,0,20000,CPU,402.9082715511322,88.90710473060608 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.1779272556305,94.69945355191257 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1003.5450174808502,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,465.9741690158844,71.61202430725098 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.92307353019714,90.21857923497268 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,993.3001370429993,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,477.5556457042694,61.967211961746216 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.91576671600342,78.71584699453553 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,968.9711816310883,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,432.9368100166321,87.9781424999237 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.05442261695862,98.4153005464481 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,996.241945028305,77.11748633879782 -Graph NN,0.01,0,0,0,20000,CPU,487.0275945663452,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,114.20750546455383,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,965.2801012992859,74.89754098360656 -Graph NN,0.02,0,0,0,20000,CPU,469.96120142936707,84.61748361587524 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.18490934371948,97.62295081967213 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,996.0747539997101,73.05327868852459 -Graph NN,0.05,0,0,0,20000,CPU,391.52739334106445,94.4535493850708 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.62234830856323,94.89071038251366 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1008.111634016037,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,393.4089164733887,82.24043846130371 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.06821942329407,90.21857923497268 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1029.8733656406403,46.89207650273224 -Graph NN,0.2,0,0,0,20000,CPU,457.90059518814087,64.50819969177246 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.8122251033783,78.5792349726776 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,994.4631915092468,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,468.43779039382935,93.66120100021362 -GraphTM,0.005,10000,10.0,23,10,CUDA,791.0080873966217,98.66120218579235 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1003.8278872966766,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,432.6524693965912,76.06557607650757 -GraphTM,0.01,10000,10.0,23,10,CUDA,114.20011568069458,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1002.5212485790253,74.55601092896174 -Graph NN,0.02,0,0,0,20000,CPU,369.3357195854187,77.92349457740784 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.16606998443604,97.78688524590164 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1012.7241668701172,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,425.18350195884705,73.49726557731628 -GraphTM,0.05,10000,10.0,23,10,CUDA,134.74739480018616,94.53551912568307 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,989.5920696258545,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,490.52463579177856,74.23497438430786 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.663067817688,90.05464480874316 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1006.5979704856873,49.86338797814208 -Graph NN,0.2,0,0,0,20000,CPU,430.0901610851288,55.51912784576416 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.53561758995056,78.52459016393442 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,978.9952318668365,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,348.87419414520264,88.87978196144104 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.35069704055786,98.49726775956285 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1027.553718328476,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,459.8675227165222,94.97267603874207 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.4369592666626,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1020.3086180686951,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,402.3793728351593,98.08743000030518 -GraphTM,0.02,10000,10.0,23,10,CUDA,121.04798412322998,97.78688524590164 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1001.1654710769653,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,372.8648886680603,77.81420946121216 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.42569255828857,94.78142076502732 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1007.9532639980316,64.31010928961749 -Graph NN,0.1,0,0,0,20000,CPU,379.2149317264557,88.55191469192505 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.3813440799713,89.50819672131148 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1043.259267091751,49.65846994535519 -Graph NN,0.2,0,0,0,20000,CPU,327.1461730003357,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.63331365585327,77.75956284153006 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1010.9232707023621,20.081967213114755 -Graph NN,0.005,0,0,0,20000,CPU,365.3540139198303,84.56284403800964 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.86703443527222,98.55191256830601 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,985.2240512371063,76.84426229508196 -Graph NN,0.01,0,0,0,20000,CPU,419.19047832489014,90.65573811531067 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.7970187664032,98.19672131147541 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1064.9949398040771,75.27322404371584 -Graph NN,0.02,0,0,0,20000,CPU,331.5898778438568,82.13114738464355 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.9221625328064,97.8415300546448 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,995.9801988601685,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,471.61706471443176,76.4207661151886 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.71256685256958,94.31693989071039 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1049.4032156467438,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,408.78746509552,75.76502561569214 -GraphTM,0.1,10000,10.0,23,10,CUDA,150.7326798439026,89.86338797814207 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1033.6956369876862,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,606.6176900863647,75.84699392318726 -GraphTM,0.2,10000,10.0,23,10,CUDA,767.3086304664612,79.18032786885246 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1133.7219278812408,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,581.8730342388153,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,331.4337913990021,98.68852459016394 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1139.0209171772003,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,625.7649390697479,79.91803288459778 -GraphTM,0.01,10000,10.0,23,10,CUDA,390.8302972316742,98.27868852459017 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1126.1463103294373,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,400.4486656188965,88.87978196144104 -GraphTM,0.02,10000,10.0,23,10,CUDA,1433.5869204998016,97.73224043715847 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,950.7241444587708,72.43852459016394 -Graph NN,0.05,0,0,0,20000,CPU,425.54064321517944,88.22404146194458 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.85678553581238,95.0 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,980.2039513587952,40.26639344262295 -Graph NN,0.1,0,0,0,20000,CPU,452.5277452468872,75.38251280784607 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.88782930374146,89.80874316939891 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1026.7852320671082,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,470.88474774360657,69.67213153839111 -GraphTM,0.2,10000,10.0,23,10,CUDA,169.65682435035706,78.38797814207649 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1025.9789564609528,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,415.4326367378235,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.78167200088501,98.82513661202185 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1003.7237763404846,76.63934426229508 -Graph NN,0.01,0,0,0,20000,CPU,444.45101857185364,92.65027046203613 -GraphTM,0.01,10000,10.0,23,10,CUDA,112.90761637687683,98.14207650273225 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,952.2491714954376,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,320.37370920181274,93.90710592269897 -GraphTM,0.02,10000,10.0,23,10,CUDA,119.93352174758911,97.78688524590164 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,943.684113740921,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,481.5506682395935,73.08743000030518 -GraphTM,0.05,10000,10.0,23,10,CUDA,135.72563362121582,94.75409836065573 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1023.0283312797546,63.661202185792355 -Graph NN,0.1,0,0,0,20000,CPU,493.5546169281006,70.92896103858948 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.45619106292725,89.80874316939891 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1015.6581709384918,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,413.9959945678711,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.9294879436493,78.77049180327869 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,986.7937209606171,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,378.53097796440125,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,110.98681783676147,98.30601092896175 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1019.9160070419312,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,474.00093841552734,91.0109281539917 -GraphTM,0.01,10000,10.0,23,10,CUDA,111.94242978096008,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,999.8850407600403,75.03415300546447 -Graph NN,0.02,0,0,0,20000,CPU,346.5858099460602,79.3169379234314 -GraphTM,0.02,10000,10.0,23,10,CUDA,120.32013273239136,97.81420765027322 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,937.4906117916107,71.92622950819673 -Graph NN,0.05,0,0,0,20000,CPU,408.48123002052307,79.61748838424683 -GraphTM,0.05,10000,10.0,23,10,CUDA,134.27622246742249,94.72677595628414 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,998.1966772079468,64.1051912568306 -Graph NN,0.1,0,0,0,20000,CPU,373.10851979255676,70.8743155002594 -GraphTM,0.1,10000,10.0,23,10,CUDA,148.95248794555664,89.86338797814207 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,993.9887461662292,49.62431693989071 -Graph NN,0.2,0,0,0,20000,CPU,388.21142077445984,64.15300369262695 -GraphTM,0.2,10000,10.0,23,10,CUDA,168.77049660682678,76.93989071038251 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,947.7270972728729,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,370.7274992465973,75.79234838485718 -GraphTM,0.005,10000,10.0,23,10,CUDA,109.92479467391968,98.27868852459017 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.8954434394836,76.74180327868852 -Graph NN,0.01,0,0,0,20000,CPU,382.68008041381836,90.8196747303009 -GraphTM,0.01,10000,10.0,23,10,CUDA,113.02455401420593,98.4153005464481 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,958.4739623069763,74.86338797814209 -Graph NN,0.02,0,0,0,20000,CPU,466.3325071334839,96.22950553894043 -GraphTM,0.02,10000,10.0,23,10,CUDA,121.06816530227661,97.6775956284153 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,952.7009084224701,72.1311475409836 -Graph NN,0.05,0,0,0,20000,CPU,462.6835868358612,75.79234838485718 -GraphTM,0.05,10000,10.0,23,10,CUDA,136.21898555755615,94.53551912568307 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,974.2475302219391,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,425.79654932022095,87.18579411506653 -GraphTM,0.1,10000,10.0,23,10,CUDA,149.70053339004517,90.0 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1005.1148529052734,49.59016393442623 -Graph NN,0.2,0,0,0,20000,CPU,454.7309219837189,60.10928750038147 -GraphTM,0.2,10000,10.0,23,10,CUDA,170.75228261947632,78.68852459016394 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,949.2937788963318,20.116120218579233 -Graph NN,0.005,0,0,0,20000,CPU,570.247394323349,75.68305730819702 -GraphTM,0.005,10000,10.0,23,10,CUDA,478.04068207740784,98.5792349726776 -TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1043.9900722503662,76.22950819672131 -Graph NN,0.01,0,0,0,20000,CPU,428.5804445743561,98.68852496147156 -GraphTM,0.01,10000,10.0,23,10,CUDA,522.4638862609863,98.44262295081967 -TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1060.4919381141663,74.93169398907104 -Graph NN,0.02,0,0,0,20000,CPU,432.5051038265228,76.25682950019836 -GraphTM,0.02,10000,10.0,23,10,CUDA,465.56538343429565,97.73224043715847 -TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1074.2418582439423,72.40437158469946 -Graph NN,0.05,0,0,0,20000,CPU,492.7251534461975,85.16393303871155 -GraphTM,0.05,10000,10.0,23,10,CUDA,688.4105927944183,94.91803278688525 -TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1055.8136265277863,64.00273224043715 -Graph NN,0.1,0,0,0,20000,CPU,584.2829260826111,78.22404503822327 -GraphTM,0.1,10000,10.0,23,10,CUDA,625.4286091327667,90.13661202185791 -TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1055.7545056343079,48.83879781420765 -Graph NN,0.2,0,0,0,20000,CPU,318.2997555732727,67.40437150001526 -GraphTM,0.2,10000,10.0,23,10,CUDA,1264.404123544693,77.62295081967213 -TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1000.3779845237732,20.081967213114755 diff --git a/examples/recomm_system/test.ipynb b/examples/recomm_system/test.ipynb index 07b30e69..bf5c1fac 100644 --- a/examples/recomm_system/test.ipynb +++ b/examples/recomm_system/test.ipynb @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -80,12 +80,12 @@ "\\begin{tabular}{|c|c|c|c|}\n", "\\hline\n", "\\textbf{Noise Ratio} & \\textbf{GCN (\\%)} & \\textbf{GTM (\\%)} & \\textbf{TMClassifier (\\%)} \\\\ \\hline\n", - "0.005 & 83.36 & 98.67 & 76.67 \\\\ \\hline\n", - "0.01 & 86.13 & 98.42 & 74.58 \\\\ \\hline\n", - "0.02 & 85.03 & 97.75 & 72.10 \\\\ \\hline\n", - "0.05 & 79.93 & 94.80 & 63.87 \\\\ \\hline\n", - "0.1 & 73.73 & 89.73 & 49.44 \\\\ \\hline\n", - "0.2 & 65.86 & 78.48 & 20.11 \\\\ \\hline\n", + "0.005 & 83.39 & 98.73 & 76.73 \\\\ \\hline\n", + "0.01 & 85.55 & 98.35 & 74.87 \\\\ \\hline\n", + "0.02 & 83.57 & 97.73 & 72.24 \\\\ \\hline\n", + "0.05 & 82.13 & 94.61 & 63.86 \\\\ \\hline\n", + "0.1 & 75.93 & 89.85 & 49.48 \\\\ \\hline\n", + "0.2 & 64.12 & 78.73 & 20.13 \\\\ \\hline\n", "\\end{tabular}\n", "\\caption{Average accuracy comparison of GCN, GraphTM, and TMClassifier for varying noise ratios.}\n", "\\label{tab:recomm_sys_accuracy}\n", @@ -96,7 +96,7 @@ "source": [ "import pandas as pd\n", "data = pd.read_csv(\"experiment_results.csv\")\n", - "exp_id = \"20250225090119\" \n", + "exp_id = \"20250409090514\" \n", "data['Exp_id'] = data['Exp_id'].astype(str)\n", "filtered_data = data[data['Exp_id'] == exp_id]\n", "# print(filtered_data)\n", From cedabda4f099e8a2ceaf0870b511647cdf7dfb17 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Sat, 10 May 2025 08:46:21 +0000 Subject: [PATCH 28/35] calc total time --- examples/recomm_system/test.ipynb | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/examples/recomm_system/test.ipynb b/examples/recomm_system/test.ipynb index bf5c1fac..320a30bf 100644 --- a/examples/recomm_system/test.ipynb +++ b/examples/recomm_system/test.ipynb @@ -132,6 +132,51 @@ "\n", "print(latex_table)" ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Averages across all noise ratios:\n", + "Algorithm: Graph NN, Average Accuracy: 79.11%, Average Total Time: 44.80s\n", + "Algorithm: GraphTM, Average Accuracy: 93.00%, Average Total Time: 133.75s\n", + "Algorithm: TMClassifier, Average Accuracy: 59.55%, Average Total Time: 1068.99s\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Read the CSV file\n", + "data = pd.read_csv(\"experiment_results.csv\")\n", + "\n", + "# Define the experiment ID you want to filter\n", + "exp_id = \"20250409090514\"\n", + "\n", + "# Ensure that Exp_id is treated as a string\n", + "data['Exp_id'] = data['Exp_id'].astype(str)\n", + "\n", + "# Filter the data based on the experiment ID\n", + "filtered_data = data[data['Exp_id'] == exp_id]\n", + "\n", + "# Group the data by Algorithm to calculate average accuracies and total time across all noise ratios\n", + "grouped_data = filtered_data.groupby('Algorithm').agg({'Accuracy': 'mean', 'Total_Time': 'mean'}).reset_index()\n", + "\n", + "# Print the average results for each algorithm across all noise ratios\n", + "print(\"Averages across all noise ratios:\")\n", + "for _, row in grouped_data.iterrows():\n", + " algorithm = row['Algorithm']\n", + " average_accuracy = row['Accuracy']\n", + " average_total_time = row['Total_Time']\n", + " \n", + " # Print the results\n", + " print(f\"Algorithm: {algorithm}, Average Accuracy: {average_accuracy:.2f}%, Average Total Time: {average_total_time:.2f}s\")\n" + ] } ], "metadata": { From 14b0b689ac6559ec51f5dd91ecc8d1f06d13fe7a Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Tue, 20 May 2025 11:10:28 +0000 Subject: [PATCH 29/35] prepare as sup. mat. --- examples/recomm_system/README.md | 17 +++- .../recomm_system/experiment_results.xlsx | Bin 0 -> 33687 bytes examples/recomm_system/main.py | 36 ++++++++ examples/recomm_system/test.ipynb | 82 ++++++++++++++++++ 4 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 examples/recomm_system/experiment_results.xlsx create mode 100644 examples/recomm_system/main.py diff --git a/examples/recomm_system/README.md b/examples/recomm_system/README.md index e7fa211a..c03a4deb 100644 --- a/examples/recomm_system/README.md +++ b/examples/recomm_system/README.md @@ -1,2 +1,17 @@ +# Recommender System Experiments + +**How to run:** +```sh cd examples/recomm_system/ -bash main.sh \ No newline at end of file +python3 main.py +``` + +**Files:** +- `main.py` — Runs all experiments, calls each model script for various noise ratios, saves results to `experiment_results.csv`. +- `graph_nn.py` — Graph Neural Network (GCN) experiment. +- `graph_tm.py` — Graph Tsetlin Machine experiment. +- `tm_classifier.py` — Tsetlin Machine Classifier experiment. +- `prepare_dataset.py` — Dataset download, noise injection, preprocessing. +- `experiment_results.csv` — Results log (auto-generated). +- `test.ipynb` — Summarizes results, generates LaTeX tables. + diff --git a/examples/recomm_system/experiment_results.xlsx b/examples/recomm_system/experiment_results.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..54f854981d2bdf3ad205a300b352aca0698f15f7 GIT binary patch literal 33687 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
-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 wLt5|OOTO0tuiuQnA)sAf>*J4(^-qMWzk38YV7& Date: Tue, 18 Nov 2025 13:04:31 +0000 Subject: [PATCH 30/35] add explainable exp --- .gitignore | 4 - GraphTsetlinMachine/kernels.py | 1 - GraphTsetlinMachine/tm.py | 3 +- LICENSE | 2 +- README.md | 4 +- .../prepare_dataset.cpython-310.pyc | Bin 5371 -> 5348 bytes examples/recomm_system/graph_tm_explain.py | 146 ++++++++++++++++++ setup.py | 2 +- 8 files changed, 151 insertions(+), 11 deletions(-) create mode 100644 examples/recomm_system/graph_tm_explain.py diff --git a/.gitignore b/.gitignore index 9f5bc781..9a53b815 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,3 @@ -build/ -GraphTsetlinMachine.egg-info/ -/dist/ - .envrc # Byte-compiled / optimized / DLL files diff --git a/GraphTsetlinMachine/kernels.py b/GraphTsetlinMachine/kernels.py index 54ffd433..2594c48a 100644 --- a/GraphTsetlinMachine/kernels.py +++ b/GraphTsetlinMachine/kernels.py @@ -787,7 +787,6 @@ unsigned int *local_ta_state = &ta_state[clause * chunks * STATE_BITS]; for (int literal = 0; literal < literals; ++literal) { - unsigned int state = 0; int chunk_nr = literal / INT_SIZE; int chunk_pos = literal % INT_SIZE; out[clause * literals + literal] = (local_ta_state[chunk_nr * STATE_BITS + STATE_BITS - 1] & (1 << chunk_pos)) > 0; diff --git a/GraphTsetlinMachine/tm.py b/GraphTsetlinMachine/tm.py index 2db8fc21..d402916d 100644 --- a/GraphTsetlinMachine/tm.py +++ b/GraphTsetlinMachine/tm.py @@ -75,7 +75,6 @@ def __init__( self.number_of_state_bits = number_of_state_bits self.message_size = message_size self.message_bits = message_bits - self.message_literals = message_size*2 self.double_hashing = double_hashing self.one_hot_encoding = one_hot_encoding @@ -541,7 +540,7 @@ def _init_fit(self, graphs, encoded_Y, incremental): self.current_clause_node_output_train_gpu = cuda.mem_alloc(int(self.number_of_clauses * graphs.max_number_of_graph_node_chunks) * 4) self.next_clause_node_output_train_gpu = cuda.mem_alloc(int(self.number_of_clauses * graphs.max_number_of_graph_node_chunks) * 4) - self.clause_X_int_train_gpu = cuda.mem_alloc(int(graphs.max_number_of_graph_nodes * self.message_literals) * 4) + self.clause_X_int_train_gpu = cuda.mem_alloc(int(graphs.max_number_of_graph_nodes * self.number_of_message_literals) * 4) self.clause_X_train_gpu = [] for depth in range(self.depth-1): diff --git a/LICENSE b/LICENSE index 07732506..77e6b3bf 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Ole-Christoffer Granmo +Copyright (c) 2025 Ole-Christoffer Granmo and University of Agder Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 42040a2f..6ddd9444 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ pip3 install graphtsetlinmachine or ```bash python ./setup.py sdist -pip3 install dist/GraphTsetlinMachine-0.3.1.tar.gz +pip3 install dist/GraphTsetlinMachine-0.3.4.tar.gz ``` ## Tutorial @@ -339,7 +339,7 @@ tm = MultiClassGraphTsetlinMachine( ## Licence -Copyright (c) 2024 Ole-Christoffer Granmo +Copyright (c) 2025 Ole-Christoffer Granmo and University of Agder Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/examples/recomm_system/__pycache__/prepare_dataset.cpython-310.pyc b/examples/recomm_system/__pycache__/prepare_dataset.cpython-310.pyc index 8a2cd18398677e0c9bd2a85d805bb970ed3cb003..359048333a440a694927013b30d5a34a45a23fd5 100644 GIT binary patch delta 54 zcmeyZ`9zaDpO=@50SIg~b2f5&GRf%aCl(awr&c897UZNB>ldXa=jZ0e7grXSq~>mJ IXDSf_0IrM?XaE2J delta 77 zcmaE&`CF4apO=@50SLNYXKm#6WHNTuPb?_VPpwGIEyzhN261vSlM_oa^Ye=J3yShn ZN|Q^9 0 and node_id < graphs_train.number_of_graph_nodes[graph_id]-1 else 1 + if node_id == 0: + graphs_train.add_graph_node(graph_id, "User", number_of_edges) + elif node_id == 1: + graphs_train.add_graph_node(graph_id, "Item", number_of_edges) + else: + graphs_train.add_graph_node(graph_id, "Category", number_of_edges) + graphs_train.prepare_edge_configuration() + for graph_id in range(X_train.shape[0]): + for node_id in range(graphs_train.number_of_graph_nodes[graph_id]): + if node_id == 0: + graphs_train.add_graph_node_edge(graph_id, "User", "Item", "UserItem") + + if node_id == 1: + graphs_train.add_graph_node_edge(graph_id, "Item", "Category", "ItemCategory") + graphs_train.add_graph_node_edge(graph_id, "Item", "User", "ItemUser") + + if node_id == 2: + graphs_train.add_graph_node_edge(graph_id, "Category", "Item", "CatrgoryItem") + + graphs_train.add_graph_node_property(graph_id, "User", "U_" + str(X_train[graph_id][0])) + graphs_train.add_graph_node_property(graph_id, "Item", "I_" + str(X_train[graph_id][1])) + graphs_train.add_graph_node_property(graph_id, "Category", "C_" + str(X_train[graph_id][2])) + graphs_train.encode() + print("Training data produced") + + tm = MultiClassGraphTsetlinMachine( + args.number_of_clauses, + args.T, + args.s, + number_of_state_bits = args.number_of_state_bits, + depth=args.depth, + message_size=args.message_size, + message_bits=args.message_bits, + max_included_literals=args.max_included_literals, + double_hashing = args.double_hashing + ) + + for epoch in range(args.epochs): + tm.fit(graphs_train, Y_train, epochs=1, incremental=True) + + # print_clause_explanations(tm, graphs_train) + + state = tm.get_state() + clause_weights_flat = state[1] + number_of_classes = int(state[2]) + number_of_clauses = int(state[3]) + weights = clause_weights_flat.reshape(number_of_classes, number_of_clauses) + # weights = tm.get_state()[1].reshape(2, -1) + # Get Clauses in symbols format and Messages in clause_indices format + clause_literals = tm.get_clause_literals(graphs_train.hypervectors).astype(np.int32) + num_symbols = len(graphs_train.symbol_id) + + # Create symbol_id to symbol_name dictionary for printing symbol names + symbol_dict = dict((v, k) for k, v in graphs_train.symbol_id.items()) + + threshold = 7 + for target_label_of_Y in np.unique(Y_train): + print(f"Target label: {target_label_of_Y}, Number of positive clauses: {np.sum(weights[target_label_of_Y]>0)}") + for clause in range(tm.number_of_clauses): + if weights[target_label_of_Y, clause] > 0: + for literal in range(num_symbols): + state = clause_literals[clause, literal] + neg_state = clause_literals[clause, literal + num_symbols] + if np.any(state > threshold) or np.any(neg_state > threshold): + print(f"Clause {clause} [{weights[target_label_of_Y, clause]:>4d}]", end=": ") + if state > threshold: + print(f"{clause_literals[clause, literal]}{symbol_dict[literal]}", end=" ") + + if neg_state > threshold: + print(f"~{clause_literals[clause, literal + num_symbols]}{symbol_dict[literal]}", end=" ") + + print("") + +def default_args(**kwargs): + parser = argparse.ArgumentParser() + parser.add_argument("--epochs", default=1, type=int) + parser.add_argument("--number-of-clauses", default=2000, type=int) + parser.add_argument("--T", default=10000, type=int) + parser.add_argument("--s", default=10.0, type=float) + parser.add_argument("--number-of-state-bits", default=8, type=int) + parser.add_argument("--depth", default=1, type=int) + parser.add_argument("--hypervector-size", default=4096, type=int) + parser.add_argument("--hypervector-bits", default=256, type=int) + parser.add_argument("--message-size", default=256, type=int) + parser.add_argument("--message-bits", default=2, type=int) + parser.add_argument('--double-hashing', dest='double_hashing', default=False, action='store_true') + parser.add_argument("--noise", default=0.01, type=float) + parser.add_argument("--max-included-literals", default=23, type=int) + parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) + parser.add_argument("--exp_id", default="", type=str) + args = parser.parse_args() + for key, value in kwargs.items(): + if key in args.__dict__: + setattr(args, key, value) + return args + +if __name__ == "__main__": + # train + main(default_args()) + + # run just explanation from saved model + # print_clause_explanations() \ No newline at end of file diff --git a/setup.py b/setup.py index 2be1e8bb..82007812 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='GraphTsetlinMachine', - version='0.3.3', + version='0.3.4', author='Ole-Christoffer Granmo', author_email='ole.granmo@uia.no', url='https://github.com/cair/GraphTsetlinMachine/', From 587f09df7556ce81e570682eda3134aeecbf0997 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Tue, 18 Nov 2025 13:07:35 +0000 Subject: [PATCH 31/35] ploting --- examples/recomm_system/graph_tm_explain.py | 53 ++++++++++++++++----- plots/class_0_top15.png | Bin 0 -> 21788 bytes plots/class_1_top15.png | Bin 0 -> 21594 bytes plots/class_2_top15.png | Bin 0 -> 21627 bytes plots/class_3_top15.png | Bin 0 -> 23237 bytes plots/class_4_top15.png | Bin 0 -> 21707 bytes 6 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 plots/class_0_top15.png create mode 100644 plots/class_1_top15.png create mode 100644 plots/class_2_top15.png create mode 100644 plots/class_3_top15.png create mode 100644 plots/class_4_top15.png diff --git a/examples/recomm_system/graph_tm_explain.py b/examples/recomm_system/graph_tm_explain.py index 99f2b497..071bdc8e 100644 --- a/examples/recomm_system/graph_tm_explain.py +++ b/examples/recomm_system/graph_tm_explain.py @@ -3,6 +3,8 @@ import argparse import numpy as np import prepare_dataset +import os +import matplotlib.pyplot as plt def main(args): @@ -98,22 +100,49 @@ def main(args): symbol_dict = dict((v, k) for k, v in graphs_train.symbol_id.items()) threshold = 7 + + # create output folder for plots + os.makedirs("plots", exist_ok=True) + top_n = 15 # number of top symbols to show per class + for target_label_of_Y in np.unique(Y_train): - print(f"Target label: {target_label_of_Y}, Number of positive clauses: {np.sum(weights[target_label_of_Y]>0)}") + # Aggregate scores per symbol across positive clauses for this class + scores = np.zeros(num_symbols, dtype=float) for clause in range(tm.number_of_clauses): - if weights[target_label_of_Y, clause] > 0: - for literal in range(num_symbols): - state = clause_literals[clause, literal] - neg_state = clause_literals[clause, literal + num_symbols] - if np.any(state > threshold) or np.any(neg_state > threshold): - print(f"Clause {clause} [{weights[target_label_of_Y, clause]:>4d}]", end=": ") - if state > threshold: - print(f"{clause_literals[clause, literal]}{symbol_dict[literal]}", end=" ") + w = weights[target_label_of_Y, clause] + if w <= 0: + continue + for literal in range(num_symbols): + state = clause_literals[clause, literal] + neg_state = clause_literals[clause, literal + num_symbols] + # handle scalar or array states + included_pos = np.any(state > threshold) if hasattr(state, "__iter__") else (state > threshold) + included_neg = np.any(neg_state > threshold) if hasattr(neg_state, "__iter__") else (neg_state > threshold) + if included_pos: + scores[literal] += w + if included_neg: + scores[literal] -= w + + # select top symbols by absolute aggregate score + idx_sorted = np.argsort(-np.abs(scores)) + top_idx = idx_sorted[:top_n] + labels = [symbol_dict[i] for i in top_idx] + vals = scores[top_idx] - if neg_state > threshold: - print(f"~{clause_literals[clause, literal + num_symbols]}{symbol_dict[literal]}", end=" ") + # Plot horizontal bar chart + plt.figure(figsize=(8, max(4, top_n * 0.35))) + colors = ['tab:green' if v > 0 else 'tab:red' for v in vals] + # reverse for descending plotting top->bottom + plt.barh(range(len(vals)), vals[::-1], color=[c for c in colors[::-1]]) + plt.yticks(range(len(vals)), labels[::-1], fontsize=8) + plt.xlabel('Aggregate clause weight') + plt.title(f'Top {top_n} symbols for class {target_label_of_Y}') + plt.tight_layout() - print("") + out_path = f"plots/class_{target_label_of_Y}_top{top_n}.png" + plt.savefig(out_path) + plt.close() + print(f"Saved plot: {out_path}") def default_args(**kwargs): parser = argparse.ArgumentParser() diff --git a/plots/class_0_top15.png b/plots/class_0_top15.png new file mode 100644 index 0000000000000000000000000000000000000000..8df141e82f706774801bff9867d74fb9b54e6e43 GIT binary patch literal 21788 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 RG2T+B;xfnLkDR^o{{ZRQPg(!~ literal 0 HcmV?d00001 diff --git a/plots/class_3_top15.png b/plots/class_3_top15.png new file mode 100644 index 0000000000000000000000000000000000000000..d67877960798849291986964ceb0dcde2daf5bc5 GIT binary patch literal 23237 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 literal 0 HcmV?d00001 diff --git a/plots/class_4_top15.png b/plots/class_4_top15.png new file mode 100644 index 0000000000000000000000000000000000000000..c25cec84318b72bfca22cd0a43174d4a8e8f6ab5 GIT binary patch literal 21707 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 Date: Sat, 29 Nov 2025 10:09:46 +0000 Subject: [PATCH 32/35] fix graph nn --- examples/recomm_system/graph_nn.py | 71 +++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 10 deletions(-) diff --git a/examples/recomm_system/graph_nn.py b/examples/recomm_system/graph_nn.py index ef6922a7..5ace5cca 100644 --- a/examples/recomm_system/graph_nn.py +++ b/examples/recomm_system/graph_nn.py @@ -7,17 +7,61 @@ from tmu.tools import BenchmarkTimer import os import pandas as pd +from sklearn.preprocessing import OneHotEncoder +import numpy as np def main(args): results = [] - data = prepare_dataset.aug_amazon_products(noise_ratio = args.dataset_noise_ratio) + data = prepare_dataset.aug_amazon_products(noise_ratio=args.dataset_noise_ratio) x, y = prepare_dataset.construct_x_y(data) - X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x,y) - # Graph Construction - num_users = len(data['user_id'].unique()) - num_items = len(data['product_id'].unique()) - num_categories = len(data['category'].unique()) + X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x, y) + + # Extract categorical identifiers for features + user_ids = data['user_id'].unique() + item_ids = data['product_id'].unique() + category_ids = data['category'].unique() + + print("Unique user_ids: ", len(user_ids)) + print("Unique item_ids: ", len(item_ids)) + print("Unique category_ids: ", len(category_ids)) + + num_users = len(user_ids) + num_items = len(item_ids) + num_categories = len(category_ids) num_nodes = num_users + num_items + num_categories + + # One-hot encoding for node features + user_encoder = OneHotEncoder() + item_encoder = OneHotEncoder() + category_encoder = OneHotEncoder() + + # Fit encoders using unique identifiers + user_features = user_encoder.fit_transform(user_ids.reshape(-1, 1)).toarray() # Convert to dense + item_features = item_encoder.fit_transform(item_ids.reshape(-1, 1)).toarray() # Convert to dense + category_features = category_encoder.fit_transform(category_ids.reshape(-1, 1)).toarray() # Convert to dense + + print("User features shape: ", user_features.shape) + print("Item features shape: ", item_features.shape) + print("Category features shape: ", category_features.shape) + + # Ensure consistent feature dimensions + max_feature_dim = max(user_features.shape[1], item_features.shape[1], category_features.shape[1]) + + # Pad features if dimension mismatch + if user_features.shape[1] < max_feature_dim: + user_features = np.pad(user_features, ((0, 0), (0, max_feature_dim - user_features.shape[1])), 'constant') + if item_features.shape[1] < max_feature_dim: + item_features = np.pad(item_features, ((0, 0), (0, max_feature_dim - item_features.shape[1])), 'constant') + if category_features.shape[1] < max_feature_dim: + category_features = np.pad(category_features, ((0, 0), (0, max_feature_dim - category_features.shape[1])), 'constant') + + # Concatenate all node features into a single tensor + node_features = torch.cat([ + torch.tensor(user_features, dtype=torch.float), + torch.tensor(item_features, dtype=torch.float), + torch.tensor(category_features, dtype=torch.float) + ], dim=0) + # Build edge list edge_list = [] # User ↔ Item edges @@ -30,25 +74,28 @@ def main(args): edge_list.append((num_users + num_items + category, num_users + item)) # Category to Item # Create edge index for PyTorch Geometric edge_index = torch.tensor(edge_list, dtype=torch.long).t() - # Node features - node_features = torch.rand((num_nodes, 64), dtype=torch.float) + # PyTorch Geometric Data object graph_data = Data(x=node_features, edge_index=edge_index) + # Step 2: Define GCN Model class GCN(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(GCN, self).__init__() self.conv1 = GCNConv(input_dim, hidden_dim) self.conv2 = GCNConv(hidden_dim, output_dim) + def forward(self, x, edge_index): x = self.conv1(x, edge_index) x = F.relu(x) x = self.conv2(x, edge_index) return x + # Initialize Model - model = GCN(input_dim=64, hidden_dim=128, output_dim=64) + model = GCN(input_dim=node_features.shape[1], hidden_dim=128, output_dim=64) # Define optimizer optimizer = torch.optim.Adam(model.parameters(), lr=0.01) + # Convert train/test data to tensors train_edges = torch.tensor( [(user, num_users + item) for user, item in zip(X_train[:, 0], X_train[:, 1])], @@ -60,6 +107,7 @@ def forward(self, x, edge_index): dtype=torch.long ).t() test_labels = torch.tensor(Y_test, dtype=torch.float) + # Training Loop with Accuracy Logging benchmark_total = BenchmarkTimer(logger=None, text="Epochs Time") with benchmark_total: @@ -79,6 +127,7 @@ def forward(self, x, edge_index): loss.backward() optimizer.step() train_time = benchmark1.elapsed() + # Testing Phase benchmark2 = BenchmarkTimer(logger=None, text="Testing Time") with benchmark2: @@ -91,7 +140,9 @@ def forward(self, x, edge_index): # Compute accuracy accuracy = ((test_predicted_ratings.round() == test_labels).float().mean().item()) * 100 test_time = benchmark2.elapsed() + total_time = benchmark_total.elapsed() + # Append results for each epoch results.append({ "Exp_id": args.exp_id, @@ -129,4 +180,4 @@ def default_args(**kwargs): return args if __name__ == "__main__": - main(default_args()) \ No newline at end of file + main(default_args()) From 9f7c00fa0d37064124a3bad943b2561c53f11163 Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Mon, 1 Dec 2025 08:41:36 +0000 Subject: [PATCH 33/35] ploting --- examples/recomm_system/graph_tm_explain.py | 150 +++++++++++++----- .../all_classes_top15_comparison_compact.png | Bin 0 -> 101867 bytes plots/class_0_top15.png | Bin 21788 -> 44338 bytes plots/class_1_top15.png | Bin 21594 -> 44845 bytes plots/class_2_top15.png | Bin 21627 -> 44495 bytes plots/class_3_top15.png | Bin 23237 -> 44941 bytes plots/class_4_top15.png | Bin 21707 -> 44842 bytes 7 files changed, 109 insertions(+), 41 deletions(-) create mode 100644 plots/all_classes_top15_comparison_compact.png diff --git a/examples/recomm_system/graph_tm_explain.py b/examples/recomm_system/graph_tm_explain.py index 071bdc8e..0aceb18a 100644 --- a/examples/recomm_system/graph_tm_explain.py +++ b/examples/recomm_system/graph_tm_explain.py @@ -80,12 +80,9 @@ def main(args): max_included_literals=args.max_included_literals, double_hashing = args.double_hashing ) - for epoch in range(args.epochs): tm.fit(graphs_train, Y_train, epochs=1, incremental=True) - # print_clause_explanations(tm, graphs_train) - state = tm.get_state() clause_weights_flat = state[1] number_of_classes = int(state[2]) @@ -99,15 +96,46 @@ def main(args): # Create symbol_id to symbol_name dictionary for printing symbol names symbol_dict = dict((v, k) for k, v in graphs_train.symbol_id.items()) - threshold = 7 - # create output folder for plots os.makedirs("plots", exist_ok=True) top_n = 15 # number of top symbols to show per class + threshold = 7 # threshold for literal inclusion + + class_labels = np.unique(Y_train) + num_classes = len(class_labels) + + # --- Determine optimal figure and subplot spacing --- + # Calculate dynamic height based on number of classes and top_n to avoid too much whitespace + # Adjusted multiplier for height + row_height_per_feature = 0.25 # Smaller value to reduce vertical space per feature + fig_height = max(3.5 * num_classes, num_classes * top_n * row_height_per_feature + 2) + + fig, axes = plt.subplots( + nrows=num_classes, + ncols=2, + figsize=(10, fig_height), # Slightly reduced width, dynamically calculated height + sharey='row', # Share the Y-axis (symbol labels) only within each row + gridspec_kw={ + 'wspace': 0.15, # Reduced horizontal space between subplots + 'hspace': 0.45, # Reduced vertical space between rows of subplots + 'left': 0.1, # Adjust left margin + 'right': 0.95, # Adjust right margin + 'top': 0.93, # Adjust top margin (for suptitle) + 'bottom': 0.05 # Adjust bottom margin (for common x-labels) + } + ) - for target_label_of_Y in np.unique(Y_train): - # Aggregate scores per symbol across positive clauses for this class - scores = np.zeros(num_symbols, dtype=float) + # Ensure 'axes' is a 2D array even for a single class (num_classes=1) + if num_classes == 1: + axes = np.array([axes]) + + # --- Main Plotting Loop --- + for i, target_label_of_Y in enumerate(class_labels): + + # 1. Aggregate scores for the current class (Aggregation Logic remains the same) + state_scores = np.zeros(num_symbols, dtype=float) + weight_scores = np.zeros(num_symbols, dtype=float) + for clause in range(tm.number_of_clauses): w = weights[target_label_of_Y, clause] if w <= 0: @@ -115,41 +143,85 @@ def main(args): for literal in range(num_symbols): state = clause_literals[clause, literal] neg_state = clause_literals[clause, literal + num_symbols] - # handle scalar or array states - included_pos = np.any(state > threshold) if hasattr(state, "__iter__") else (state > threshold) - included_neg = np.any(neg_state > threshold) if hasattr(neg_state, "__iter__") else (neg_state > threshold) - if included_pos: - scores[literal] += w - if included_neg: - scores[literal] -= w - - # select top symbols by absolute aggregate score - idx_sorted = np.argsort(-np.abs(scores)) + + if state > threshold: + state_scores[literal] += state + weight_scores[literal] += w + + if neg_state > threshold: + state_scores[literal] -= neg_state + weight_scores[literal] -= w + + # 2. Select top symbols + idx_sorted = np.argsort(-np.abs(state_scores)) top_idx = idx_sorted[:top_n] + labels = [symbol_dict[i] for i in top_idx] - vals = scores[top_idx] - - # Plot horizontal bar chart - plt.figure(figsize=(8, max(4, top_n * 0.35))) - colors = ['tab:green' if v > 0 else 'tab:red' for v in vals] - # reverse for descending plotting top->bottom - plt.barh(range(len(vals)), vals[::-1], color=[c for c in colors[::-1]]) - plt.yticks(range(len(vals)), labels[::-1], fontsize=8) - plt.xlabel('Aggregate clause weight') - plt.title(f'Top {top_n} symbols for class {target_label_of_Y}') - plt.tight_layout() - - out_path = f"plots/class_{target_label_of_Y}_top{top_n}.png" - plt.savefig(out_path) - plt.close() - print(f"Saved plot: {out_path}") + state_vals = state_scores[top_idx] + weight_vals = weight_scores[top_idx] + + bar_positions = range(len(state_vals)) + + # 3. Plot State Scores (Left Subplot of the current row) + ax1 = axes[i, 0] + state_colors = ['tab:green' if v > 0 else '#843d3a' for v in state_vals] + ax1.barh(bar_positions, state_vals[::-1], color=[c for c in state_colors[::-1]]) + + # Set Y-axis labels (features) + ax1.set_yticks(bar_positions) + ax1.set_yticklabels(labels[::-1], fontsize=7) # Smaller font for labels + ax1.set_ylabel(f'Class {target_label_of_Y}\n(Features)', rotation=90, labelpad=5, fontsize=9) # Reduced labelpad + + # Titles + if i == 0: # Only top row gets the full title + ax1.set_title('Aggregate Clause State', fontsize=10) + else: + # For other rows, a simpler label on the Y-axis is enough, or no title + ax1.set_title('') # Clear title for non-top rows + + ax1.axvline(0, color='gray', linewidth=0.8, linestyle='--') + + # 4. Plot Weight Scores (Right Subplot of the current row) + ax2 = axes[i, 1] + weight_colors = ['tab:blue' if v > 0 else '#41729a' for v in weight_vals] + ax2.barh(bar_positions, weight_vals[::-1], color=[c for c in weight_colors[::-1]]) + + # Remove redundant Y-axis labels and ticks from the right subplot + ax2.tick_params(axis='y', left=False, labelleft=False) + + # Titles + if i == 0: # Only top row gets the full title + ax2.set_title('Aggregate Clause Weight ($w$)', fontsize=10) + else: + ax2.set_title('') # Clear title for non-top rows + + ax2.axvline(0, color='gray', linewidth=0.8, linestyle='--') + + # Add X-axis labels only to the bottom row for clarity + if i == num_classes - 1: + ax1.set_xlabel('Score Value', fontsize=9) + ax2.set_xlabel('Score Value', fontsize=9) + else: + # Remove X-axis labels from non-bottom rows + ax1.tick_params(axis='x', labelbottom=False) + ax2.tick_params(axis='x', labelbottom=False) + + # Add a main title for the entire figure + plt.suptitle(f'Top {top_n} Feature Importance Comparison Across All Classes', fontsize=14) + # plt.tight_layout() # We are using specific gridspec_kw margins instead + + out_path = f"plots/all_classes_top{top_n}_comparison_compact.png" + plt.savefig(out_path) + plt.close() + + print(f"Saved combined comparison plot: {out_path}") def default_args(**kwargs): parser = argparse.ArgumentParser() - parser.add_argument("--epochs", default=1, type=int) + parser.add_argument("--epochs", default=40, type=int) parser.add_argument("--number-of-clauses", default=2000, type=int) parser.add_argument("--T", default=10000, type=int) - parser.add_argument("--s", default=10.0, type=float) + parser.add_argument("--s", default=1.0, type=float) parser.add_argument("--number-of-state-bits", default=8, type=int) parser.add_argument("--depth", default=1, type=int) parser.add_argument("--hypervector-size", default=4096, type=int) @@ -168,8 +240,4 @@ def default_args(**kwargs): return args if __name__ == "__main__": - # train - main(default_args()) - - # run just explanation from saved model - # print_clause_explanations() \ No newline at end of file + main(default_args()) \ No newline at end of file diff --git a/plots/all_classes_top15_comparison_compact.png b/plots/all_classes_top15_comparison_compact.png new file mode 100644 index 0000000000000000000000000000000000000000..9f165f62f799ea5ffe518e6253b77a144d918c8a GIT binary patch literal 101867 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

$UA;-+w zN;6VztT<^fu|N){=b?)+B^(5}4LlzdnQN>}0w;Rf55kK5gC7lya1_R&;pVf!8G_-G z=Gc<#J5g!IOro$TqCox0kboh7Fb?^zqp^)WSl zG)F5*s9W4#V&>BvYpdZOt5HX*SGbCT!Nv($${>B9O&;nWUpY4t0|s{kF{f(WZjcG) z9qo6G0iq`D3*{AeHIi`BT95>PK+9_sgxd($3D0t_Am?Z27qSl4*5H6IlG3~sz6jvo zjKbamHgrrcuB;>hEe8@XH9ZE0w4Otl1%#(J%G2GQ14oUW8uaNv2!0X=y8xV=WchSD zG6zWyx74C90)-2S$f|UasA(J;!7e|r=>aP0L+tA?B#mX)0JRdIrcEBYkSr)#QT#P3 zR-uF5$5Ja)_f!Uulm$Sm@U%()E3yzvddbG#p5(?f&KTqg_rBMqJJc0OO{69XDH-0Q`OPb1 zEt71Luo12UAXsY}GsPP9k}#_r+?mSVd*05Cv^`f|ZshIc<}HDgj_{F}=E8-b23Y`? zB+(D7H079>mWAPka=^;nj(^d3)FCIXES4}M{DZ**U1M`^c#>JK>>aHcSr8I{+O-@Q zG3C6F`jg;<$15F@n))xR_lTNC-sQtmk96!a&i zfg&_@lfR4(v$0Qb2T#0Aajrxj;f5YHFg42Xkukn&H+H+@>98wx<3|PmzGp}F-Mcz~ z1#wp#J@XfB?0pNcApsD!z{N_)=6McL|A>;b*?%KWE;2@~9|K+wAy0Ol3a>5e-l6lURp+ zU}OfAG7C4-!tM=r6HVI(Udj{3Cg4nR7sp@%HlisY)(HR(g6PwFY&}-hn)2Ee7vtlL zA49V_0uxD?9A}Qbk>##1HFwH@oCK#CCJ5!__BTL)Ubh6#O0s0hB;3zNZDoelE zO4+t^Jv`@Z;3o44Zn~6}qpw6?18E=(s0%{1os0)}UmcK~io>y%(Hs?Vc1sU4GlUp` zRQf%Sb#Q4#hj8|=w+I2owBrP)k*XCue0|?77e;KYdH-osamQB0rG67C_Ic8oOMmD6kStg_KXUHceg6aEvO5_7 literal 21594 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 GfB0YDU_Iji literal 21627 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 RG2T+B;xfnLkDR^o{{ZRQPg(!~ diff --git a/plots/class_3_top15.png b/plots/class_3_top15.png index d67877960798849291986964ceb0dcde2daf5bc5..658467fbb018d4ddeadc69e350f56e9da3adb3fe 100644 GIT binary patch literal 44941 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

FoaVtK0EXX?YXv@cDq!exx8&yBL2Q_2 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�`BCjYV&k}dQyzvP5)y1>-#7HEqiPQ>heL!R zxE@o?bPl47izu_h^K?V$p3AlVzXuj9yxBBw)d~j1`b?-BFhFtf%IhC7@SCJA+3N@$ znjy6_a2=%X72|cr2oQPo*}!hPqGLEPp6Kxf#Wgp*H*vfXnraYQH~z`szK7VH`<6{+ z>3@0`FBJV{R)+FJ6ymFwWny2Jrs)xhcc|fotmNIrm1J^SrRob><&NweleP zK)qng768^JV)^EjWmawQ?w%de66bF zrE0Oi(9ybA_vt#_`+*fxI!FIr9_%eM9Fy|&!CFyDjO!xD#=y{<^E0~xSQqgQPMI%j z@@ISR#&kblcQUUbFMl>%0&#JQ%d0kPAMZ&T`2G8AY`y{Ev4#`u z_a6;bLtx8Xz-jrT`xBkWIXM`x7UnzOTnwYz*17#MmWmTiQh=QCl792Pm%$P;2jLk( zy?!!nyrG5Nl5gGm2WwXBzhcUhKQ-}GNazIn#ik-;u_^3A07Z;&!B`o;^LSeOM=I;JvS5 z-PwtndhGy>B7QVmi4>e^|lCZ=9OW(dwrwzxs{$hB{z|U;ma0bBDoGjf>X5ET z(}bS2ytiJ-O?ibsIeca7Hs_?%-BmFbuf?-@p2Wn+fw2~jJXzST_oK)V8N#7G6?o#U zH;;DKdBf3L3vkVpmZi!bEelbN*fpei%{UhKd@gcr{2@%C1lOu7helGR&(~DNT4~pt zf(lcl9J2q0O|O?ymAdNV$m<8j7!`ZNQYp@shOCvhkE>e5sHbbizV~~vvR;bkdG%SA z%|g{j=J9)|?o!mtr4+`Y=Xeyx{!U#(LykIk-aLuG`IHt##)gczu{SHmh6k+DOgrZn zS^6nm%JhHtt~z<@Gzd(gqW9RgJn-l1)84**N>w~ldhuQFxi7ei4(|+zaFLHm{3O2S zWZ{CE@#vGmicFzPa5YiG!^5=1E0f=f)4*AgK#cI0bhOVg$6>+3&Mr{GtC)$ZNZ7Vp z-4U&_Aj<}FWt3H%Pjbk`f$gbD6|x^TS;jqwlBssVG)5O4CFZpa5sp8ScLa%DQZAk8 z7g$PJzf&P*lM?S$gY(|9WnZX`N{b(Owr)9QF)x$Wl+wyiosMUKQKWto(*TBPY;)q%W`&8 z@o2e4FakZtk!m&}6Xkc9csGuS6%7`D?armrV8-2B#5|Yssr0NFwd=gyxXn$kr8#=% zv(AVJXYs6YPI=*}+eNd5KVWm4rA_KpFSrS<`ujt`r>2c&4_7_fw7!v>#lk{o?@B3^ z?hu)8e_8w1C!f4Q&ph1+p zSbRPJU2at(u!%!y%_k_R0$y=_&c!4sZ_lLE4P!2$DcI7%ZVVLb%|*3ZE~WgmuHH&X zT9@}(ku~}GmhuZjYx$-Jr7S3JyW>SDC%;ik51*gPVJ!SCp=ukZe&M6pyyX`?qtrqg zmKKRW-L$EWCPx_#g~HPWlj8k_OsP00HV2f}^k+kUa`4ch^ffcIkZI1M9bzX};G*~W zl_$?>Owd}ziQzpOpj=yA?9Ur*GQU_Rq_8G$m_H27)Wb>nn~t$WKFBpa(t#oMhDu4I|K=jB}ToK87ML2PekfZ}hE1@u*s|cqQSRT@pXwo`Xh( zEvoq|;tMH-H|AE-s*_Jgu}MuFbv$)SygK{2jd->0ah{paMJyhQ-`JdIPWfvFxI8h? ze)ZR9X>rMp=8n^)S{*t)7ix4Y=GmJ*7oZG_KvB3o;cxIb(?y2vtroE4k%frB1$^8Q z=mlbPb9JYur(x1aLoEGJ5)wmJ1||1i?P^X?@+)b0=AGyA@7($RV7C%C(}wap^A=Tc zOHO-p&peEbVP3@aX2Z&D%@0|}wrm;JJx0lsJ{YX7cQ(!R_WBFsu%Y*Ou`>L|p77XH zU7eEJ3n}|V!L?D<)YNnxg1X$-)UH3Y3ghZz{B+ODiE_=u7hCi1;>ya6H@@Nb>iL?% zaRg>c*+G|+ThG)B1&N)PDVCbi<-U8j%D6n#PDy@8kYbRS^}a+G`>}{{{78FVy2T2L zDE4wJpU?G84UlNxE-ltJ(BfsWh}bxXQl=3(I;Fgla^mT?J}C-i@Vto9B7A4x&=Ez= zg5z561h@`HrW`Mp9FtKvco3oXjfR1MvBCp?yk*4MGvWd5e$-P5N*#>Sls;>3*#}HK z8*|Mk=DtX9bXz&vHkUj&+(FIvab}|P&q_)IBWvcWDAycH=+_1JH*j6C_Ar}HlT+a0 zGUFGhy>nv`m*0_Rb!V0^c+L!d{{G;O%A3@8Fg-07{CcjWy?3(fFYYyxHIiS?{r=s~ zwVh{1#X@Ph`5QU-_PtZUj-xFC=B}Z@^kNee6`>i)M#Q%L@<8;hWyZxzeE^V6Fm7k@(xvKpdO(PF8=FUoH*!a4!3LXI2w-(%hM0inm0!-GFmA#FlKOTlX z8bGtIX(nh__m6aUcc)?y)PjWzf5mX3(DkJ;HQ zJ||296Q=TGnzTdw&vmyhpzO=qM{k4y88OTWD;$UR>8QBgMVqG7Ll&tF2tNAOL7hUYqCYNK+O-tR-^s?c5Xpg~M|653c2+Hg zK%uY{{o{J0_q{FLmI?|A_Fz)@JbV}p5m35+L*}_BL{HjRmr}faH~rugW7aqDXgQxX z442U^3?_YqvyoFyOV8E^NLf6h|FS5=vcUt9JQ{6suLh2|tt`2$`)ookOi=aHe4b5@ zzKnjb#bbK23Q;k}#Jpifsg+xP%IoLMe2RS`U{oQS&T_?sAStJO;=N<>Df6ku5f>O$ z!VO6;8)cKQ!_UE8Z=qD9^P@{GmL00ueNje3x+(HDM8@@brJpy5h1(mJ%BsT@GxpH}N5P3uP;+ zHb2R^3{O8G<7Zf1Ca0!+yu6+eiA_+GIjaj9-zyr4ClP$YKhl5k;;LlF9Di&a5#f@- z5uXo**A~kv`B|NMeE-6?vi{a(zt&9gI#uOx4Tlp$p4iXQ5!l`8dRwd4`5r1wa~nXo z*5AHoj}8*9B;o|QT{|_pI>H#>A*#!YwCYe8ou9*yLp8IdkUVnEozf zLoT^+cNqd5XODs_@&HppAFIEpn7?8UrSN$FCH-J}{_nF+b;xt``RbatHoFZ!_C8y% zDDGsj;@In#b{mrE|8K+3KksM z!EX46T$!RWy;%JWO@##ua2~yla&j8E^T6k1#ycDF_V`52FC@QtK2Q8y_|YjNy#&mi z+Pl7C>L|^OW<7i)j+MjVw(UBnD`zEZ91Qc*B#rY{J*xa>k1|6LQ|u}*Zc7-tqJ-lq zheQGrO8p_$OE4(NFa4>eBoP5ei!LZ_lrgqf=_RR6tpDC&TIXy@uI}5nZ?jid_$_y@ zMv_k4mk=j@oqeI>kr5@y4LS)=U2jG!9lfu(PAnAvC9&Jq+;AC__=J*t^c%0(dkG?p zPfsfv=$>FzJ$Bv3+7+7;nd`y8_L&DrH4OiIO0{7A{7&?!%u;6XxGE2`J683tBTtMX z@e1!0e?3Y|truGLuj(z`XlJk8$Q}3EJC8TvV2tiC2w3ImZDW^l{=X&&6ah75<&CaI z9CF!x=?(So1@v=|!97l5J^h??=HJb?cqR013$P_s5Nht;xuara6bUgzN7pfA_zxp( z4`2K?L46`~euH1{RaKMwt3;pMpB_GYb%<53=3f<@HuvVhj+tdeJCMd~TtCsqEbQYQ z9TTd2^#=2mtqF_7wqF`icqE+lI^oef)!h z5-?kLSJN`wd&{S`l@e>q^N<>RhOjb3$y%%E-5q?Q=|#UW%Sh(`OnWHSibKfN(k&VyF)S}4Dk|gA1Wq*Wq8&oe1tuJO`qC0Kl1#klbtOJ_3BGTC$md^E?R}Vj@xsJE_rLS|$SsffjiZzfi(yY7 z&off<3ZP!TQ_k9R)6+%1XH>;lSY3PK!0At5@6kW|22Q-~&g@ml-NsbrTpQw{tg8AL z2E3_zg1x*p%Z)eBOf_p>fP_$8UjDA+q{klfIfZ-=Bda4nclx1H`RU>2?wc`oY$*R) z&3NEQ)2P74VX^IbwqcJScHf|( ztgIaH4amw7DvWJxK!MMABn9Xbxkkqi2a2;IeLF{-X5!iQ-0Z*=UYC;zdpbN~??ybC zu;0X$`w#&hvGd(=y~YT~vRGa)l-hP#hhDjU`QGg_JvN^CVKoe!qxf0{70mUTm3g)) zc863k^B@vy!5iq^j{A1(kOitsOW%M|TqF`8btuXfGcnaft2`M-TCHC;!&|v++qT|8 zZKtt!278B>(vRlO1>4t-|LBVYw2`((>hkz=B#nDM84t8REu&CGd45#}dnDI)`*jzXsJmjkO)$UW|9ZGl{{NrjtmVd&jo00aWg$q>8 zUU%KQiA1RZ(m5HJJSDuw0MoFkiP0XwceSvDv%yRzK2A=V08y)&gp8(GsBZUx7;knV z0eFiEvYmw2n42?DGfCb<89%?`wnL&r=x6}~GKUWo@AmE0g-M?pe_|1q>{zM*dVQlK zM*5<*?T>j#aaKD=FG#lK(+iT>uyISjNK{ZIU-0YfA<^PI{<8R;*sFj}?6#NJ<~?(r z|4wwvq5L}x602*}9=pgr>5$LS)ag@X>QBCF|8Hz2PC>d^Iga&Ym99A!$>2jcM)06R zR(k2+!CM%S8Hd?mzE9!yAUD)eN~*|_!gYPIbZoHBuHsZFAqh(1+xMd434(zCH`eJb}^*A3CXvk0cqB_{w ztEr-NFnFXQS?9~0=4Ump^xC>!QYfMGfXXM_U7`5)%^MHS_KuG9oTU7GePn}{r36o; z>@&VR#lQgGS^!$y39#reLug3oAUtEus4aoR!1)!5-Py^jw&&eKX;CM|mgRbuW)`EA zv=9AXgLOMKCaGT4RyEbXPIU1fCEVW`mib9+JL=L16vZ15M5&Jtc`c|!aiDK6XuA;K zc(`f@&(4G5*&oa z{m#6`B@8jd1P$2YAqnl(6hD_{UV0tUQ18YVQ- zk1l;ESY$Cao1e2F5B3NzFIScT{Rm#aQQ~RS5TIPVunG9lO9hX+>2j{4vQw?%wb_71 zN3z{Fm^M~0P6im9f3}HAtx{KxcIjh}%Su&8)Lv>}08l8}dHCsfg`;8@>xHn8^(~;< zU=z17iK;0JkunHz{P74ZpRMdTc>~0;b+N}S(|(|LQ9Jm#$QEt}HnAHyxVfVmzhSR1 zE#V~Vi6R!Hui}A}ryaTXft%e2Vq%pSv!Cz&(yH*QYD{tSTa^D|$5IsD-l)Ho4&&y2 zYX7$secZIx)z!7fRcbQq>bH9aop{4{A3W%D%Ou}bb}I5HV3mz^;l|QQ#zQvF{ew|b zQ)I&q*({~(JG@kyP4Gy!l)720A7UHx^7=1k=^X*x2_rFUhO?1$7w-ON)=isO$jHVi z7aJdMqlHI;k78H+R#{?ooeJ|RrDBw-@>M%bt8@_^H7lM!U$5GJHRh?dxW2Jt{3oji zIsOT@PdcuaZ-o6%@9(Vty z5-FLt#|1Q4j@U-j9QIRtR>w7?%wr#39myel;}qZ`N+1p7na8Mx%|RyAPBD4_tYd(W zM?kvls!BucTk7x@SV23{B={| z<*YncA6H4;5g|K9EDEU~sjfUuvc7%)z6#!!AI&7UZ&$!CrG}#cwpB{XKrQlU1-Lv> zFJ2tjZjev>PsYJX|8nOi{cdC*1C457aN#(}sY9|iiUrIR-h8%}rTz)iktwPpc%S=$ z-KuG5_>7PAM9Fz=F$K!Z27i9{4tk#>r4B+jQu{h$xVxE|StXX7Fz9@aNS_8OZP9HA z^E0@5oIs+aniLiiGAVSP0|j(c=4rX8|+8{E7lD)?^2sTAXx{gqxtrtG|Vm@FOGmI!EuZ&P9 zNnrx1Utd4_juXxx)_oWG5*8L_Jl*!G6AO(v7}a&HW}UsXAmb_JN*WLT!MUl(TSl!l z?ULgw%|^g!v_NJ5|z{M zT?7bD%AhY*=UyHXg8u~IiPX9PD)lka?S6YROR|9y31S0TW*sf@9dIxFr2R&MPyhO~ zoE?FNFgh~w5W0PaM+C2*3DO({h$TnGxQ9E6dhd#hQNav*!aC@!@2UB6&+5+Fw|O2W zSyo(nx+XLny-nPoIr5;`M7fJi)nr<00l*s>L-#eA-`@fZe`2>@)5zf8-1p|yn?KnB zD(Tq7L=TJtU?V`XpeN$Vj zg=Kv?$DE90+kX66cr~0A1IfBUYrFq`L3+;c-Rn1J;4Wu6GKLDR{(ex^r%&d1L(EWuCJ+@Fimh0`$agcGyMjPRe6K{bijv9h; zfIW=B7tRbMG16cm8Blh%I2RXJ7tCF%U{dt4KgI+49D59p8^#xr_lbKLhZrXcY|re8 zF7nvL);^@Z6OsseEG%$aO-rlxdyliTvt8}{g$w1W@QL{Fvj<0o37F5+@SOhaBS?M| zI;JKkZJ=ZC^fyne0OD4aVP(+X*4F8HcteHM%$O1s)Q0tWS2EBa`yh5>54nHRYG|)@ zIT@Xrst#l7^@#(tD0ei_V+=swlJFpioqo(uY13M>u1>#7LDyBQOj+1JI&f+Mt>anW zv{_@dys&Eo@Vv}>dxO|0)^5k?m@2c*g9ra_n5x+a=({l+>CCH_FFOH>t6(W<=<3GL zTf{WnMn`d-Ek)0~@knx9c>o|J)VMjRUqO8AdCI&fP%(-itms3U!ZOK1ai2#x$}|Zm z&l6tr=l?uKs&Lr%1QCBb321+`G4#{@On*F%Rg^9pOUz#FxHNcz6u#ioT3t*)VuN0M zRg_Xl@cqAV=T_%AYk3cCZQvVQDF5_y{DGTE-v_uy?s>&7PO#0vTVM& ztn25%k^pyMgGW{gAC3zgj2s+YLMi-$dk1@|!f5a2&C*~$t6N%H9@+nb%oGFdMx9Jp ztHy%D`G7&&NsZ}bZBWWrs8MO}v_)*R{GrMY`PSs&vHX^c%iGV^B)?#jbhs2CylB}5 z@9r4mRoAz6B3g2^7##=9D0B$GXilnj3fof+S7St#m=?fB(ro7 zDa{cV^|Jd9E3@vFW4!K7eM-QM*SO8wSp<@z6~>Y1;) z`z*5KTW`Dxt2slhx$GC^vw?4B7aB=(iyTTmpm`7>h1I8Q+ zUolO0Hz8r+E(}yqKXvNyYq#|cJA?iFxaH^p0_KHNu*9xKz>mYZ)xD>A%BuLC zbYXanL6M$)BLf4a?ELWLLW+Z)+sd9ZLCO3Z-2Yx~8RXHj^_&tvZt*G9Pm0a^caaPN z?9O_i-wqDbLyiQvw`s#Ff?WuNmNR^KQ|1x6af!-b2i#FSQrmae!7F)t?33?Q~fP_rw2r& z^d_ScKcDWqu;C*8wgfFdi6Perv1^3!Tq4@@^r$)9Mbjz8PSv6c8J7iWej&@2eoHgc z6H(h`$upn6mvlXdI~>ohU25oDY9fk_kkFo;tqrAF#ulaEPe#NkilfA=$GQ@i zYXhtv5rGH&^LKs%wctH9^yUHLvZ>b4N^{7^sIo>FL6Ej9cuVbQC6HD%N?SIo1tnsNGMaouuXuylw6VPvf9b9p^+Qx zlcBU)P-B$U)Vw%N2b%KG@VCn8fn}0521}#zQ$2Gg9Gap8V!{NY6gB)KLA4RIUYRec z;E|=YNMt|xD!PDy;#|&Jf;u8PwSLk@Q#v9|K&WHbd=90PW39;9a^{-FezNEAF86W>kjE$zU8THbo*!+`T(V&9U#GJaGHt)*;~Ly{4CO;zvmS0y=XVV#~E z3+2BtHwG*Na8>`z@E&Zb6G$=*Zp5>?`WeA8(6V@>q@>{SuL{DS;Uo;AJUR8?xhp{h zn2E%4<~24??jnhTIh00@O~<=ebK`W>xTX5jLoH*@&OcBr>HWChV=5}1#PTh+!m9r&fCDJ(Q)J?L*MG$|G=MO?%_H+InX;eFSd>vPB`|ZlVHy2EMCb;YKFy2 zme2^k+K9R&;VykygsL4?OWb9`)uP$tyGZZQzgOFxe^PbuI$0$(1$Cq&sw2a!qBZXC zFiT9sv)thE2Q2+5BKWb(NfWsF`Aa!n6%8k+A0_mPvInK`%I~WC*kOx{k+wx8!Oaz$ zyT%wPCfom6($U0^7fV%*Pi)>+CcfqxDe3BMhld>Pw>jJ-l}PYW?{D zDaWuI2s*>EetiNOz7N=h`IyQR|x@)eX+817Pl$cl z+t&+IQxQvXUdv)WOt-q*kGt%g*v1ANLD{op0tP_@|xuuwz65)v8z;Oa3YJwj8HRIM--_jq1#kA5v1WUyH%of2+s@*#=nYDHwL z#{Ahl2~WPnBP@NFt)nXyKOdC_`v%7K;;CxpUq6H-;WRml3eVeJsaUEK@$dnsZH%5Y z1_I`M!IS0vP}(zWOTJ}TKax{x(Spk0Ry|YeEm*7wjMCp+D-)|LD+CDezO|B9GI>lk z(I_TNRXq1_EWfuI(-EM!WUYZUSjdA~ND+L4D7{e-NXbA%Qe+A_jt?`{K8lP%f}p?o z(0ygRvx|r51jNvH^lxbzkWJLMubi&+ozeSL@v&Qf8MHSmk$}gd-Gj!*q_h}-ddjf< zKe%sEx;bDx5p)EH_T^;}v-|(_Do$MZfYBdJrEoWUjs}PLv9}K9j%D^dJ0re~;79Z= zks)Nm%T@?W6NIqd)Sg;!!HRa+zzFKcK5_gA#h69yyuFV5e5-di_){*Ee^p4D?A5Q( z%1^#YTa7sqY5fnSV|jhu`g`tp-<+nIpOxF`4OB$0(5%y+?f217$bTQMmVUXS!9_qTupFenTz4?g92v#+?c zpS!M?8kc20@!rThr11m&kCv^NQlqAxm|!CKU20JmPF82TM?2445})6~HT&nb3mpOj zl8u*Z=4w!Lt+Hv~k_YE>gvf8kM=T&yS4eK(=(At1=9PlS^@Z}b?Lksp09q54v2A^& zWMd^c`@^^veh@<`&KK{|$+V8rV9s>eP_O5R^t7Tx21QAOYoX1K3IUFSsd}ZYb z0R}`1o40u=g{oj}8w#)AxM$B)&z(ExzsuN-WR$2iM&C0d_)F2e-xhe^ZT6#|PiIEG z4xEnvF@Hr#?w#r8-z}IUhYP%!`aQ01ig30r8T5RQ?Oka`D;HH~v%Z!lY4$M63p*>Y z68e5`_{f@JM&6400;dAvX$$l1gCrwGd6{~7$cRuP#sO9Ul8yBp!5~dGsjInAIod+A zXI37%zdps-9dwQ6F4BpC{q>oYb4rWJeTRMpUDXKF<;GELG`B;(+eZTzOG8B^3{(6% z1DYozVS}0oVM8Ynk8=2@av*sUtnGQk46^9JV4C9;a0huc02=MV8LC_kg@thcu+Uz2!ZTio~jwLK)C?er#Xdc} zNKc;13P;t7nsn}?FO|HJs91_U9pv1glr02q zk3H{o;%yGdPFrQIQ^*=cZfZI2BZ_jO5d%4>w9?*hH(|g$f=ZU&VM2N1O{Jc% zUuPh3=W`r^^u#V%8wbgpjw3z`brup=Zzy!@$&B6`K$W?5`m|EBV&RVPE|*USFf*S% zbxH^Yr$UIN9>_BG==`D&r3B}d0|fb2y3!XI7-&}v7&fo}jVAe3mZ#(uttLhb{9f&^ zB|LF3hPmVb8upcitP{YHm8ua%+ul>y)B#U8@*Wg@9<-Tn<6Qgt%D4JUj|8NsZgSmz zTU-z98C|xuNIU5?HUFow>O-B)*PBI~?$7>|fd1Nn_6JE1&}D429JRTBp$7U=@8IC8 z^|qiSXOcP$w%RfRa2OOfE=4nM6k+Rze0q*XVm zYqxOZXpGPN~&3H_T)6V#k^8+Gm^xttSr6yA@J=86lf`5Wg8`Kr$WVUvfo*@ zrf2)^4+nEan(o!UKEmo#`E3)=OQoIHIptOyvgH=3IX-b;=1%Ri;=u{}^CC~;mHC&v z+^)3GHuDG4F~*_Mx`+{T9(=(xsOk4dmtc2LnaCGz#Xt{EjMvT)#+eTW zZ~S7g3r$7{fhv(?Hv~!T-oVb@?DZ5YlK1!FTyXP`RxJK(uG;^l9!0g5PspbO4qx|V zgMbcoMG|79;w(I@$-(Q`(KpCQXvJFs#PY&b&5VUez7IhoCX0&3l}m~b!%E#+ zv}5mjW=gImq&fuq?}8@Sd{@DxZ>_!|O9Gvy$LgP+b_JO!9G3TSK(ir+3Z|2sU?gHa z+X^es+1=&oYm~_6-l=lm1c5>_H=i{ScGH_gS@(zW-H*3`?<$N-n zN2Xdy@J?4>EU6@3eZ?A_O%{1%BFSPgPO8fmEO73Bnq(Ft!eUt&mMzUIrI}bCsl8hv zs@FyDdH(bI7r!YUR7t6e?|yC8uGtYAo+xv; z+kNZi-O`(%9I_V|`Se^U;_lv{bXKw5!QQm5}Y4rcIIlE?u{bid%JT026z zLlToMM<0g55j@E_1UjLfU)VzZ*4<39{~JNrjAiqEfAhY1&ibbeswERX=p=oJlhkrn za^}CCxzA3gM?{z-pW`mW-HL1V^Tu<#FOZ)ImE0fbZJoZG%IBD^h^XByA92XF?Yul7 zGj_AIor~{fEFSoo!$f}xNuRr4$XV<&CU*r3f(S^)HBX}w=H=n>EX@ zT^C@oDzuJLuTI&6Y10LyzZ|tPP19l>oqT?<@*I22pdQbg5B4`AV>3tA3RP?dyD@kF zyih+u1+{?1qA|&l%5x;=++B9Zui|;*fL(yzH;!+-u{^3L6~aVTThw@5l@`}^*N^<8 z1Eb-*`fsbCrETLE=QMqm(BymKU!*xlpQIJPcw(ZV8^adCAw9SvfB%hzro;?-?Ltb+ z@srW!ZW6;c7E>Da0uhRS1A9HOR4k^+yn| z{#E(ix{lC+&)zrQZNtxe8A)(`K>$5`>oZvGiuj|t)V<l)QuissQIW=zbJ8!Vw3b}fIxf{G(u?m6 z)aN@}_uQO+_|BE{bM!4CyOmc`vf8DOG#;7^UO3Sk_F_JEB@Xsf$ZrYf2hKxO&Z*Yb z1V^#E;dG>|2q8Mi(E;0&Lb+V-B4jASc}`?@#Y5^cT?i7pdsU_rLUz30iFvEZ;3}6Z*rs zRk{_Wr)!S_tqRd;@i#`5qt^FV9$0D5zwOiJ-)HlG6wZYK3PIv&r4LQhowk?)ekTe+ zt}R>40LE?q0)Qr;JPgc4;T03hG@L|R$cxj*yL=@8A%yEJT`+eCoL|DEKtA%_r%zrPc}l*z;jDBW0CS)*Z|t=*7e z<;RKT(VJRZR#IYmaj&qjMk3QJT}>G0u;xBpXKbAXwaS~J4v^P)9;deX`H z0`0$NwD5u#n);DZPz^^bVMs#dFkge}%dZzp*g9LczS&+!f2;qxzyME`%`8>ivH|x* z;=dStD+r#A)0}ca zlGo^$lbc{T&tB@+GmFDRVC)i=xg~t7UL{>RVkE-syl_cvM;tbruu&l^*G)~Zj_79WoQxqj6uo&`6LxVWDYIl|}zh%7%$Q}9J}R*fX3?;qmOJ?-^{h5H_` zOXar@!4yjm6@T^1JE=1CE4j3AcDZKoMW!CyL%#HPsJow zjd#wTx4Z}4!NU(XQoc_Ke1Vi&2!^$wtIENt&9l^~XSiv!*~tL84{dwKr^n#viAK_w zZs;sd7}$Q4roLa{nw@Xo*$YwQv&rF`pl(XG)-N8U5|Fq*xFp}0Bc|n2O(}|DKmtew z0cA8u`Cx*)(i{Sr2|YIR;}dxUj!NV|E@WC49T>Q73Jx-WJ^hK2N$Djy*~*tZiX2Tl zyCaW}sfs7~|p2tb_)>Pb3w0H3j#+tHcL3bJ4Dh$8*@$hUb zp`Du(sIXM}u59`SN_Ko`=sp0|R2#5b(;gY*UOIPV{{hI&aQut_%~OP@C*d!WSzV1z zGgII+_g8!(`-0*C&K3S*9MgE%&U|)r#74#(`aJy^-{tB4`H4}=acqva3GX%J^zOJ- zv8x<9?{etSgJGMqfC?C3d4vh`-PTvZYudTzGN1CXV-Lxon0|&?0;?!FxhXB%QjyTs zd`+nRsu99h$h~j1jPAyq(k3$nY`9a`PmwStnKZ83GgQMDt+bq*3$>4k7#9mA*UL*P z6r}S{n%0pZB$C}2f$XVRMAHA|=D|tBh zw8S5Jhg)$@d5_0Wa&haKK_;a`Kdq2h;USTKv)*uzH>-bV2SI+xC-)A|fO#DqF{K~n zE!)(z4PueQj|>e!CNMQQ5tA6Bh}}egNZNl;&%HSbrz9JVJC-$Tc$}P^xVX7{V9B5k zP%NM)OP8NWctD%;E+{C#=`jqy2`KXDO@~kxMS|6fy%WmvZxagoE|~p8Ndjjx%?4#p zTjUwsNdYKJpou3aZDA8Ub(7N+O;xtt=fg=?5WJE>dy98N=BjRPkvY1(KGwi zFfAb>#J;iwy`1#YkAU@jfMTOm%8Dot4G)(gxDFZn0-|<-7bhu>>1;uglZ@kE@#W-Q zum~hy7FcwY)}t-*X876O&Yjvs0vTwCgI+z^Dmiv-Tuy3I_EYWs`TN;e#mXg~lPt>D z!(*cyl%SSt8o-<)7(DcsX@>82ENwjhZoBxU!BA*1YKmsD_+;w?c$$UBjfR~oNTHSG zlZC9`v(avR&!(V%9P!9VIe%kSMAJByX6i3)KOBv!%E!+y3P>;nr{>rf+s#SJk4T57 z7hi3QQml68%ma*9_1=wk8T`yC^wqvT=pzI)< zyR@j&IuBo>d}SZK9C1@QAba2gY#dtFiNcRgV-ISd50zTE z(+*`6BkPXP(&ka_(e>gs(K)9{vMILY5w$k$>|mmh7&EE?|`sElD{nQqjEsGAz+Rt;62gTV^M-zJ!l)C@HaJxMx=}-mA|8AClh4AG^Dgx(h$v*42sEul9?b%=FdK(NRZH<>BrN zk+3FvjB*!3PkG2!yg3Qq0yVi+N(P>a;cUNA>DO}>-f0$oeSE&@g$g5|D&J_75KPq@ zNaAhzk)>^I_{q;jtC-h4dDklNgcYw`{{*I-kO~ywjrQV|B)}q}E)go#uqUiHMoyDucamji+nHRH=}mBMv^b*l)yg@NBpy5 zEZAKqSr`BHmx*vbM$Umwlx8+WMnZOj)>cUvOGFDn<)jJGS-u#a;J@SK0e7QWa1Bgq>dy`` zGBduN_{GMYrELXBQK&8T`kx19+pFry8*^2K|nRivM#rCxzTN$h+XQ9pi z-nU)l+1qt<_Rr$~C0^5yp+FWiW3423^CoV3r|8#@`g_m#jtCm(2~Yp{5D~jciJRWx zB!9~I1kw+9iDZL#%(7}#IL5Da5zgUv+u7EUt2@}^7c)hnrY3I)@jnI%*KW*;D)&;7 z(vnv_LAyt zP|!n!00$X`C*DFDcOSNORsFuD)K+>ed@Zsz@6Yz};U2GhIScpdSM%e45{R_ej;k!Vm!k>qiIZmiFwgbyZTRiW5eyn4? zdZwIfH&YDunpuEZyHL=xwRQ_87LuZhv47XG(~ItF;4Mad37&FmgUy8D6|Uxe|Lh)Q z8PtzvuUf+cwyex4+{C40SRq%T;7{Lk5!~f&BAF+t))X8#lp#(A!IfxAAlZ;6$J(aN zn*ktY+r&st4oW-z{On3+he1kBRNRY#>6KRCT3$XrVaW1!2Pxv*(o8WbrE(&b>RQ|U z(*>Mr27*|Fn$=%vo0Q!htLQXihgFPf)t2}eT!mDm3%icWi8$B=2~{;%`_WyrC_X;E zxFc&mJ-|}zJZQ&WmoRd__V97;%|92)f0hn+<6UL}v8}?5Hn9_F=WZYEx+H<8QD%>xl**}7r{bQX zcP2|ElzdRc%;0x|Z(wj_bp z+USQyA8kB$gurJDe$MZ_etXH8j5?hJ22!vp-*?;X7L%EHY&HY*puV8)^&a1*TqUB^jkX$!P060SXVUqL%;FglAC3{glx>iH=) z#01DL7-fXc*)dGt`JLNnLZpB-wLct;+n1;A+_kIWJy{j7B(a|wsjdF_ajTQl%!Us; zP_!{_*n13?wlTnJd^|i_e3#AwMb5Nc|G?U;)SxG7G^%xWp7T9pA`USgb=;LwgOA2R zt)n1n@XWF^S?yx1q|6N}G&5e~{4K0&Z(HUa8yDBGo*sWQi_t{nJZ?2PBWhq^K-kXk z!5K%%n`6_60=JV}YV3|>cGs5ekO*TaMcEp|pWQ!Uol_aHw4V^g%9s2*wWUAbzz#)+ zq8+R1L{%rue#D@vL?wq>YH$07z&VHSfO`I-6}}t-$70{7{Foj5O^KKw)RI_ z=D;%_6CBIFK-3(#gwCExsgJDk(SEg`KMK8)=`hs_k+@@9|HYk2HK%)M<=bbYym^Ep zUPsdX!Gmg0C6m0py*HGQm(}v=OWVtK5p<%oudZLdyu9BZ37(v)g@r{_;u^535JqGn z!-!b8Y(qSB|MdPnq-?{;=1su2BMtI188crc!n}58^GPd(VT;&bo5db^w}?d^nHV1% zrG?c?6YNp#*@eKy5B5W}>Q8Bo9RSgXKrWd*BFJJaxPIg z7-|cu)t0H?k!hg}Q(~|Dl6BwLSss%8{D8>9@>mGVLCSSxrlxt7%pNtb5`Qq3F zN3cHGmWlQJhgMoA65Q;|&HD)b$Xp61A+Zl#g{1<5&?Rxw>2gl-00nhtUU!9_R7C?+ z6-Q~km8VfbP~&M!4oFLL$${)~c66M(_{*0s1$H%UZD-^vq1DxSQ2grE$T63GLJ%8< zIocxLkD|v=wd>VuH6BYK=n*WYf=_(Sh6T^_3J~}y@aQOi@op`;eM-JebxozfGlQi zMKa9Pr=Vblr{TM;CZuDWJUezI)7IpR2mAW|NZVz@jpQmmm7Z7Ovh{6MvHBaiTxVXMfwCJ8?s zV-nRD-|hW*=H`qM9sia;s6(gOTB;ftH21Fvgh?!3UNuj{EYhFd3^!0tIVX_38{X$( z_82Krs$$gI2L@)+3TiN(l}irstl!23Ef`Y}tx185b0go*rN1i8sEtB#mt87Xb$S2S z7__ud2W^$))PK#>^j<_k4L}`B>)OY_<^YEc>wdhTKvy8f9i9ST?#7;YQK@_vh3Cr8D^z{fx#WvTFB3l^CGFv%%rmHW*F>4Nra;^osr>U}i2wO^BZ z8MGsHA|)YgCF0_qkm%#-8HPCzgw0TZ5z?TYU6gxvx84eVUrf6$u_22tUxJp;J7#{Z z%hFi{**PeDkZsjoS-XI|QthaBG0$9f3X8AxSsomUx@wQ%x4GH-KOLkx-L8I;ANvs@ zA@##p#89|NjEC?8Nkrd}DfL~SjLL;`{Z+qk(4 z<+>q#B1IGEBi)4LMUFF6IX$RLsoLr-6{sD)!EDqzm0z; zWn!GDHp9_TUUT#O8b9!U?}`?dKm2d%UFYN9q&@Z(E5hJ2b#dGt6PAC}E~A$%Vi6GP zWVg#?6WahB?U3GNB0x5`A8;mOMUwM_ix38Z%UdA@@)k%}hxBT2P!=>gV&YyoEUM#) zbPq0AHH08_=FM`VHKfQG8hOGt?b$;WNA@ugsj;sva1vo zvP_GnXuFXlp~y~U-z#lMA|g^+WQ!)DvVM>AQZw^BpXd9T=llETcfX!zW(v3KzOMKC zeV*rW9>;M;3h<8qEH2{yd#sgf=r?>W8f9xcJ(AekFq?sjCeTfk-b?}=wx2xI?hSY{ zE4hq)RM=jvNJuP6wEENy0R&`&z(fv?ejKWCOUK+3i4%Pwp4bHX$?>rHGn@lq7Sey$ zEye9{qH%(FR{hmGpAIuLQk$viL_|!C%fg%~+s6 zO78!q!ow zq3u9;@AW-JGF@=zI7zK=)=iE75}8bN^a9Rga&7Bxm_-^7C{cCeM#p;rvndx?d}$7I z9mx!^#`5@QUo4h|Bj$0dYdSUhIfG=#jYj5chdu?-X%8Jf92^#w2q}#nm~^B&M6eTP zm;u8*vC5?3zA9^0yr|L!-x(0RC5!P`gW7pKvK0HAoH@} z#N<)9BV3iJ6kUrLrg(DAByP5bm=CvCTnuaNiv>S z)uhSX<0hN`1yMn>b++HDw)5bp&V=W1Q1L4}nRgIRfzNA6L6frGHVjQUcdUxpr;q8- z0K1Ml9{&x6N7!9n3hV7hkhoyT3Q}A0JqXeh!BCWS79@J@5GF;}5Md3?tV;ouCxU;@ zEVHIXd8gk$MNN&PNq>{xNz_3zrp;YAuXtm*O&ZYfVAIeV!UzDz)^`s``Qj+|w&mIqqUd_0Hgg$$;ki0BlmP1M z%@QLceMgs$?|tU!JuU}-@9OPMbQ93{8EuE>Id;nC;XkPx4K&$Vsy+$Wt7|r(-yZMp zO)DjkBLOXbsLlWe7aShmNF4+EXf_NO?wWS!!jA$83ef;&%ztsY#W)~SpNPV;aE37b z!tHk3r^Fyyu97KU^7exj<7}a@$g953buP=dWo-26kFH0SZ!aA{HfA*E;)KF5Ec#ZP zzv|Y8bohlf+8AZ~WP{D(xbfNKm5aaa3)amcreW1;gH}<3bAo~Lh_`utZADQ;`-OIW z6HB;EF;|O!^vq{EA+BkQi~`XyR@zWI9FL|UYA%_a3(td?^90`}zum*UY}^IeZ}OJM zya^t)juwIiO#RvUd98z2|R|Ja!x+16!$w-sb#vsKfS{8ZF z!On*Zrtp)uS_|m2_}W&IS|>8>q~H=0+$1r;UrX04#VU$zeB&x-@N7#w;P@3bH_r>I zVUw+PW+H{AlZ@>4J3n)XOuhn`dHE$p(_6Q05o`|mX1dFp4V^CvOn>|BH*PfK)B>vy z=zx6#w(Apw{~mO+M8UuT~qsZLQr$%7TC4M*6)QH=|~HN!y;xyr*q@ z65_6^@s{(d|IB%ej&S&m1GsS)^H8*~IlvpkO&VaSdiCm}&witCH=Suk-sA8M;gA6EvvPOF*0ePVAmv5L01?U}y!)BFQ4uJ>=H4 zcW)Zbl5}Xwfc9^~paA$K3MgE~VNHt6Qz%&NZb9gtt((Pa8+17=E+Io)@T6_6^qk816G?M+P2s~9Xg#tqeMw+ z0rDwnej`f4Zj-g@z9vI@`5HVf{y)UN`u79S`CcK)VDl$%x9y1Jc9H1AEZ>x<`M1jP zLFvpN3FsR)Zk*WiPl z;3fix_btS9N2bp&^R!3TFRS43U*Y)TK4;J)Cc~T&ytp2fWpr0r_1{wp73oS~uE&a9 z>fIJM$hg|z+2Yl;wrrfVA=EFBaVKPFZ$V_7BjXT665zvCvR!|C^nY8IJb> z=lq$eCqKW=Xgid!Ail{wK1EaBP*kQy=DGS1VbmZc zP07w)1&cff^lthgx+B(~xTt8!;R+^{>`u8d|CR=M^VDY4S|m=C%2t7?4bJ2zsouTf zLzqDd;a3{zAxMr%F6*pEGCLwT0~R53$HStca46~Zm@xA_axrf*z&3(N4Q(WjUd#{0 zity*~wGc)I36XZj3pjYuEdq&M=itG7!qPyiw?uBc%UA&}G0iP49S}(vxVz_&Z7WR6 z$;)EA@|WMnM~wE#rn4_nlJTb_2hpnvpVpdZI2a^WY(#MZ;l9@4alBPfLnWyC^VuV@ z3(qxVRE&$YwLt3oVq)y6zN^Gt>U9QlQ$f#%VBsQc?CoFr>yCP>Yo2jZ;$9dTI`g*H zh^KuaxYs+zaucE-n8w6yvm7YIF{|2C zLTmM6ho%QRGHmmi-E)90_M`5|O^=O=y0yukyqQ`@hCht-z><%ITiA3v2TbrYl7Ew( z9Q@sSR%dDktQ3R4l9i&awfg-I?A_WoyIfd*Xvq%yj{8Q7u3If|vw_0dRr`HyOMy~k zHBaE>B_R$*Vz~CSZqB0o+Sd@m)AsFc=hyLQtn$L(tt}nUl#nBO;Ux;3%E1#It&%fGWreX=l7;oo(L^pn1+w}RTbGeMk%fcx%*2?Y;PWa(q40x}k1 zv+q1{L6Vtsd-DPr`RMQRcscbyjlWq<86s+btR)A<9`ug0X8WLv+;e5#kQzf@>UBlg zv0G}dV2IhHM-iuXbN_Nw@QBB>#Myq8T~?@ixY2}5kq#2AJOFvAKtoApj?+`QIb&4B zi8`Trnl`hxd?#1lh#HS=--=c`HyU1zutjozH`}>Box>#*78Vv+NiWmw1Cfx#;Ftzc z)c~T^N^n%-A-dDx5>Eyaq$|WIhpqOrAvX4e%zo#HXHK1I1jwTVdH#2O-2Yy>?$1k} z+cE0>UB8++d=^Tj62a-zp(BFVP*34B&X|L3yqR;{&DG`L!Gq9Eq8ndcUQV(E@_Rv$ z6-5n(O7#iIwB%xFMWjMDOrK$n2REIspF0K%{nQ-+lr&)e!sD?2D-DMdlby>)(jta5 zkvjFGrb#CHavr=|@p>#go!#Sm`}S?A@jv;==|yI|)b{q#+c0k_Yr&3VcT zQE-ac2|-Z^Ev-vSL7juze`R=U)Y}^nKYWelJ>3`@A z8G6#>O>(U8?0fHGxrKfkEBAM%UUAhLwWb^OJ%Tr#PW1F&q-HB|pP?-eBb|Ofw7N&_ z=~VK_fb@UK6$~9|y90J@dl$CrDOPla$j0wl?maFV42z>_5>uA>KJw2~>z;CU&r=Np zGMwtI{HBgPAqa1Dwem<}wLJO98eEUtgD$=a7NrN8<(};2_+Y+iA)GbKa%VFIZ|jAB zfK+_>HP0_u15+t7TZ12zD4u7;(0kil5NHha^sb;a$RWoUa51-SivkCG`ivRPuinxf z^xgaG=DfqWn#rhFYv&!?%DFKtHt&4v23HRU^x2Xf5Pom4(EG$s7`X4zZd zF67Y*ngqm$3m{DdrQZ>A$JEu-9s}AG;(&nj*ucoV#%2UAveA%B#x*kSbe0DX^Fi=7 z7K{EdY<|Yj5PE6(f5S?A1<(CkC|X|V4cY_B*NOvZDd9$)5enLoxat_^0hWhClfI&j&!*>GAmPf-w5GxdPv>T~Xq{ zE&3pQx>oEs1lGvMJ5QJ$uQHWf73sCw=KrmHOYVd3-$q6*NO0U|C7gA*a9+KuW>@!v zM%!%e{@9H@0yhNI-Wd=1e& z@d5@fB(#Q$;Sh~o2eDkR(LAJnVZIc5b5sGqVhO(f<`E^aV8P|)T6o(c`*qm4(-5>N zC_qFYryxCD&QmzoClQGe(2mu;0HUpvwql>yM)V8v-i#9bvp;G7jQ3YbwaK+R>)Z7w zRCnxq!E!12KNKt`_nc(IqzZa;pPboibYpDMWy`7>&(h6e z+07hX@XuraCYJgKySmjWXez@2asK?snlD&+)P_tbUq=Mq%ZIt#sfrjZ3VJwEH2*wa z7}CAs=pmJT|Ew8!{7$KF`9GeSNH`CY zIG=QjV6bFhkR1x54gk$3zh&G_W~0&1x6Af#RvGMKJD=q8`xjClW<7053R$2hZ!v|{ z;``rVb!2)#o`rB!4aMPFoocB}JbdWEsXkQvg4_ss_(Ql;>&=k8cPp`*ei z&oj77I`;K@POl%!(thxLdJljHa@&hdk@+7Epqfwez5#6C-}mpNn?Ehl@Wq?{yKQ)3 zVZ-mEGRD{F^=aECWv5GwMz2ZYEz^!wIZ)d-_K4}gHxGQe+{pW*-3#BYmeo=@7sHhW zUa^bs*SDUTSbXdAm)41?YFhnFz-Nu!$Rblj6&k>C$W^ zEv=`3U*Z8;>`M)WGo52e@nw>^y z1g6RvZr!@I>=F`a>YtJZLGknRD^R8-qNImqPitih6BTY6eQTTy%>LKj)=wo*A7#z| zcWn!6mH$6rY#_^Hn!FQwDJv~2t+p2KMCa>ZDBBAR?ypwojtW5sPl-|?udUJOmlJX+{qim=B*_M+QIr2 zn*-9@=U(fF0Nz#J2u>D+{9*UplZBWNoM3g8Fz@{d~;2naEF80gXcpWa66uf(fecfK&j3@?3b&@4KS1^7x$MhwKDud->M&oK@>6s7 z=3vRYKXctoZjpT>$P{g$H@3R2S-TNqk$H*#4Muf;1T0`vL+cer8+bQ|zV)kp`N$Rq zD7eDKDO0A@VoP2{UXhNDF*jFAiSnBHc#0jl!Fb1Jg#= zFETLezmuq9&Tsu6tv5X`IlgkLFlgGOlj!|!FTFmu!Pi{bc{HVnv_dv@mVHuCF}M68 z+)il%0kYu^@Gtezj-2gvlBV8(AIgo++1s)&J0&Selgw+tewZ<5P6Ft|jDQNOr=qnZ zmmy%&Eibt9SBOssEQH0)O}etS2w&AuCl(w9|;Fw7ulMf$Lf#9MWU9o9_QJTWq~A8Z#FY;k-WSKOjunLuLIiM0&6g` zL5n4OE-F`uK|k%R0&$d?mvkT`ErbI@e7PBRv&cQkiwAu{ab(N;pSx@HEGoCgt9hIVgnKqDo4`0fqN4kRF}?mPd+LhDu6GxY4k3im3G7|GhGdJchFj z-K50guYe+@1k&th`4I|==(2wu!vVQzWDe#$apU1v{p{-eS7g0_U_kg4mHS`oExo_S zC=GwH0%lFl^tM45;H1u-K5N#24FiqeB-jXIRnOc{Pe&`$wrx`q>v2aYcaruol`OKL zAkSIy@^jW&df=N~D=>YsYb~o)a+inW@rJ~{U(ByV9m1iU>`$lJ(FcuxHo0Fd>q$74 zl?_|8=@5-Wwq)0s>n8aI2y7)dtZWXI1Yus#g&@3s9qDXzH`CuSGV<}WuhSuspLj0+ zD5bVD{?%H$ZBq6ZvOF_IZT2VH`-kqhYJIeUX^ABvsgNYvHgT#89 zTYGq+6bP9sAmHyjfX0$3pkbo4(8x~kvPhl_w=6QxOF92|tGL87=8ai8x3Hw7152!X zH!rDqM}|v}!WGJ3O`ejH0?YYO(j|n;?Y+0%6dXdyJ*JBSIT(L*ZodaQmU;TayDXd;NdHC z9crqM3Me$s{bhcIQbBW7QfP89P~kW}9Kcs#&64Pb$SkhUhrS#Zh+R#B0bL3^9Gav6n89ttUS%_%M%^&2dT|-R6WS7awo20w+^aSat z`0klDEqHH}Z`C>JKr6{9HtKj65nDJI=C<0Fc#Cy#bfa%X@VEWzJID99 zy6R);UvDr^w>vvW)+r7g%AEBs=}yn89Ne9pk`D2&l&U0+C5C`3o{H==?)IeO?0n62 zW*6r=c!9mHJpAPf5HaE;(HsoS zZn?X2FPeB<{ek7?7v?2^ocBF`> zYp&a@dFoWctIlK%+efXp`(APgQWM#TwV=Oc%a*gfj~+dGXFQ#TWT0Cu4mt^}`V5M^ zhj=npPFhEt0+S4f7?{=snLfu4;&&Z6oJ{pjb4yi8AgxcUaQT?_me%H&!A~u2ZEs7u zCrrYZjhfL=rMuLy+n_$TQs9s#M7^<9FK7 zxG8+h32?OLk57T?l1)lAGy<>0+8!Thj=5TT>xrJs;9%)e3W3v`kwvvvUO7fEJ=wb7 zy0r!l4z&pEDd_7$l9QqnG0*$U8blX~T6$;JHU7~@Q!{De6YS#Pp<2s5JU@$6R`G7I zxFi*>C|=7aslPmF-PrXw_I-VDYW_y53v?PBZyg#78i>Kxt&vFMuE2Y_4WpC9t8H;x zfM-?VQk;KTieKTIaPxt5qf_2ZsC@9TXS~B<)#BSTYP2?Jfs{)xmvzAR7q28aK6Nv zYa5|ds_11RH-56nN})Acy!FwNpxm()0RCtB{B`=SeVfl1L?YDx?irsgM zsFR<>@||&2@QSm*kF1+Kg$84Xr%;lp?;=%xfzA_k(?ZReZ(avw>`!$#;8|8#rh(-! z+uglXV^d8`nr(Bdv4&JsRKjw*Yi1W@(%f3kfAJa@HXbN%I`^tqqKt}G$El6f^H7<`vG= zgBN6L?q(k_uN(d!r@#CIxmCaK7^Q;Z=Tt&>UvtC1BVV7_T$Hn7^10e;+qwl54BhUZ z4*5`by?c(Vrqs#9oDKMvxcQ%2Dnd%EZ}gvsvV+}*6nHaEwdRfvaU&xmaN;ycI*#;G z&(0H#=f{+Mf`SU~ws<^ln!^N$UbpfX)t`~vWs^!CRHUVj7njxdc!&$9*VctZ^#pLC zYK%!IqaG|^n~|9m0)YnMszhT(s_O`?+@AgWL)ZklqVYy}GH{ogYunaQ=?F>IDevL0 zwlpGO^5o}%%yx}CK#P}Nb!r$j1`{QljGZt!Ia*2+XuyZ2jydwk5VjXMaMVD+{ES4v z6&D&jJUtz;`N=O6C4i9zZ$*<>aNsGF%kg1vwdN$yAh(*WLe;KSBKaKGFML}s`p6kkiD|!`@ z(&pCIIB>Z3hLI)y!(0PsC8VvMU*uWM`Pay{|k%U6Z;7zWD(S9a2 z`Z}Eco)7W2!P+!xS@D-51z)Xj`5l+qRJdTw({zg43rZr9m&5bm^a>#QM~@u~E2B0) zD#depZoH;q6m{t36pexvXsP&( z7qA*$?Y|bsd3Ay3e!wAdI~#M`Yf~fG$X+(le<0W1{^BX1mbYzfWXZdkl%-^fKRkXE z)lyzn$K?HZ-=K$^RyMNX>3}Tofmt88<_Q)B9!ID0_kaEXF4^>H)ATC0F-vCtaXOdj zB^Hc^HzgTui51t__&>;3n#!*8Aia*I&pi_gytk<%4Fk&d0_JU zyCmodVImN@%ahCB$`=R7x^sP$_pvGS4ABVy2#L)l?$%jvK&L-?HDnk-6k;hUsTn>h z%%wy=CpiV?NIWJi6SggKt5(^;6}BG`&NmHpXv3-5%Qq1J8hy7Y>{B!F{Q5zONyk<8 zzJI2N%f9hy6wXgrK6PrTv7KEU*>j@WDn;MWY#0xs9seh$E4H|FhF#_D%a-T};tGjW zMJ=bQW>LOlC?2SgMI6E42?td{LSN{3f)Ds(%q7WyVVmTZYbrQ+$V7|Me8{Is3;Zq< zh*vGvCE0bfB73bxYY0h#7qz5FSHpXn9=pm8tNj|XkyQ(YqAp_GjJ9FfJdai(N?-^n zL*l(+N9pvvjo`rIW-Y2oHZ>ydbxuAWrU&5MUJweI*@m!Pj+`SiYb|qmVqsuVLt-$) z_`{nwS72Ls?M{Q^i~Jn;6zYyU%LHzneP3i6{B~x)8b=amm?UJ0STf@_Km-;^msnTe z(OZqvhX$rX8WIMwg}B%#>aD{&ThOAkL#h7hHWn*s$?VKiI809pA;+K3Qh2qsgO!lB zaN{X8F3?Sh($DXoE#x@7EG($;9@~r)MDqUkK!gj`pXV1axH`|nOzVTn4peWlQ~CK5 zft46?tBZVm{BzN(Q_sz}h?W`K3`T))y%Dkz{{SHo5jB+I!u6+;FJg~86^i^h;N;MD zr}s0htcqsw58SP*lfHM)d#P++nc)3JK>JReI+Zz@*_bT-H4o2h9TOsDu8T*FRKOLG zKs#KS)8i^=79)_!Ck{UQ_wVQEf-3iQ+~~t*Zs|>f?S4nZXJMQ|9|S@PN*D>E4<{A> zBtq`I2Rc{E?0mk3hG%8?9ZROg(9{U$M9w(`hSc+Yczx2Z-TcsL@Lr!gn^ zAk~Flp49qo2dhwZE_F71#cnR?842NBn>UWa9-D2p22-ohf!mUxG!wnb8#_@2(GoI9 zwNM=Tqj*YpU!PR=vD6WqHEW9v6X00BCu%`E1oCa1 zj1kkuQ8)1WcxNwLj|-x?biy1OU<==+;lWSZ5c8XHd#Kn31CBjblA z{iTZrbx$kyokuYpj}svgg{f+00k9CH2K&3x@ylP}ik6*b`o^rfRAj9jUA%ve6AoBN zYQyDbui?@UqkG_pR7KvkRcGu*LL?&hECY66Yc%D!48NFyjanQFU}`uareHSO!F=b$ z@4t&=dSOJk49vqQF@Rah9v7FTwanoQ_x_NO+8J4+EBJi_qGZs;i%y&0y?J9b>;qqT zVC0w}*M_W?RImUR;38qaGZ3?UrKMBXHl!G*U5zf&P=?igQr#+a=R{u-hI>bpEOL}e*qv|PjPX>fkuW$S^)o5*E<@ zjohZWt1AT!0By!w4xpa-(o<;F7)$PYb|a>n_o^CE$`U3nRIb3Gb3zCw_Kc*qSu)W@WocCoTU2`E9@n!Dv7sDWZc8UgGCas4jbS8UHupMb}4 zFboU}KJLLEbTjk~{kHjN$X+{Q7PFD5m+n?3SEW?M1dVWvTi8=xmX(a3EE7GbQFSz} z>bRn=Nxtjwk?Jms_|1z=HW!)*d zcVY?*j8ZxxwRquym1i{j2y43yob1lTJ zSI~eJn?GL#M_LVxJM|L{CHVzurTUiMdytkU%&*hN6l*&|4yvguc({l9jaz9Umvhsa zn|~CYd3KqWx?tha5POjm>rR$+F4t0@5XMv~D%a0zPh`Ch9JA{&Yiq~>&vD;s*L^MA z==XcMMqAtZYkCS-ue+TS-F+NL4)f9hY%a9$W#KueC6kJu3N_7Bkth8vOmT(^Mj`e7WQS{t&@i`F#4SKQzs`ZjGB| zu%@viX5VKEtz{32*a8hg;ff1(#B$_jhm3gkJ!tM8)Cg(F$oss9IBazp@J6x+s@`6o zkyz7@&rw=gNy3K6oQJ4bh_{6tBKZ9IEt{j5V6pW#2FDVc|b^6?lP?0Bi_Pu6NPTGwdRPQQ&eH+Nb!y~p#i26X-#nSo~I{RQ? zb7LY2PgH7lsBQ2rOulmM&I#UNK?d}ZSrqv8$$MtTz7`k=Lv zvU>IE6ODdhVPQxod4drE!oWqx>)P1wHS&8+SJ!l6Xd=I`NO*;?#*IdnC8DHcfiMTS z=r9rd5zg)S8Atn?RLi21Bk^urY=hg~Z0j<}@O)73Lr*OFna+xvWuSnlAADL$n=}2-Ubj z%NEW|PpOM6C@4jld=Rw*G3vi!WP92MVLgJB)l5xU7pkP=uKEmWT5}ZdxEvM zb_aIuSvI;2Yd`>560#rr80dKop!!%)5fcFgkn$PxPiZEFzRn%`$%G#VOmF-UEbtw= z2!2i`uwd)cctg0X7@#B5Lj@byyP0l?(sVind;?5;dHArcA$`^DJsuDcv~8AQhncxK z?KeE2#7UQ#7#!*J{Tcc$2xZHicM@O@`fi(9e%+l;C4QH=H#WQf1wPPkVCnRJ{~6|w ztkSs}quBoFAFba$tL5^>4W9po5k(#oZEJ9dkG2mD4Y|Q>3r#wER9Wpvdfksw1c_8% zZvB=JZU))hUP7x5F9o1MtH|F9`#Zzr!|T@zl$DEkPBDkEuQ+qq)3@=<{V%73bk<*4 zGk|KTtRdzy6J)>d3#VwHAV*6lz3C2$hRBpw8F?$CnHKCg`jH--8IpW<^ZRzD-}oKY zy5rD@Vvq7^a$tV`7g%*+8k@e4B_cWAbTq?e>6p8{uiFe@T}W+66orJathl)N z-e$TcmELo(mY|tmG-(5aGTAd{&J5LD1W8fvh0HuCZOQzy8=WI;DU|dO|F&-*z)_)% zwH=JI^7-@U)wyntL*OuM_Vyl@xvOjOeO=sqw0`48apW0i&z^l3Ge_&vYEh2--gg1m z0yQYou6 zK>@$8>FsHlA>{Vqg*k3ud);*msyfuuky_MFyGv6uU>Gzlfbqfh7i&*^M;I0MLij@D z8+s`EpMfT-bD_{Oz{ch|#T?TK5hz#fds-{8P7b3WBSAA(Qh!3${y&=5P#gp7L}7CV z4hv5I%aP&Ou${TgNH&kpUCF5TE(`!uZATAuGo~#N*@r#`HyVvd6i6C000{dz1-sT! z{^^ZB*KfEx+P}e6r1jyc((rHCEgk~$ivnZk6$Sx`^sujrKK|}exT7~58|xkGUw~_a zLXXVT&IkU=reK6xzlyl&a(myk;@8O5QbB=9Pc*pfVadJ!SwDlnU4mofE+!`{kyU;Yhf5wkhIYP@iwO3IL%H z#Z#Mro&XDV64;P|tjVC=eg#In?3nfR!xV)5qQ1zaRfs@R7Wr`)D|Ov06GOdN`l>Js z-GfTeZB|UkUW=UZhIR5h8geZ&_`?j|eh9^>li1{&V!meCp^y-xvl<@>8wVZ*3||L? zF3EoUIr4!LSAtv9`NM<>HRl0-ph$5RxHn_Q!T73Z&a{Scht~ezulQtOpx#+aU)ES3 zejLL0&a!qaM77TKDwr~cb--ss&71e{&Dv7Z-hUoU+%+szNMn8(;41Bb>{uUVu=0ev zY?Dtb&KHWBqu|~hoxD!u?4f|z((|wMYXFJ;b#wlXmW>PEwBu_ROGNa=u^(-4O4-_oYT}SSa<4mt zuwRKv_dud*a<+rcJwoPP_<|?tqeX zzcoidnz4IuMhHa1)Q1DVcNOj zG-t(osDDOI1OO6y7_gDk6qY$E&}kqAn$Qh8e0WImjLNr|KKc<|g3Qkew}ZVe5{^2^rX<+bd2Ym#dS%BjyY& z^8(C@iQ0nypSS!h9t!XmdrJiTP) zqSgwUYl-fk-tBR73&sIMI6f&rKzdN^YtH|{m;1G)Xd4=MluGCB>r4P>Sh^%&!2o)Y zszhf2pNW71Tq_Jb)sTcefoB3x%3YPi4$2dMP;oQZ{Gqb8JBOdORbkPUY@Z1%etR_7 zxm+gb5cLSjABff=1g|2)pn=*Rua7V0=~X!RcWC%pwV*t1Q>hu^q zAfZ2Y@7iX_&_(->?FuYmBVPxEd&gl2Se?Y;#j!Vd(oAyeufNK_o{Ul~4zgzl1kGI6 zHr=>Fw0U8FbAxw5q9EE>^ss5>G)VANKO!yxzmg>~6-pq7=h@eji<8bFFc1a(99_au*5h?0e{Qd`@6*Ia(}$2-$#oFb(|Xb$bLwRHq;4KWXJ)*AHv zN|(NFzmjgX9BwMaBL$qLgHvi^&1V4gh`5rURwahvj<+MB$YQsF4rT;Y+I4u)9VMrT zqM|uaXlhpJ!-Ub_`{GKL&YrOoen8VChz)NaQ5^R`w9i7J4mJ{>w1rdUVpMtL6G8JE zIJzia+|Xq!d-lv2$pB&T0G^mJi@3;l-bSB{e?|}HgvaT^`ie&6w#!)x)X60E>;_~p zs$XH_wN-5yfZ~(byffNo{`%`SwPo;mca$nCFPFjG0z0*3$nkYwL>alGaVNXsw4n1r z%rC^ZC0_Twt`_(=HwWY3oGooLM1;>nX(d{ zi}GgTj0=@yV~~f_Of#ANWs+I5xB&lz_{cm#NZ>w zN*D*tQ}%vthqDU58uPm)+E?vjMY^($hgR-FM*(3+W)kNfB{l7k0_;>>k9vbpLejFbg$?FC!ty4J{ zKaFFl$HvXen^e4ndPr)^=!r=U;DDdR*?>-70BT~syiUOF$#ot$Q6mpz9y~3jQ{A$Y z<=ZJ2)Mz$QR-=T&}F_x&`k<{6S>*RJPsGWJz>+V?CT ztMM?&BqQPSx-nwG!0xGS$W4+ezms#MJ*BB1^9(kE*u$kKkTm1qC2dX36(Qu;Qq|n- z5Bh?U(+HTe-4iFX5^}I^GyCY=ndbofFESk`#{v!(c$&yd1XFfAmaO4G#;%tZ9kr>o zs6x@~Fiu%|I~SwRDFRcLh=Lg>ivmLDgZBESxLFrh_Ps%&=mFnD5^jR}KrALqB|3L_ zOwQrv7`D#{H+}zy7d-wGj*{Coxg!D0z=FVddlq8)gQweG?IQ8o#fx)srX--PezaXK zUy83ok1uqo>D}vutrap1dQVG*r{H zxh2<)@pVYW(n|K~8po;|KXs~3{2e&zp(qMw!v*Q(PFH^aL)%C`Ri!6?&z z>zSTGXVJh-=a9G+L`6h{y7}$fRy1BDTsIm4RA9%WoHZOkFw^KS3eeO~f`PRit{?0I zU3{6^Hl&HbGNMrKJuOd8&lWI{w>(um^ zvGB*wyI$@r{AxpR%n9fO07$r^4*Zt5=>XjN>OZdTMerlx4OJ4 z&==E8Kwn=L-B>t7Mj-506%KSM(2^lq88pAvQY{F+jv=Vy5C__b77x&}`St6|7zM`R zx+m;}!?UU1&#W3l)uN3vdzp2P3cGnbfKRkhed7BikV6BWlepoHUEhzguR7bsiexFZ zbGBy~2wLe)#WTNl;6oCn{{M^3i&AioW*ZY zLK#pKA2vHzQ7gCO-JSr*GO}4ZCioUGW{FGW=ZiAf2xDAm90ysD&^e0u=QLeNNA5Ys z3Gr1lHa3zYW+H{*#@r0bLU1eMK#Z3?ajjh*BgMK3K3l+d23@ew+Vrt3GycF5{WwYk z2rENS*naqT7Hh22N5OKOJlA~K>_{`{PTRnvh-u$T(00dF?T8exX{i191iXcG>h&I}T!_9$)cpvz9nYg*mmVJ--tcuJr zs1I4_rO@IRo?VqggTqn!;|f0(CxpLx8QSgA_uiQB3zXgOqEGw0#+prB=`%bio++BG z(1%Y4sjB!BnbIFvs)-Liw{j0MrxR6R(_3(iRFet{7w>@gaKLGH)_J1RgZIyKo;Y}| zaRo)C6UFXUFHz$OyX*{_IXo;b{fKt}gW&e&WM{Vm{lXR( z)33;}E?N~*YJt5@^lUKgHOTS>nV^$fy~!hfmWU;o@&pZ`Lk;PceFvJ?K6-o~Dusuh z^Rli@VY6@U^uqci%Rh(exG2zeL?F|y>qEo{W`Ap|^SL3buL9hRM9b}NXXN%|aU%|Ri zfBpR0Oay!KG!W(h6%wV76M+jwR?T*i3Pv_OcL+ubRp9Z^uqJyFSK&@5&i7{TZjJG4APh2%>2BzxoEK4e;AHd z8eE#;d}8v%*ZJ4SL;dE10pE6;0VLC8gaS}B5Ti(i;56O5=H2`ENx-Glat8(VuNh{s zDcc7ule#mfnXeHtflQw3^(6Ad3_;AmvE7Uzv8m8#kh%b*ej_|b93#Udx!|%32D{4u z#huAHh^(z2yb}sOC>iSwUm2L%KDt;*b5jv5{ks9ODRw_tSfA^b2rkhIY%+e;EpBjO zpz#V-2)#8RC=pW%bnLr*uds-_Wk9+h@j5+ZB$P>@V9j*c+x?bv5_B<~p{cwJe)4Va zaCrGWnfq3Se_1RoEe%x�gtyY+B7E=JVcbFuw@!~xSvg9q-kpQ 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 literal 0 HcmV?d00001 diff --git a/examples/recomm_system/plots/feature_class_association_heatmap.png b/examples/recomm_system/plots/feature_class_association_heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..6809f471e771f1b49f8457de1b97aef4b7403fdf GIT binary patch literal 146059 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%0DmYHkx!lJ@NIR?9slYpwy0 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

iN}0<%9*G7~<}sOP z_itS~=X1{aKA-RF_t*2BKhAL!_j|ameeJ#WT5EsvEe86Ju~%QmV|iFh_Bmal=X@-@ z+2i@XcYv+?J3>#c3&!#jE^-&};}ls$&Um3v@OL{s&v!4e`Axuow6hR-&vM8vfE&Ir z&b}#}IEQbXW9r6{lkUlJ{3R@U-8-HP!rA*_kx-}sP5^bKGhL83xL zAViiN$T4~bLh-chTEw_J^;A?v#y(+?%BC;5h~G*qCdc2RysZl2+ih zmP|J>c^Ae5#ML?I3#(J45YX3%bKHE3;Y6yNWs`75DInKQ0d*1S$r4L!mE7dH!*R|t zXmo)cJELv+q6X(w+BQ8vUqqFf#!i1E^DT}&_>I9D=(_f{-ZmU4XljFxZzSDN)OEKU zj*3i*jHK(%r~v(CADvQ7@HJ*Qbi|~-Bj~OzuQND(keL>4F;x%4)NcMm@Aodh>NNfLlNkUMO_Nk3q3sgf?7On^4w{rx@c@u=+Z># zNBMF~kQoru%OmhM1#^Z$=_YdlAfEaM^dN7d;>J)czq@AzTgScQO`&vr-+V*seisM~ zP@16_Os^Tuu}AL{qj%ik9>0uGfPqM77VBXAAM#MXsc&cfoa8glk*WvA3cBsSuRAM{ z)xfiiD0kyGs))7y$+>rwgmp_{?#dQl!0>47>ZPtp;q$vd0l-i6dJuBmo!Wo;lz*Z^ z;$T2!vCLdfXN=j)+ekKvpA&#m@I=K+#kG{x5v_6M=nArwuU3k`itKSmPo%$s6B*!6 z9E#3P)7TVG)(G+^zxD^6TM4e(?e<9`19EU#5i2D6cXWF692XDq>e|i~|F|S;kh`6Z zSzi!JH%7o5?-5=JuuaYiSY&H`va_-h9P!h~*vq5C$&E&!kiGyK3CPk{Ur=kI zi502>NJ2}~S$*$G<}a!C8^%^M5Y-ZC5w`o`ib=&RWS}5@>@1rc!HHi09wC4rZL!@w z%jg*c+#|GcUJbb|@eEOkC# zOb-MCw|LQlq3}d6p}v$CR62s3A>P1ynIEVPv%S4NIESsb$1r+Ho5z%UQ7|$;*43U|v3&xm%_E3);!w;QhucXUpgt zOg}Dd&OtJ1GAQ?WQg~GGgIh9s3CF*d)`_1vmTY(^PRNDcV%6er@68$jUHa4UJq}rc zJp3K{5tqR%01wX7zXHqcNfrO}zVBc*ao6nB%eb@ZMsVnSqm|sRvT%OMeTQzj!lZ>% zGlW+}Jf%c77cnZ;z-Cc|tRzvDQ#-M4}rzayN zFZckN<3p7UK$xJl#JIR_sX}3xz&$=)FZ63r7212Zl zkKcq>4B`Nx=U|(XDu`q^=H}a=ClL)j9J&P8Z8$)>62fQ+k&JuyZe44pt+ti4HWf+b z9504Ew`+_FToW%V=dtRa{IDeFC2%_t2EpXEm@}`EYw{*%0o?YVal$06pa-AYT^MMG zYiK)l8BDJ*b1M3XhPcRrO~E!?Hq%tcD%{#-1J~dFoShfn#>u?C#-hqtfJpSoUhDiT z@5b+=PDm1hL*~mlr$$>q9D*yDjIYN-#|@D;Icd;mP7hgeVm)4i5~_`e{=fL?{*u_4 z3QI|h*IInCG@3_zPC5G*HHjWC=xQaND~$tdH~s~&OcHF~hQA>}x0SqoZ~ zD3Ema6)QHX3>iJ0Pii4H0-F=K=QMEKkt`kUZg*uqF0De#Gat~#W8>mls_3UCGmO*Z z2HS(PubsfKBWnfs zXNw*jA>}BTlZ5I9l9Yl*SAJ#Z29qyBlKY#%NCJ7>)bo!b3RuM<_4CA66?q%l^Ywak z;NK9lNXwf?oWu73VI_X`P+6g^-`FD%gGvMp%`!(OldkV6esVsO(y_@5{tcZ?oOvQ)+{=5KS%T-tR^#NO?*ZDpzBcq=bDJ-aCmdS3KIzeW=Ep=pgGAc# z9qod^hwi05vmony$74F-8<|AGa?bqJR002pk`pGbaTXkSiOc23(qfGsV$6yHI7`0} zuUm1%g9Il0dMekhX9cjVjuzvYeLzBh?sbe>u>#)Ol`?_ za3@V!lx1kF9oKd-YjEjxkRRC(%uT}DIPxy6Zdu7M@qHglJlnQxp~s$chwnb#?^czm zuTS;&;sje2JK;P21E~adf6+bz@ny5Lk9m?>H%=suQvamXApz-=sR1397^TBTJMFAm z<{-Slz%8a9?ftk6Omlgh_Y1boo;6)fRMLZNc84Us5YXz$_nxwFY?`KGlj^bSCz7!b zFhVACHgL4N-7Xe)cnsy1dOZO0{2>svr!oRR`n=J7D$0C*>Ah5 z-cTOAft4g?c207B{O7l2Snjj1yzh4!4ae1j4NOG#gf<2SyC)uA-@Y1@qelSm0h5Wt zyy>74xt$@OF)6#j<;CSLTn7n_=fB?JQ_6Ty4ndte;LTXnP-tNQ=c;%)&ykL2jN)rx z;KFdRHMRi$gitzR*-+it1u%s8&Gg&ftlN{K`$F*oiz#E(s6xhin&V8NsO%q0bJp6s z=bC%tv8_$G1`_NZ5WyHRxJsu>VU`uS88_q6j*of3P(ed|u=;p5Jb{R83sAGwtP~gs zbv&k)GZMZJ;pWVVpz|Jngd~Xs>=lyWQ>88|A?ouX)Tc|SHx$s?`P9MpRLQffcTQo1 z`3@9ikb9632bqJ&j&Gv6Bn{Td&M0dVKjFurcP>>_yUWnlPfkQUvgTOP+vFN5N%D}Q zk=lp=q{ki|32H?+Ua=b|#&X_$B#*$wpsBOjpQ7FIftqL2;ZrShL*S5%&WJq{DrF3c zBR=e8;0GAXXpug7_#);b3_rHPLdv*gfw#xI0X%BdV8n$L6Up=2Yo)iLYj^KdOC%kQ z&a*TAd`dTC(S#&u*ipwzBIv!-@;zSVQA}i48z&ur4!R<|&G>Ba*IaU!(J0st2s0(If?j3_>zz3uXoWb7#4=bW(BAO16 znsm;O456z-Xx}@pC#*G4zmRt=SX1Q6k1_CVvAfuC#F*ZUA%^)lG%H7d3G;xvg)_-= z$1eG3ybHM05w)bpBcDd?L5hITeX!x(*$O4|woR&F9-efI%6^4oqnwvDXYh1Hrf}q* z6VfS1)uc<6vaCN;SJ(%rj&v>wApNo@ZtgYAP&=z0^l+v2WhX9(kckK$y)EIIy+gkG zr$@z6g~OoIz<`4=e@iIUFuZxN9$XA*Jt7>l5S@2XKQll_n-64LS6Oh@b!x<;4NKfOygkE&a%J zkPTG|oCzj>pR-WzdE`X>NoIQ~kc<)q^zNiii!7ME6Tu58E(Zjhv81X(p0pm50kxts z{mAJL$W4edh@(0}3M)n`owu8TP=i+Sm;jwbjY`~{dDI%T(ZTTko+~~AM!*<60OT8@93#Ho(5yZl;X&ulWJ1ew$UyJi z?OZRoe3x&uAnK6W$+p|wpVPNi>}`RCpoFJzY&lgHXDLWcs%PBw(c=P4W_Z(SNXGlt zEu%)FL4&+<&p=ySyiPaw5oN78=r{?%0%oLw7Odr#Gx729VxfVbdEnw~i=Gh+m=sE? zsy@|rr!Yap6(l`4Y+gKaSAcYca8(sPW0*$lk#GkdnQZu@>W~(|ES6XP5N9z=tS;zW zOL4W_NoJZsOI+A4onPNY#V%7qPzFBhK@<|DVbQ->gKSxayY|osUu1@`>rbL<_3)Ri z5VPQ~x}g?XD{j8QV!65Ilxy!Cgfz0)xvIHTm;ouHGCG2Nhx+}dv*xA<|D%fx-qtA<8S~!{%9=Xku@!cdJ;!=5fYh8eGNPB zPD_YQ!Cak~x}seaJ29If+llCz;S%rQqCNiIn3(fGbBCJMEb{WA$&6gRH+IQ724~Hj zXl=$PIYuBh(vgfsof6cNcQW*ukVanapfpc4Oje9sY4f$r>>%cG&>&{Z^+#Ytpnw}7 z-eT|#!N`YLWQrK(P<2bQyjTvRAspF@VlOzwO|<}Y3BVeCUN4EWfMg)23>Q7tFa=Wc z1LK)98Y58ea7MLQ?zqVnM0^`9KJfRFW?3MpbQo)v>Ew64{r@l!RqWeRN{B7CB>%j;t4tQ z^MRur8H}CCRAAxCke>Kt(XmEi$_p-%>z%_(-qC*Z%|;?#2tgYVOiOm{lUcj6rej1g z>BOofSAQTKfy&I%gWW`Zrii;2GP`hPS}G_RU=rO^uI75%Es0Q|N{up^?NM98ABtUJ zE}%u*bAVI3*n_{=Rpba4lFU8YcC~{O178^+J%InLnO;R7ct04>x7c?!WDk9)YJ!gG zIncY76+QbGy^96aris9^qQ-f=FTvBVA%~@l9sVu|sRjrqWPTd)_X93tVv+`gp7@ur zu9x*g`!7OZe^F2BqZII%Ip>H3Yc-s{2vgnGEw-f2r3d?QyG}}}Wd&*euRfg%h6X6u z7c*MF@yrSFrfYo&Si2D%ZOg!mAlH~heZ`Yavpa$L@1+?RwBlHoL*@S-43qG!-N;)$ zx}dSSr!!pCFrQ|N5)aFv!5bm6v8vmuj;#mD+2{`kqb5q8w-WG1DND4nLYGOU1?@vnmK3jz+p`-R4Ff!&_HqHe6sPqactC!7miO z9;4!>6gH%MIHV4}q29d%(yk*Q`Hv5~3_ip%g(rHrjC8VaSJ;$>`DD!)G)k!CRHwW& zhzUC7GmF+_9GHr54v%WEAI%ouXbdiD#C@qJGv27lMBNXg%*}{iccpC6F^Qu}ii*1R z%4QZN@0|qNDE=_bTe5J8$yK#7sw-rFy_9W78$MtW{04LO8*E2CWKw@D6$=@IBSyMMV%Y#jvF zKfE|gJM~5A=7B|E?J|KarwGU!md1;}YqQp&t3p0D#}aI3312Hju=H(flyJT_6Ad$I&cPT8Wvbcn{3x63tow2>xQcE& z?5CA{jGJTHPq@=tKE0juj@vOVyWl2BM^fugOjieg>?2txBOl38!X=T~Z{+u9NIUA-~d_d7tC{^n-VIMUhbvCx?=iD+|BfjAQtQXs}} zK*Y9$aGRlT8A5mg7yrqaSZbIeV*%(pc4xdo&WpBdsP(Bp+<2@{UkU;)HbqhnrM_`a zG!7W&_N~v_1j9~f$rzU}KiB788FD5uabLOSlrb8Q@BMaUbaJIiZ@S+Cu(U#}v2HX2 z3%rw;l30CXm39ne$i=I?s(0|oC(6JJ(EY}TFa=AL1cdYWWi*_Sly&1t5l@31LP z>Q@1Qcq~0*Y4!*JOr;31wi6uoPJ>V#fsB}2Bn@?_t)nI;%2fUw$M}bu+d|DWN>jgn z(6RFD&fgc5>}3zpZTJbch&G&+fC2F4?FUI<(b25q&L{3-#h#l-K7 z^E&VsSd>-95|yKC{3#kq1+ls)Y_{BvmQ*efkRVa#zssaaZ2 z_pw&OiPc1Yea3Qto<9Z$Z~yvrX$_x6HOp;Tb6KmQ%vuvEt4}mLc03W}{_$SmtIpHY zw?O@fLvBk>N#HP~d>PNVrjA1W%c3T|oO$mwiWMA1uj%=4IOPp5)v6)w(}iLsgZ;44*YS zABQGdgZ5xK7qYUwuMN12V7VP!W3N-}aa5C16-dm1R5>uJO4i@W>}pxjM1%C?uoXVCg8-z%r&Lq`j>HhlwznZD|BX|eKS0VlUlI% zOEj4&`rF-^z)*eWBF@ux@Z=}1+JbWu7fSG5z@2f8lg8dcS7y6bP4TcEl+9gB$4qSO zag=})Q3N!Jpd>V3mRakiqsf2tiKLhGQ(D(ZjvI-y0DAGDI8dw9Gey-rwvzsGSX)={ zWZGi1om0FwSCyr3-9@fY=ra(Zwv+0a-MBAO*E@p-&**JQv}owODNT1kGlNr=pRtbEJq7*YAyeprYcA|s;-n*UDQ#pb*l||n_@`d6!rJUoGysi!VpFyi$a;ww zdc&Nka{ykj=bkyHcdsZkCtySI2lq?*SEcy?#819irt{APhHd+pcoup-cGzo3z<@w{CG%Tkp6xM>P6gjmUE&nHV= z1^b41O=2k1g%RWdpVAL8-oTLEyFuQ~40`5YcuY2ky`ONcE)lo1M0#>kmU1=IpqI0L zGX!A(JS;U8T+1in@VpdGgmr%Iw6glF#Z>3j$Ul-i5*%40b0G=sq>m4RrM^uI zH6{9Rz<~iVHg1vpcP@tC{Nhh8^N#S#{dJ*477W?x!wSY8E(oJl{9w8@jFFwyKy1O5Syv zZ|9|Gb)4Tg{|$WpaQ2(q$)tJa&O>X0R~Ea!G|b#KfW5C82D*bclv!K z@hCMQqs_?yi1Mh)Jp{!OM3kP&DrXs53*V6NkJ7$sjpv1)@hFmI^TVfs4HF&7;1^_D zaE>%AUJh96s`Jh2t*@L+YV8mA%n^qT;zZK3B!sE&$pG~n*%kOp7CrPi?_bNV-4*AfUJK zSErz$yaY>=%ob2aF{~5znjfv$&NGkmRM# zmoi%lZrD#zaJbBk3dRejOfcAjC!7&F50-q@K(|Q|3RTq1$5FZ1FQbkyn9pTqWUTEQ zQvy?zeTE{ybPbSa$oAt*sE$G&>atVKkUk;AfIEyMc}qh3^YelRXhYAVR?$N$^ z(5$B-05d5e&W368tsN zyhl!PE^3i(_AkhXCDAiHnyiKDX>+*#-ROa&w6@k(;oqa9!%t39FscZAO6ETu-+&)g zWbdlXqFtTW{oX>lJMUao;%hYLw zGz*kJtncYFxNNW!zJe%bv3?4XwqAsL@ulpK?7H%Yc+eFxfqs=HV>l()@_dTUv@b zI;DqvVaEo62M4u<^fK||YDEvHRT z+z*p_9lRJajU-w5KIa>%O@$Ogr;og6#@#onLL>DHk2K3eLS(Q`%)pyEey6$PLM-~mdjE$K@|W|!vN zW;@cULB!L9lQ{K~C5LKjN!14Q;00@)N2}LWJ+)KI(1-Ys3~KuWX55nY!~h1*p*G^` zJ1w|FZGitFj&d(hb^)Y>?W~d4`Dz^?5)OnM)%my}26q&clpG8iR=GIUxe-t!X`%z# z`q9}*Ml!0{x@MLB9AXIXnyTrsjpda7d4p5Ckv0TRAFoPhiTvA_v9eIpU4k99O1b?T z`nu3oRs5z;zO{?S6So<3+^v~uv717j=nf+!Y;Ru_RiFKYA}!oep zoAcYD5y}hK4B!lHFbNRk|JGPXbuH%(UYO1mzeW}fO({Lv!%AaI`98tEyV&uNCW);UsV`ekXkRO=BhD;-#BiF{CHb0xb77sb)be2|HqcsE))8hlaFar6G z)R4v%>`}4h#>q_2!5knyPh^3E1AnqT0m81#xzX3CGH2m9N_-N?@Fnyt(@VA0$~i_b zcH{2&AX)}z1EnI$s65jxwGIgzG-b>mKlprXDsmXU6l5UaLr_E?Rrar?!v}aFJ^;}+gw34%Vi*wtbhii?e#TQzV{?|xVT9`f7pWg;8<_P_2}cP4A9}!{ z8T6s2a<`C71uM7z^K!5N@ubBi~j^m9S|kMsGu6*luO>kai172QcxGXJRJCNgc(tPiDnlInlt^ z<2`Y{7da`i7pyu5r|6 zMpNi$AUlKf;)8>%^N(?ZnaK*)sl;7Q=_bs?d`h_*^DhJEbTpT6DmOj5xympiAyK$~ zjoK@@^bym8)Tn7E{F`q0c7c#a?(U$Y<$I6(9OvHn#N1vuy zE=ToWU!p}NTCKysIjp9mLZD^UdsVbC9n)*jP9lz-fV__nXSH9~R!#1{~y^oAtB!2x6EyBM8FV_P=zy<_y5FM3J_!>bjfsC*x)q#vw2D;goerNqZ z%24+^tKK^w_GdRn1tFMCt=eI5vHjxj!qMquJ13oAoKyJ83zlM!%L)NF5rh%|ixdQtS9was-9&AKDi#}U3JhwbzVHg=Po-_Hy)_6vu ztbDQ}dALfNel+lShwtRP5EM$P$I_sR@F(R@p$ti1wdOpmWQI?_HetGl%TGb(bFE;$#)pB|mJuT2U zP6bD$$u?Z^Giza>rw4x=2Ma}KSi^H7&!N4-ziEK_r2`nekZ;Ww8nK1y=}hTvF@94- zb5L1ObOUc;k*DrYmL8g#nRy3M2)aa_!&y$BJGl2W=t3iK{&u~8(!wIhf(*F?VmW{_ z?#Pn1NTq9(bk({@m$Y)8qYvIU%yItiAi; zI`r>|C$%_+t|N~jqAZLqc^DtCT#=DD#L~b?CD`sX(y#@g$5ij&;Br)v_XGm4qy?@~ z)q;hjY+m7^A)x09%AThqZ2(<9lVsJ>KZ^h?QGhJhDM{9?D~0xuce-l|Ijae`lI^xQ zj-7go6&YbR#&5kZuXA2%YhrWWGl$u-oh?nKCoU@|mviW=a_BFk*y>M!FCote##Wy4 zObdAwE}DIm?-g$uP+4b{#5N84cc{HZDOO`Kv3_#+=MCxFkbC;)H`!Knu}9^W?f}VK3;hN=V@301gz!`eKRz>c7|%(dY*@ZU)p1u=v1cO zQ-`rqB%AGfostHwXx1k7lhYBH} z8^`$090{xIK%vzC8V6SIzG_`@ZFN(xp^AF!9;#XoWkXl9`!oIACX*wi7D{TSke{Ad zUz#=H8efHl^arpo@C+e_?W~MnHgxR?ILnaG>Q>2Ve_$=!Ng^T+xsC%r$0-BDAUlL9 z2MFiW)P>#=7it6GDbH8{@r&L4noqZGS9A@dJV7QwR8|+Ev;p zKHq+qns5n%SFr5Ro`Sw5(?$37B|ad3bZDQX&RARWwbZa^f5k%-Em_(r&S4V(tq#vM-I zN1cUUIb{Ws@br&p$0}V+L)U#mv3I-qX$Y^-n`;G$Ua#vjBv;^KgS~82|GuQdcIs}3 zP&4PBNr7b4iZ47)J#*Bok%ZgiUEIRhg0-l|Pt5cKM-wbR)G{gcYLWWW*}=q@ILr+& zEk}BS*J)t5gV!Bc1c&t4Jb5))RQc*02A&J^a}x&W1KnVALm|-yBegvgslR(R#3|kN zu*pySnYXvMu*%f-|8gJn(&fn1cJQ6bFpoQXoZb~Ib_Ebl0A<5x_g=#Uc>V{F4X9Xn zy>{9q_qIJsZE0$Ri$cpet;xt~s%`uEwb&2TAhv_5&hX_#XQCLH7z?k-t|j5GpA9x; znbg1NEDTv#P`#85pqu_@L2cf;u%J}1pd!eE!ppyd4liClcI+ih!~ zxC^CHZPyxnnG8N9dr?pv&tHtfocDJ}%Ufee~H-{v_6Lll^#{)|3?eo+X z07MQ05NQ+Eq22P6jHD}ozb?9k(xL+`T{MG~fTmIzdVnf{94=I8X_hSQZ{`1I-04ya zK*-`KqBFr+h%Nj#XF8wSNEi z*81ztw<^-e|MdNSDfcQmr9!aMKLGpD)LPI=ji5wx!!OiIUInF$2l6OHGe&#|{jZgf z<81E#_Vxt)93Fmgz|!6_J4m6f3{g$E1TsMGQ2QapKOY%*g9o4^Vkh{!EM`}&1nG5W z^gahIA_BWcJ;nCFJj4}EH1B>mZSfAR1%H+UNb@Fy=j1svv~Gxfp$B@CjPP}2BT~KG zJln2-+7~7Vji3r`8i_GkWkb#cTlGycGWzHln^EC(e3@^<26;HCg-(^{vR*^HJ@8Xx z8(wPmuNkCe3-7LM=_NX5uMw^n;HAcapjQYq&;y#3rO>jk0gGTe!1HCG^sSzsY+FuB z>D>;)5AW=?znGb^Ok9unePbMJXcm8Tw0G0OW?NVfe=dvNJOR=_=s8)t#M;nRQv^QY ziRL%J_xlc0@cCkdI$-71{!e7ca&p4i6`OQaZFd)ML~H33BJrOW`1?O5yI#}Yd^g1m z`fTp=OFtBU0PHOUUhIKFY#F+z?3kz`0J>w}aar5l7#&a6?!T{uwS;HkP9uT>1Nms! zAkOnZV-YXceD&t8OM;&N?dmmkeqX(3l2&W!t^fUR{Ev%WxO6cS{)r{OpYgx$1aH`a zT*$xgZ{hy}BFM-6w?7esS?ced_Ma#F`|p|E9*~`~UJMC6)h=ZzOj+x=>r$6gSV6RbjTB2mEA~f>jnWqxFwxV6wTv z#(?Ipr?`m&NQ{kvn?mvJ^+I^tARuc%J{CA({Ldd*_4ln$SvrjOM>K`y|9!*JLaXk( z`ThSsflW7{G-Wg?_G1S@XbJKJEc7$ryvO{?qs|?M*II1aTeW;oN*4lW{VIK|CQxz8g*q zOz|VF`=x-(IDq8w^X#!ZH2C80g%-T>hd}9H&na4+*b5Njs~-qYBux7I`;*_W@7gbU zcq85*c9A3+5!GNuKq|&^&QRd9PyiYa`QS^Pm0ZM^yAXlg6H;hKRNnpe5OTtC`WfUr zPzW4ch zHw?klVFl(V2tf?G6n5{0uzK)7#bJc-r-=5mCl1JEgx<23C^;<0EMRvn2+p71902g@ z{sF(+w>iK(*-ofs$UE7A(r+S%o!s1LFgffvIJVZOo;m@xz-pND?ZULFGvweyf<=Ps z50G+JtYY#MhTWJE`gN9FyiymVL4nwWtd$X+pjGHEk?Ar^!P{Zum37)CsQX-gn?Y{& z=dbVoUh+1DoBk7540eKQeLZilUH2WfHEXsYxjsZb5RH6(*!!IvkV3Dv5au9!=r|$` zoPR5fu?Rcc-XZnQtRDFOeFJehC8KA^Ktx86aaZGwctEI8$1E?1sNc$X2WcnmO1 zV(-U}*H!GtwF$}JX}I>}JV$k$X@bPlgUoUVbioGGosE9nQkrC1&W!AyJ$hIRK(NyE zLVOkD*f5zrlljQs%Xox8|DSgQLz(MTxT9`^q56^CPLt0KFI?D3T+Id@%zIzp++zaP z9n{fP7JP8q(FYzhu3Q4``^BzsVto8@Vzh;;^MDI&ugv}NcW45hoEFFGLKUgNcI>G5 zKRz|{U!O|D>~eUM46+3>(Ih7?{y-QyQa|wXmSd;!-RGcW8$r5Ph)#nCi6d}9((8)7 za=aZ@)e2-#O!XjPH9pM(1vaR90!t5MxD&Wt}RfNOtVQ*;g6KSKW~8Q6wPKCtTYelI>K7(UMDp>I}*JNtAFd(bT@Dap{pWD|B} z_VqDUfc^1zLPAW7cS!M~Kqx3zwRhb&z@WgU-b>PUf=sPJk7onsBIxSEwLzYd9X47X zh$>6bcFKX(L_vy#>)$a{R_q#+=wD~u!R6vU6A3Fxe&EEf9PYDfh!qrH1J)!7YhJC_;lsob6&puS%g{ZVVK(S}SF>-A0 zOElT=3k!i@c;aMQ1_cNCUu>Hi$K(f8|mYRzE9h~xdSs@pBo*W0S^64C^C zxtKscf7^f>77-C)clB!L!j)E=rq#3yu2dr-K*;Fx5C{3K@JBw??9=gg+&=O zNj50{<-Tm9p~-h>UCc~FGwTi}nyJ0L6uiM|01#=zni8LZ8yp=UH-nlOdf)1%rqdrz zBMJi#4TG-zAq-qp>b`u5M4J`0+(R9B8s)$y0nZwQQ!|9pJGcWVuFp~^c^3L0u;QEz z#?b&zpmvZ6EUc|-AflJW5uy93dtiVdmXKjpFte~Ez%&DluBy+UPhP)%eHaM}0_65( z%a&=_BBx6JXqkn^Bk03*-a0ZeG7c!ipa+P;s#F|jq@lTVCL?<8=Yhj`Y4~SeVyof8 z7c@*;@_&D^O5K%q;j3-oG;|AJ91#XSLjH+0T!hDgf8+}mb1r=0>b6vP;R~82D-C~t e@qghL^>ftsPB&^x9%dpRp`xt0|EZ#(+y4i(?B65+ literal 0 HcmV?d00001 diff --git a/examples/recomm_system/plots/feature_space_tsne.png b/examples/recomm_system/plots/feature_space_tsne.png new file mode 100644 index 0000000000000000000000000000000000000000..8b9786093ce873f3a6499d7939936548bba71975 GIT binary patch literal 138376 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%0AxItKWbc-ynGtwa z(i5M7Uhv3RUtao28y*LAfICkc}At^yJiCGL-k=hNM5@wUN9S`GyFH z>=|xcI9{J0DIKt$TV-45NwV(V-cSVF>H z7P%y;pr8Qh^>AEl>>Y?;GwqKn6gbP-$YGZ+E-tpII88c{s&ilp3MjpRAKbA1c@ZhG zXV=k&r=?_*>>(zKy4NV&Vt1XBgTnyw7DR1v%@4JI$I7`qJlJIjDN55tycC&giH_#% z)?{~C$WyV0DPTd$+{bIm*pNzj!QR0E1CPMHY&9s;03?j>T{(wj{kHY@5)Hs$x#cye zecM^X7!Q>?iTOj!ZtSg(Wk9Fc_#
VcK9LT*m<%tDk@6zRqK--NP8m^qnzo*R-?8`>EM+q7YI11q<)yp2F$s-obtiT zkxRAE)^Jy>t*;LxT70jw(Dk7g;*Sle;5g! zT}X99{i%77qm3|aI49Jv6Y)-eMGPCmt0ts`22&ZzbY`9U`-g%H& z8lW9H;0VW%=3B@`fb#>p57NZH0Ui}JYaP#diiCxQA*=_eBssO%=xE%%qU^XaT%SJ~tT6>5 zTfe}$4Ab45UtDZ{L@W>pb-2<|LMzAWtuS_DX@Ald&OcTg+m>m3K{>TEx1az6sy;d~ zbMVnZO1b+(JIxM9A0z{wuoMu+xlRW_Tod3x0c}PHzFm6-jhGzjI<9{6wfC4m_Rnwz zT#=_OzD}kfWN1eZ8*zO{STCrr0W(L?%^5*ssq5&3cIpJXA#67i^B)FpuLcK*v;Z~9 zpi?I*xcXV!<-P-)9XN+J01`zb`m{SE_(DC=et(?)0qKQ|4>>!^@nAGD-+Y+sW8P7Q zIh5}W_5x)D5r0RjZ*>Djwrk!puD4z0vqYokw0p?%N=iyp_7D&fA*%F(_ss!S9V5gX z0kFjm>h>I*oRg3)EM2{Od{e@x>29W{I!i=66Q2MWqu7C3!xsdpLXZp+4fD_NeOyb> zgrV{xLqVE{20_p$;rj+)?rySjDx79Jo5uUK6VQg)0>j1nWMuw?5iIKQCq|W2w1Qy% z#CbZ2Rlhy9q#qbzr=G3KE+knQG3k``%=azTZNo|M4Gxo!S6P2niA|D156T z!PeGH3D9qCL7zHaJ$(w;KaBSZ21dejWkK*)#vJ3{E!TZbs686>i@0UU!O z*iz{lxGI|tInhbP>x^xJZKXqE2j=4GZ<1eFW6H&k?UhGZrxn8)Xrc(?F5hXAFh@a+ zBY+x-2AwyMfh@h|IZdmHLI=s^^?&wNSQq#K2&xd+OK<@!v6a68q^S+adM2X4kT!u| z>eey*6A?*4MD!ANOemLydh{l#GQK6yrX zA%;kly=wsP)flrogfbT!#F77sH{kfeadTZtZzL~3U2?+@i2+{^j7hKc*~s~BOnMr-Xf(28x@qOLM51s43vV8e~ZIeO%i+j^8Y&HQZ^BO0LL(`V8}T&`_G|Gx|hmv z6X}meMCjA%|7_*238khdMv>~74{Q~h+Jk9Pp?dh=4SK~tf0u_*A~=IukENOffq&OJ zYh_d|GMXNQx&bs{a#B&Tw8u3>4;G%*<>- zaC6{Wmi#LO%sep)nEYph)~*;NNg6s>bikzLG^>yGK=BbKQ?mij^g!*;y+f!?cm{@P zm27t-t{RDOwJnbC=|^fRgr*~X_M~kW9~Y zuYb51c)%s{OGo5B9KhVpRmQ)tv}}GSxE|xWpk`r!fx|J)q)|}`Phc3vYi-}H_vT-x>G^y{z>1Lhqm85 zM`{-AbE_+YQYbKotO*^i3H3q@Mp{q~0qrj_y2wCCdt4zSaE&+olMJz)J)=Xz62ZO= zjF=LcVFC-t1X#2?!~WwaPFAW^AYox9>VQEkd!tKZYeonB2|HxW$ZYO4ObaTn;rO$@ zdYw6=bDHJt8zv^E>!1LAsTS-wubBTm1@KsQ$H9iI%dE29i9ATHPK)^iE1TJ_k)Yza znc1986AyIJ(d5fS@$*2(oI7-a7yYFq-vH9E1t}6Zj#4YyryM^!+!nSP^1)$Qm41s= zVh({6Yu9kGlj|n`^w&45Q0>b2%?VPwCixJ-xu^UAF_h8p2G=ofx>Z=@^xvGosX35u zfK*1u2K%2ZCd8~6WO^OF7g*95Z@{?a_km}`_KQwz%N&2%KYVAQU9%0{Y%=_}FmY@o zh530FtO(0dF%al0FTF7rV1!4zm_O7p%Tn_G+_J{|)M5{HR*-e9zBLN@)$hbZ1Ve;s z2|ILoBkaXa=3}Zh0t~qZl_E*GKY{@)v~P*@gS`1+O4qS#7hbq{A;TctB3}&>i5x^8 zQDqMva0sOL2(e)Yz{tWvHy9?m(-u+|2&wxGhXLzM`=aBg+3}@w^L%B{C{QZu*<1Jn zsF8@ze*#}<`=R^6oDQ8>&4=p&P$J0a=0pNr|G1;*AEL%EghqgH%8>%XRJxTLRF=pf zz%7VFqXnS!Q;@wLyITTsc8B`cT;BuFYUg5)4d z&d{x33zCW?S+Zo2B(YRPate@$Qg-~ao+Bl!OB9s0j_ z2)2&@4GsMN_f?Yg1YBES-7(iJ&}f`%+IXP-J+fGv-gJIJx>y5~rtrYVP0E{}&oJgz zBW+hph-Ccx^m=G~hM0f*4K^ILbSG_krv$qv6C7_MHmv1K*v8kC+0r2SK|`6wc2-H3 zeVlRC$nbW%=W8q4m>}7MSi5fcY3$EEPf<{KinDf_F~ss-4mOeq--umcf7g|ot1PXQ z7E+?`M#+*CY39rtYO7io(cK+-NK8ATzdK0Q`*`!mu!k%fvarW3MUEYZrp2?fFTi~* z5vW&0b=LD&C}vGKkau0=wi}FB$OF$FiEoAV+pG-iOs)ju0}nMf-gnClDH%x!eSVTO zv9UX})jSb$^vJ}NU^z2m|EeW%?$y(BQz8!MPtWzvZ3evlfYFuQ5KJ48~uTmjiM_U zx!napUia#Gm&V-BTO8J;qgTgA>Ny(^lQ(Otj8E&>cN-$2Oo^R_*L`;jyN>FhV-Uw( z_;UAg${C%ae8$d3jWJP7v_j6dIi#@GL>v(eEd94oqj%|w=*d0+ku>Km*J}3U-r`L48GJxO(?WO46el_HDC+)h`1xC>7~mI{(; zmVPKpa8*Sam-|DlBc+p%(~66p_wN;rqIWmx>NlwrC4N0qyzn>UMDNw;kTdulzvQN8 z)l`BLf>_6Z_tDb*Nrz!&pEC$z~lD}XZrC)+j{y#W6hZJV%-H&%Qg=RE%fCW zRcqU0aC0rY{;xHR=UsP{;u_tG27?3_i#6kB8H*a~TB6;&VE^9M`q%4;!7?S(oo?EutNDzJ! zd@O2Ry|%$sy@51}_X{*+i#441>i}9m5>iKK;3h6f`C5wFHG_c$b>I=xl>d!Y6-%T5gQ=QfA>zm}o<}WjnK1mF@Ir-9)|0wBzM@IR!;i8&joynuCev)I``Ynu_`hW%_j>7*UAqnE zonD$v^6;b}Ge+P-5pkqYsNHyMjZAtA1t#F_vR|& zo(pcQ2206Hmy*qAV*5KKZs+eV@I=dUa6QRU2ZWUnAl-JB0DlO1sl6b+c;~^1fv&il3 z?W)xUXw#5#ga102nUNvm;IJvZpMKH__!YgA8O0}EhYk`yft46HszDdYlVEz2X3duQ zvWE3sgs!wkFO8i5my>4mY^-a(d~fyDxwyY7y(jX*$=5GO9yU;`OrU;&^dh8d>{@QD zi3&U1ov^h_$}NpPSz-F}ID-J6%iLb}ae8jifPQlL?$+$&c#gv!x3Shb+VIaF^WsxU zcUp*(H(J$pXefDHZIpFOiU*QZ^`Jq-ArocsN*&ud!c!#PS2B{G=9JKIYP}&7?o>b_mTS-m8tHS`H1e;Fn?N?)Tme(Csq$6td#pPtbzB?uel%H8RvD{-EfFI$MD$ zMqcFz^6_+<54C~6qiXD=9W$LCf}LWZACFZ|5AC4#?KY@cdTrtSY+Mh@xs**xYC$QR zUvddw=#1iEOAFft*Uy>*h1Z5$wwFCNrp;M9lXI2ByB33UZ6pepugFEefk==|#AD8it&s~v(q?LT9~`~W_@%ITnlp^& zt?X!Q)A9bO2kj3RYTufU7VIPPL6J} z7LrXad2K-#@=cMYaox}Dm#Va5n(aCZn8#`P4ez-z+4!NCwBJQ<^v>m)$5lv>w!5Nt zmgURUR=YIE(`7hiwfo!fRpsCk0pILnmxu6f@1r8KyD~B|h>#zr(_}xp@@+Vg_kALp ze14Oxk`&AQc&u#*WN^89>}_=%jD5zfXMB_S1O<$Kf~1r-9KJIe%HM)CTwNQ_;$Hir zRv^C5$-$rag@u;S_I?~maN(nrT zF2Np?^*h>(-z!UEsuAmyp7B|iDIbi%Zy9Eb?nHG@zL#3rAiFPu;(MN-r}D1f1Bc}3XIA~Z z4m!4X2B6V3g5DaLKH;FJNeOZUjMW!Gx@Vk6OoSLhS;@K*2Y7YTDibwI$}+y~eJZnwlUQ zZs&(*ges?Zp8YWPcK)+OU#OM)3a`_uPU)mag>8=vAyg79EcSg4lAL0zedtUdp@}z- zw_l@`9h}s>kpOS;N=x)~L}zR4Puwc1`#4ttm8@-j7V;ZG^W~YEAg*Wjf5OGg-hyny zl19PP;V)VMn}~zty}>y!J%GvfLA*i@_?{urz0(@tj_`4Z#|equrO+K%nH2R3S*pCH zd14+>VqzYS8@j}CrGUwEHx@iOOmN)?pRuRA;B4&Ns+}yk# zrfw8CHsIN)eGr;XS&Sw-4sj8CxEY(jSzU;ecblAL;TRSDT-6+C23o7La4C)nPBG9N z`N)=2#)IUdft9c#CJelYBmo!a1xI`76!tga5iyq2X`DUVwrWz3@A93fdGGy=FI0Lu zEsQrWk3)&3p`O0kgEN%b^$J{m&Q;Y@oK;|qwg$&__L>v$cl9Xp9Ebke zw=W@svcba}j*AVZP9LBTv9~j*JLpj#PM&>^!J&G2pi+}Y*JY6d->8k>Qn|9X9^Vkd z&C6l#-&E+b7%?hg12$Zf)w6Lqj{$2JPbK)S`0DQd38QmNkl_=28{HwyC*U4Qg*_C~3urHX9BNR9;!^b*iM9&tM-%}u1Cp@Gji_+je8myJWmY`z6C)_!qXwHa!?H$Kqo zJ~$i6PtX*MDtDS?s$I<4ae7iQGGig3x0qQxP!b_#^<-hUyE&K%yzJ&MVK_&8vkV4n z;L1LhPgU9&jn#G)N3?eaO_XeFtyl53^F4he+|#qIC*9Us zjboeaF>b6~ANkuQ)a^G|4ew@L*9(=X~n2|Pc8@7ymhlcvH?2TQ^?fhtu zrsCrHp4nAo+nZ{M?*`ruIf8(AzAPpt)(sJf6=Ji8__1@G4M55T3)xJJ$yzxpRR9mX zPxW;%bVPeJM1@AgXu~m>g-sDr5$&-UoYqEx%}z)8zgTxcZj?46uw((MZ= z<~2%I!`20c-C-j&!Ex9X&01+=)e@v<;9iKbfJiTb9+*{Q!zb8#-U56R4%j_D-Z-Z# zI~VNlKPlV#AWn$e>bEl5_3zy@>wUCKBSd}?Y`tt4ZuFeIV*v1?;p4MW9>}Ta^rk~o z%-9GfzTh0Ud2_@fqLNO%MGxlMDcxTX5+wv7zrel_{r&qJcpN;V)dBKYEOr6x0?|*u z9CZRY-DcS9+(z-jAhwCh(xhQ6HD!Do+N;L`e?;X*Ra^pC_9)KW2Yl+C{7Eg{5nLDS z9>h8>SvhS6E!My4jeCP`8CXA*1_{JMp?K_3h9$zrT zNr@}t@j~r+JCTp`J|8~6MvDdG!O&kvCg9z!mmm|H%a;ADw6cw%pLOI14&M+&eqFg6 z!!H`*BqUJc481dR5Y);j0i}G%Zs^t3*cx!y#RAQ}{~6$FpxJbTux&l?yRmS?)0*wb z#n#zr%He(kH#oz^9UUTHQq_Oe9f-~o-}aCxUu?wg-UwbOm$<4$dTvp)ccR;}ah>Ob z>7%%3DAkYRUq}S5O9g8>llldHIEwrg+84eRy>0>qr(w=S=3a3~N}G>|X3xU~j4?FK zQHKqo*{HW`jL!CNm@$#RS9~=w^6y1@rD;BZL9G zk-UxDsI|5rK#-m|37chI5AwYy#Ve5)>{g5wSwmH)NCdaVBP?Ok-FkyXDdl~^X_i?s z7X;ym0SHe?)PPyDH;l7f zL9cZ&UTANV!7P95Js@kAZ-N{T*mg30uOOA?Q-&3hBI4mBStJD_o ztIdlu4Rh*wiqi|wWTYhJ^*JcGOsVg|opg}EbBp!& zciXNuu5@yFFoTX)Kaz_U3u@?W?d%NUr|z5GkTKvH8J2dh`2t5_|CP9sAx#$87!|N_ z`jj$m{?h3P8)K8BhwZ4;^RnOY*Lmd^a#BuBG{uxQG#h-IqfLYU=|Gi!6KVI{hel2j z!;GvVowYLUe&53!CNg2a-xzq-p0g5_k<)mK(bYrX53wuSS;u(Gc`ozTmwRj!f~5{w zuHoaNV2`cbG=3ks?67ZrlO(f-*R$+S$r;Iz;Kj&;`#u3CW*ao^0=ZtCKt1f`LQ_L@1|f+G>#x}W%#_;kv%sAt z=PAm$<>og~JTZ+W5)wQY&xLCTeU^GT@%*ZXaMjtBdS9-3sP!n{VYqzqx;WfJ^~Zkv zfFJ5UiM)>q)}2sH~K%ijWEK190c+%Ch~T&ZKdjRbmAu=2EA! zQnqrtb{1kUq;f;zsSbW<`ZSR_D9T>-Wko_>Q(nHVQ<~&hZ|OAm89#QOpq(cfR|ykX z0~e#Wy)4RC{e?zG8D$I9?iXueH01}W1LKGd#`}%F$RJVfTL2?oauZ6YBY$S$52pyi z+g{nG=H@Qbx7fNt$J-xi@!#EtOMbu7hPHV(Fise9O+nd#n*=J{$0ZTN7NCD%xMHdkunRaZJrnv01ZGDafJ& zA1RJ~K+(pjz}_J_RRhA@EW<-GCMH^E8J=uRSn^nBaZhK5KxY{9m-*{D(AIGfUEpL8 zfg^Ej?d@T(iq}&cFqXM(qpH1N?%&v#?f<~iyfM1TKOa6(D+_UU#TA!0{AAT#9@%Kn z?dagkq`mZ^)*6YeS}c4V{?_-b($DRit2JKg18E{^d=_8wrYw95er+4`tQ*A<)L`G*wM(Aq> zF=2#%M{*%&QQMKGw9~Ns<)leI#D zDlVHzKYZP@Nq7Fsz=%BCiJs=Q-uCdg;ib==s-<7qLH)7~Q)!S?nPeir8YrB8plsy7}(RyrilPE1ioD z`<4R17BL|>2@_84{0B{jD+aLb+=vIqJ2FhqRi`3Giu;!@q2OE;kiqRc?*U0kf}do%XLuyJo-O{jn`)4AUuxD-$?ZK?bT5e zBB1{3W`WKr31;n6a zH}Y5Fm||jL_8p;>CqxXu?CBOEPpZojdnW|VGaK|YijeMQFI)4eyUM72_JWSX=aV~Y zmLK{Boaz@!jpzSrEFKQJhxQ6uUZXMa2+r_sjQDcVAig4p1%|S1ueiU?KYYQq<(6;J z7o^3bIZm126Gkpr9D9%WB%EM5YbQHQwBm^a1e6Jekn*1M=g;SXxzPx&r*W6Kx;pgy zq!D=KVfI2D%3s4|n=NXBD3~djYAa7l?D|Y5*rQzCtI8J#bcV`*D+}9$h7xsqVQ_lY zSk2{thOOn%cDPCus|24h28E)>{yxU3CQ7n`%FC4(CnI0bXFT2~U*YDC8`C8_iaL-+ z!n=1`p67il@vRtiY9^ELcb;qXu5^rfOnkjO5O?7DVZ%kTxM-Cmcabh>G)b!#`5tCp zUOp+d)`HG1+8?|Krh!SE3}-DY?qFnUMqS`Gv0c3cHp)Q>5oT!BWpKwWO!*oCo7?9fv)z`-YIU98!ZTxCP!LR8Gg`wfa&M<1Z4 z{h2KA$^r|4Tq)hq!`nb~#TXnu+ARFXesdDqeR%xaa^NBlf6MjMdlrm2-Fm+{2zAtIL0 zkXZyHCeNO>SE=*GHd*o*Y?)hYHgXj8@ql@DmZus`IjoYr)a$Rsc2Igfg3klS_KEN& zCUW>CE7JKU1BJ|z6lj({ou=HT&XSs^B?r_kY9E3xRr12m=Q&tKDE&VXgr@n=orRsO zem^eto=#}t053^z>m-hR8=S%cs?iu%aRWhiGvv3c;~iSNs{{EpWW% zO6A=wd$!5{R*x$(#x>}oK5TrNK#XMP_(q0wLFCKHhMFW|9@4{L-Owlp;)dO-vaK60(B$Eb{LE#>VXkQsyo#YV+o8d_} zeU$TQQ8RAW;t76ZTYNP$_w#qxSwX>MVCF6FWruo*Zm1#SJhI(KKpB7o;i4feaRosj zG^vo}Y5=S0&=2mq!6!4Ct%y^rbG)q?iSzP>O{i;xoknYh7_v@9MVum3w3J%5d}^4U zxvw#4bTdsn9C{=o#OU8hoe*MT1kW`uEX@63PxYDuIAn^hFQcECKrCN@HA%+ez_jNFahsF8fG^GEs+4 z{DxvFi*9Mo?^P<=@PQQX&5(leqvO{!y0P`Qb#ZiI*P-&BNNGD$_Ri#jQr={$uBNxQ zo;$Ax{K5Sv;<^|B!G~&y076*V7fC7j-=!+nX8Lc~hPc2j9g^{1w6JRaeY8l%7{=?I zq>t1-;dsw~x8W);2&8-jL4&*ZG>z=?jp0h;Les$EICr{P5-m2W13M!*2I4hqJosjA_*`41-Cw@WEyZfP#LA12X=5i}D@`1VSmpQd4HZ@OJS?rj@}6msL~t zkuqMtD#agKwVLRY?X_uQ4tYDr;{E5thzi1PqY12B0lY~0dV4q&xX1!r$w>VU{_qC5 zWd}?FtAx@8IUMW<(`l+`ku#xb7RbDrUsyN+({^g0xxi}713S*PAKmoqL|Hi;nBLr8 z?SYLj&C29H>|mGb2Xt&r>7pWeJ{qcNOg6!cou3Ld26!eE)7y^}QVI42E{|5@%g}tC zZLj?=s>%!ck1S4f$n zR;#^(Bmp>Y!w`k&!pRo_+~Q9mVDZV!Xt8`#?q>=`nKe|$?VOII9t40t)Qh{MW-B~s z_E;mQX8SkgbE$n#-HWvH5CrK$bFo4OSS7kHY9HdTscu6jRu|^YLVghZr`Q20xMDWh z{`CDBi)zJpA;gQaJBaK=f!qsEKOKN!QIC*tmXTe;ibjoyY(feyO5}1(sP*9__cWVE zV5H+5CqKh9MhAm=KY<50QOD|-;>8V-59y)`J%P2K=FD z6u}}t0VZFC+TSv17`(6C{Y^8mtC46!MB*F!}I zgs=V!sIe2-zuc0F%$px5o#b+mYnUet1WFf2^AmKrkOW;eJ9RQejU7xeDS28=9n~;b za{)Ln1RmTboWVbeUhE}0g?FkMT#N4y=mf*zfZwccbHo_X1c@A_y2w3%{&ot{QdeT0z5Em9{xuM{0!yBa&k zLXP=6`PKJ&GUXLNcp_9~uSj_#GXXXp0=7e;`%Z?Nemzf0=OI8DlDrYnt5@o}JR`G{ z4*_Y^q(NN|^G-qiJd!t!(_o27|8Ru-Pl}hN_E>jzaAyi-PMGBV((f)|Frb4{6bIy0nQoii19L%cv$bC z*`7moQfNC=7)9Q{7jSs{_tpq-Y?xL_len!^f0oTcoR%z#g_T$6 zw8eQ9YsY}j4Hl;#wyosi+}1eop*YgR2wm9B-u-`9ywpI+Hf>C?qO40nG|=GcE$yM* zG4!f_Stdny-e5ffDm7B%)xL*@2Q;(ra!MdaCxj$;kmE(c63IZKm%l)%o}NCeC#p-+U!+xT$?(XCE*SDh5tKEQGG%S~v%{C-@G zlwiND(!gpg$Tqp$Xc8X~E^#owrVoZo2o1kDv+{Chu`xc?{R+}H^W(W?lbJnSZp_!R z6fY#m@EASMr7fL4zw&+Wq>+NQ6xbS=0O7q=juSk=7{i1jg8O0l)keW)0KZXCjA7`V zn>}*S>+a29b0$XNb$);R2XbjZF(BwzM3E#8oj@2Ip2NPdgA!ma3?$78henkjMbsj{ zYNB|pskg1H>CJ=P@kXK9L~^*dK8w_OI)pBRCz_ky{Pmm{*km;IEIB!u8FG$`JYec) z+MmY|;5v300;Za161cmEJ-k0U8fdT^tn4~Fn00Oh=5$o*zr$=v#Mu-MH+Jv2y@b+L z)bR8=*th6HCgP=b@&!X@5c_WKV9XH7D+Xj|JrZva_VR@Z!ut&{1n>}F$2K_(pYB+- z4-GORbazM2b%S1;2St8;ItrvGFaROxthi#Bx<3^N5qRGL7B+v~S(Jf6;rpYOAA{n! zKV$*IjK|lgrMS0%v?-D<(V}O)Ht?}RVS-=csR8+{hU6PyI zjE2+#8qW#Yfu+1u_hSuR=87g0wp|}>#vyb9*fjg2bp?GU8_hmW#b0|m2mkP*G%U37 zYAl=Z%!fkv-?_}Y-p6TiK%KCmzVP%;eWx@?xs* zxI29PGV7mf520o#F#84?Ai0Zm+(5yN*z4%n9Z8VE)|G=z6WAPe8z3|Q!=pK3E|yl# zFg3yu77L^t2l5mbfR6pdhAr9;oIM%`R@%>cJQOYSbpJ_va(CLXEGBx#!2#nZ z)fR~E)}K$}zHRT$G6r15xI6SyIjs%s;Fzq$CZ4Bpg|)SP58-l~mgxpU>wlc;1yEqa z-ANU`jw+hUlO645=qURKOeDgMfk>lM6}sfi1Hp5q+M1xtP^u_$s0MsL&FKFRT`tXN zwefE6MxE-Ba$a*P+A#fL=B7U_EbDJsxvnaf;y0(tX}fP+cgZSn*PuHx24%Maacd|p z2t$9HP^1_|EaA^Owem;an{EAzXM>4g@E{r(y^YdMta#vQI>UCUFAWV-T-Y~>7OAcoq^K_#n>cT)RS zz%Fzfu<=lV%zmMIF77t+N@(Pt%RI?;Phy{#%eu%rl(3F>ob!ces>ph_O(~73)4DFy ztOp#2|GnmE`f?&uAvEXzYgb~eeHOxgKT6nJj>7MMYFgyp!5Khfj&>z*rXsTsxLA;N zQ>3@Or9TGBWQin8BTNbZ;VtY{wLQc>znb;a(#%e2NanT*YlaQcQRPR&)K`=8SGQYZ zF0!nGXcW;-9HA_dOy)c|JHzAr^&Rr&arhlnwJXj!A8N*bvN<9MxI<>?vkl!vDyRCX zg4L8^a|74u8^7=BT&4d43a{&W`4 z(1l?kUhDpK!ld^x_csMyj8T`x?X(6~@no*~W9KIFH{Gt`%O{N8vXPger{xW;hlePB zr+Yok%A(=#g(ky+NpMxjYsWPHMM2?7{iA^hHG$^>O<(BxKpC8YS(zm?+&eize~%$( zFF=?_w|pZ#v%J;2cxHA`XQTk|Rk+)5M)&;NgFFUbm)Pf~n}8Bx_Ae(+MA<-1MW4Ue zTn#(1subGBDAX{pW1^=HPK@qHd9u9D9q)AZ*8QlQR%1&IyLg*Z+&+I1Cy*D61%btT z6LMMphByn8Sg17mJD@=lJ}xXQAo3JZ86R5jo?oBkg-_35-0$`>nGgm5*o7V{K@d)x z=%eLrzwziM-C@3UGb`Qq*Tdb`qc5zqK5m0P(1!&m3M18fE?`$#quW7AIoN~HD7QYV zW++~n75jzfJr23?p*R7%09Hrwy=GA%W{=%Iy8B2~#D$|EQ^ATeWEjN0PelINZ@@@u8%w(V+NU_0I31f70AeVh#HBw~Ltj zl64^s4Q{00Za+SK|CdXj%5*2kqQ|fci!PH+P5r#?Tm6I5cI7K4KWJnzZ_|ivCd|pD z9v*bIc@|Z5eQaeXL^V*e&wgp>mKcm7aR#VQO--%hCI}UbVko)_GXcL-cq)D4lQnee zm#%MCDI{d|N#^Vt-BhhixF4m>ZJ$c#eUJ6qLde6rp7w?H8zm}#EY%ZBm*jDxoZ%_` zc6j)4q}@-0GHc0uWt#Q6ZrUC$3#Q!{@C%~(e|S?KbT@Qz@4vMLS*mw%EASdVXw^B$yplfv#Df2#7&sH${E8y=Nj+VrIF zzg7uVnw88cu@<$k#nCGKQ>B{FzqmOY;X=wTFSVbJCm3a@#=JPaXOkkDy(*HAC9v&; zng}ux8$7L#mE)4Q@VkmRcv6WtaqNsbd)ZlZ6*oKgTTTiJIq6S)1^jH<67;poPvWr) zi8rVX@(LCKUkUz5F zImngMo4Dp?>XWY7A@HQ{#`;vN6zCf&($YRmESE1!;cSOK9hmRVyXSXaP`r~71u;Es zj{mrGzvhDF#vBM^X?c09mX=l;i9yWyoobebMyb7J#OlG6G%KDBHfBN1Zk?hFU8mg2 zO>)H@-QwN5OR*1gb7#btr1zE=H(B}EAH;uPc@$a4v1T@q2h*Ly=C_GE9CdXyEnq6+ zb6OeWAvnRyx(;XYnD!Q0`n-PK0kpz8P#$6GtF^3FR}I37rugGrR&CBYZ-v7R(4g{V zzx(i_bAx$+Y4$iaBwyGfBJud+5_p~VUrgcJ0;P032)yUE7u4xFKqws8!C*wSHzyXu5QD9~#ExsS^pA^{N{3vdQ8hkvq)*kf0kdf-hF`kpN zn;Eh=ky((HTL@gzzh32{{rZ<(M5E)jsiA-vDYAy#EGy#g{aYl|$+3mE5)D zT)vGb??|lAbt}OkvLSkZM2b3nproYCcUm%zN#LZsO$|qgSd#Dy7S|JIv0;5Q|KDZ0YY~RKAf8&WIZX-W3(VRCwxg zdc-HppXg>+-LqbLJK(y-V!5^SnASVqfy67rBg=2mUAE;s&ozGqmbi%X8b?v#sZ!Z< zo3j~7J$6i(z3p{2{)zAYpLNQe0s6~Pml(t1rue+innRmxnqq1OyTUk)^Z0x38dIuP zhx3B9i>uRZx3HmqxJEq)M5K#6wXAwMHxD8$JX_`M&IPJBNHY*K0bNE%iDVfnggYarvj_= z(^ks0Jn9>T$=(^E8J+`9bEa+~A5t5h!D&zlN!i+G2j5m4uWa$l5`ipJ*Qr`gLzn&! z6Pjmf^xK^*duP0I#Fd`E_%%y&IUY9eIP@(r+NB{SPZlpdmnm@D-q82DdwVMWjt$y! z|8ODZJfs)0P6BdUy&wv0KBq#`NmTnI98cx9t=NnUJKr75B|Po28n}(iAMN#H{`O>N zMiZkr!G#ZT%6h!&W^~i^P%-niMxg~u<@J2~`5whp9v+@C>*A2mP?hnW>#|BO=e)~Q zeJ^wcju8F{yBe?eTv3EJIU%q`kLqD;Gh3~)NL;QQOc{Unk8)4Q8-)GQ_7~E zcjdvue;Q#`+Vq)k%POfeIJ_$S`0<7|jJJvuama=<5PpFPQMc35(r`>sjVWKgNET~l zvku-<7r7*#)H180WAFc-fP_LRMa{&3wVLT)92@6xPVnJB|uGDi8$b;X2IN3-RLSOPhPij*6VY`;Hu0z zhgt>AXTt}t%}@4MYhT^pn#0WE_|3z#IKv?UkO8hWnxf5Ff_y!Uu)lr#w#pM3#csGd zgUO<(wH7}?8C(|!`Q~hxhk{u{WwS(vd*w?^aX0G{b-6SD#nq1lF?(_xhm&sZ(Pg^t zId~{#*cE?t_lCay*k&*OBNTJTxHq)uSo64b?eNnOv(2ajhaM<-OM9CY%yzYoS~U|$ z{Va8I%?jmLUirxWLwLt2rh->L6Ooc8$$PP=`Dz?(AlE5{?9!V!*e`9rk1B>$C;w5J zcjL`#fB&wwWSIivW`^XXq$yDQJJ+V$?WS5TRaIBBUAdA{x2X#y^^9rTwyUiBV}FM7 zbp%wFJ&~|q3>kLu8__b$$=N9UN4vRtA5ZWsgwuAUk*6^ z;_kHTZn%hPkIm{`pTzgYa~`E)yP$y{!cD^;760ZbnFkL-nCAP6mEdG@)>f>7!rT0O zzV(Iv(hkuKy`ZXVlppI9@up`wt$JW-Z>DP335R6s5OlI0$UnR|DR_{lF+tm|x@r1Y zjj}%>OJzq%c^{;_IGsbV==+#UC-@{&B|{a1t00qHv?0Q0n62B&yHnSD)JgRB)>bnI zQ$h7C)z0+bxAx)oYzu71w?gOFYksF;_SJi5nf0sosWVqGK7~S1aK<-w##gE9_+(*c z{eg(?zm%F4-@1+Co9OEOZGYCi^7$VXneMz)P?a*@zrUWPStJJzU**Mt@=m-5`LqpCCYdmpVXBHM zuJ#{4#dq%gZksD()%niLig&8M&7?p%g9a=Sm3a8(M!9zp;XSmjHR0OZdSYD12sf-*dOYAjxM~ceWh-1kCo-q_B3nKLZAH zJc;HXyD}ROt(5c&e>Bda5#`k`Y*FYJnUt8hKIM~`)0Tf0PqLX8ktvufj_7%BTg+6e zq;Qc}A%C^W?z;9v`oBiO7A*+8`yPzycuU#u@VY-O`XJt<8@GAZjOyXa z1P3muC^qgA#>YxQxBR7!wkT;fKtiQ%1I`kGxuEl*`&R+yMmF zpO~H!y9}o3b%HJdji}QPcV!M%HHY7W{%Q(`004f{3ZqmNR9G>+r057 zzEI7n&Xmd{pmoH!1#4`V)XhI;2jD zDUU?vl&wfFFXB)B23Ehvd!S6w!7*!IGhjBS@C?3%SRV?C8}Vyvw!}SmjG~TCEK_ZG zaE6+1+Uv_sJysL%+$ANS-8ZRI)_Xg(p18r&G#c#l<@4hM3A!n}2k^W1bg^dK{$4)b z4|v~xx!EdTl6sR!l7xn-WA|iv$B>^H;d{R>G~5cW76l3tGw=KY0um$_TJms%;|94zh0QM zfqwTqGt*a`r>LYPlh4e|Oidox9+9J4?RnsodFPV;C%*Nip<&8^SFMASjjY_wA!GYZ z=5cDTS4KB`N)4lM`0i_%k|J&FAy@at?;8aMYGUf8ny$dH8Tn=XfoUzYCF1A;!H=$;$0Jd=k1`|hS_8H4<0#zZhO+3H-Es^ z4gD+JiMsxy>c0aBWWdWmYkCTs#Rb8TeV`b*Z$ChHA9(Egacc|?=EkHFbUm~ovK<4i z5RSdgtfI5;s5zo|wTitMhzAc4W%H&E#e1I(WQyRCWx1$ypgpAOx&im`TJ|1{NuFB% zsPDS)NAn^kmTbL)^wQl*WffI{zZkV<+)GZFb=@1TUZJL8y=;lUpclV#_TyPgn;O%C zx-(1Wn}6x9bqq2pJaCQP)@qeMCtw~=FJeChlxGWY(5amn*bLyAeQdnb43#aR+5&Na z(+;IP+V37`UB*z=6JtiJBJ-^2z0ztt+ShOL|Jc_lq7^n5`h7ig^NjqM(qNI}lIoo| zRiO#t={wYev%9bAdq=VLgm62%bLSM9w2Bjt=Drt@L%iQwpl`^3oci!DD=ZhIsuJ$y zRNQL%=c%@H|0%cSK?l2AMZPk>zQA3In+_kes^dGjy-`j!ty-hSCB25W`kz-}sh^nh zT2fn1MM)aAf1I^ab#MB8eDXr;Y^n5uejjYo(ER1VipMBMeRnM0_0lMP^cPKYWa7cv zQfivtvzy$w+W+zJS5eOTt{7LFoAT6?ws9oK(;M`fS(=@2Gr z8k#VZ0JuTe{@dzh;$Gguq2VgFVQ<^%5>Cmq3cY|DY$o!>HmN1ia~CgUu0WaFZE!R< ztT<)xc#U%F?EUc#Gt!Hf%ov&sm2>NOt(Wd{4*_$=5@!e3zW1&g{^7k4CoZc~q!~=M z&7doKlI-hji?zJ>CV^d542=FIFaXjw$BO&7+g_KVn8V&bkuH(??F2bVYq%^;}7hVjXYdK<+MmsIHHjKSHv?!*Y>Xmepo-YOj_D9w*zN>i!cD4D6in|#`H znD*AR3R1SlCJ|;kUo4My<{8VoeOP(yS2AkvN1BvaBN(TeHv2QKlg?WKHc7U~x%ULG zd&yhnng4a>ySFop`@flKvizomXhTsI0BDzl%iXnadQ~Jm}EDu@JrJs z+1S5(CxgjTLNBiRbUeURJf5UYpJM+49jgd_R|97|nskI(pQ<(Ia*|uAJEt8zK*Wbr zN=5^}%eu`y1SCgwULfN>ed8h2ofq>Q!su2M zNuHyc;!2xRmhwHGyq7QYQgP#2#WSgb;(YVg*?S&&50ovYSAUUkb9sfRp@zhRJGyqs z(5$KVE&gmj@0ini>(j^k*u7x=ll=ipZ=w0kN}3O9TMmWjnw#8R^ANtFQ0@T_CO=>! zOdFUNvYmiUzu#w@(^o{9oi zK}^XO1FRU0&8D`Iz*dD;^}iNnp?1@4eA>I$>o-FGB7S&yrls`Wt91>#vilwvMD7au zmCJVpo)Y@DbLfC84zctUcJzUq|Q>t&G=X=~s zh|HZgU*8_J!zH=s?D2mU*^q84@3l`~^(2`+)j4LEGEW%J-|HzR!5Jnhmr2(GdbRaK zs|VHJCdrhTEN2Qymkqhf?$~-o77FX4Xw}v5dS;A|uWvg5jvT;bGa#(DHcOB*xhl3K zD_@=rZ!`){8p%bM{SM~F+^74K5igl8OOljbnlh+yxW&FH)r7n>O$2hoYs^K#u#Z(wpBnUM(<;RWv}Y$=)T6-@nR-rc%+>XqdiPmTh6MX!YKn)dZW*JL-(f)3kJ} zIaifSpY)HAGNq;?S0-C|*lA=VcRnPT6T0*QWC~`e{e)b%o-Ti%nljVVf&_m!; zPoFsx`sU5MC;cTX;^I2o+}x=nkJ0AsN%wPF{5#ygUps~7STTObrAJ;~UZ(veb{Zd_ z#z)JgGL%eKoVNLPf=+eU#kYxmZL>IU%&s`pZs{DqxkJ2aL-gf{6vaY|U?w-wSrv?; z>vQKB=k=Qy#hr?BW=tu5FoD4E=H1sq%Z?8+N8I>!`0b|pl^z!8`x4$bug-59HtSFo zkE&YkOlT7EC*FOURI2k%hqYtb7=>uS3M!?QXSMfOELC35L ziCte127s6UC56RT@7mY*HAcBJ)zJ?+?Y&u91a1L#sB_(ibWeNs{Q*GF*Fme11hKs7 zkB_%8b$xmA0rIhb&Ng5>(;Xbt=j^j$OK+Yh7b#9Ul&ZPi3s5GD+^u!yv-SPZ4c)U{ zQp@F4!Aa_p)z$S~%guK~_p`VAR<2r-^1BXmTW)rO8^jF0(yE8|To2eOC|wKMsZ{ zKJ~1qqL#IDv4oer6Yp9kmF5qx^9|(`&DQnaW$hRS$s<9*{2vP%^H!!xg^Ff2tBV)g z1CL{f-9mN3TfR)D-FUK+SJ`@$lASpPnqq~Eljv=>k_vE zTl~X=UUey+rl7xM9CxU2J%HCDNftZoX6lH!NaNs4ChBwNu<2cQd}*d3gU|{1)iAHS zqr}c!4D5b0?WxUadrSLYS@0*B-^nT_rtOZ`#dQ=}>8{WBVsZImY*I*qiJivI|8rj` zD;b~AN-V0SvSV4y_?}Pd&lW9mAEu@jlQQ; zp6y&kmX&H&7oJ>nyI_W?M*k0=LXoiz&Cqc>wm=&-rG*Na;o;%B=4P%{8?fhofYv@; zuhQETjyPduXYUB(&n`i~z9&07t-g+6s462~`+Dn15(D-%#+$j}WE zaCwEbq4Pd#n3r*VD138@=#i4-`Jnr_ucVX(P$c!`8{GfVA_!%5SyvnWTNa4vI@P~i zlcYGxxj?`^K0?)=y2##H;Lxwyw~+6B-`=#lj40h(BroV!rk+P$)lVbpx)YPp#lnFL zcVPxK`RMGvh@|xD=iZP76bDy$y^4`8bfbo$7EMoqa$j2|@pUtGbEtZ$u~&^!mgxX6 zR{TfhAvgC2%}h!Ox)XF)Z_GB&Z?aU+KFsV-1JnrYj-fxVtdi!36D*+5z2r}7p!ci( zDwxTIsgtlyQr6Xb5<3tjt|aws_fBlz-#n8N09Dg9i?X3?UvB3Mjf>0q=bwK@2hhb) zM6>>E>C8IIT{h47*Zxol_eMWtgv1u&`<`(KJG7MNGzIqSt9(8Be-;`MJ2eF zD?!|5XU^*`Y_aEPMm!1cbB`N|(M#SAFfe2pI(h9e`M}<0af0?==j`!G9Ul)hi>7{m zal@{BfzD0X$Wn0(KpbYyzzx%G^9-OMdQFIqw-wo=YE0~|N zi8cjb9{=V#p@2(7$;rzLSXS1HN;I^T$8uTz{CY*x;6=ih#1PG?hb5&qPh_b0CzetH zyKI<#UBPxhFQq#9W6e|0HUA|kI=W3SCXY|njc?ZK6@&>rS*t2nnOc{|{rUJYpYzJr z$SPF;rn^Fkkz*@|!PzcMa^9ZUa5HVzz|at>h316p&UBRwKGQZP{wIBEIThRKaIgbI zw}n7IqfA1@`Nvt?l!L%;?zIkWj3{;I>RX+lbcDDfebG^u$P z`|x_~HFB$lI~y05JT4?6A`RphB?M=f04P7O>@DmBu0?X6aCocnuj^s0wm)y=(l5n{$8)rrkg>f!n*mawwQ!8j zt5-qm4yDv*PM>C?F82=Ee^|IrKL zIu+Qcn4j0YxLO+u@9oso>Bk;@`RZvR9{*2!-yPNT+NB$jbL<`)7Hp`f6h);dRY5=u z5WpBfkz!YZAYG)NbL^;Sq-dl{?-l~m#3MF9KnRcn7O(&U3J3=2+~*C^`R;r(>#jR% z)~uOzZ~kDBKz{8ld++CY_TG$&lnHaPhh1uWRzCF*@lCVJ+G>;5w;e9yPGF(|gXDn| zBHpE?yao!%RaED^H|#BbsCVv=hQ|^)G}gMcNkW34B9yS5vu4dwbb7BtyS`ov6fq&5 z5nac-wb$CBln$OmBnk~NnAU)WZa$GQewbk*7OwrNeBDcXtHH#j{fLi&<+@kxW+hp0R#1$E?&Re3#0S!mv(~=-hkzx&89;fe zn)^-%3XqqjPove`Jye?f;Q+B<{`-adlS?_Go|;(d>;g1XV5_<%!^L55v`;3uG*pgK zcT&2p|N8Fgz=qX3p&k&pJI|N2F&f_Sn56?5nLzD|+k2%pF0>D@Sw{D544x0hF$ky`HPs@ktfa<7JfA>9OY6pJ4P` z5PK=TVYx*?+p3cF7kAQE__OC3R_IccXGWaYy-z1-(`jcEtxpKZh(haTK?BaS+@TU>R>JV%%WbPApWCMO znIFk+NLZAicgH<}5M*HrpBW*7MnVaqW0q4w>fg4Ud2624O`5-+Mrh%$gLCXoBvTJw zBm|ZoDOpKztP*a_TDIu$;hbZ6s28-=ZnNU%spbyRdaWHIDye2FYlv9`TM;B}BOzh@ za9v=-x&$R1;BlOb$#EO+e0?@;4jJXBRl<$w4?2)5W93yvR#9trpABktFUI!#<$Gz1 zY>+KmeyaAeGrAiCOs`Hq%T&|GR{79QmwY|!tMFQ+^uiPj@pNS{+bp!w@2WeHtKT&K zuJ~Nt`p*~Klxrl`(C=J+$(ADuUW&}AG0W`#Vf|F?JC{vFG|8teQw?Z>Ka)3b8@~zn z2*JBQCXPKd!J8R6!t;`M{t{!Gtl%#c(V1flUGPrgoKX8Bc&8;itKiMVg?MVOunPMEd8M)ILijIw%WMfGfS@q+fP!ueaSfdB?p?LhQdR#(+T~kT0 zMds0~$n2a@7N)WjstFKE^;!0NPG@Ahv>07ltY$X-tahZ|NDh+!M+pyvRNHGzUV0iz z6WQdse@T9-CLpE+rsC;a5f`A(-vl@v`!m^vuddKDvWous z#fP0UW|+~Po$tQ&8}*@9!9K_;w(L@#zi?qnS67$(GsRf|X?WKX=f)3|=qrtGb}W3Zt&z7!W16Y>n& z1sT`Hnk;8$XJ)P_MLDL+QqG%9FwC&}vtH4j>P^8Z4K7 z*>Qq2NXyC^^!N84iqO7)ykRqyzJLGw;ve1KaKS-Ef*6&UU0)f0sdXeW~sZPXRg>LB`K*BFmIh1 zHrf>LGz4q_r_gGJ?(?jk82F}kg4B$?#I!VbUFO*Fm}vhePum$VcP$+hpp0S$o(r=k zIk>8-Nwe+?-Z<42?!R7mW28$dvCW{ z^g2e&>x6Ax#8S@wPB|YZ$3XJ&?j@my+|*V&`S-?5bpVgptUL;^MZ4*c-Gq8 zcVnxsqy7maMlVpVG7F22O5e9{-}&C2iY+$yCoa_On~1QFWD6e5e#OUi6gN4yBB3PZ zTiqFQSNnp+aGRYt$Kd@-l>B0Cs-Yu~FCR$h}C;*U<>D;9MrJ>NqJv6LQOMlZ_TRMVyw2wK}PAB03vYRI~bUJ!gq?> zLXSB16W)%F2t}f@vv}a016M4ztILsEg^DYwsIc`36(VX-e>pBJY*86o$sp9y`8-l9 z#{>Du&fOxQSrX-ip7??zSP8lB&MXW9WQmEL1eF}T(*~bxc=d6xG@V^##+3&S!dF>CJc|MM{JrGW*zULEeC&F!E3L-@DjmNG7u0TKW z`&!^NE^T6>x8H?x=cFRknAK8Nj(`0E#h|>vq3~DuA=16r1NEmgf;mW_rDslG!o~c8 zj51#5rY)P0cR8o6RZ^EZTLe7lKC|tVIny2v6`&3fmG;G|v5z0?PzxhW*HJ+vu2IUs zEwoj}oF(GJB$5w7X>|QDI!@%u05&Iq{7a7m~vnP5AK?n~*S~Z(zVhGN@J3N!$J$D2$zV zrQMysEtpqfRPhqBrGU}&orMqPuGtlZkZkdZxASbgqrtJ*L4ERX9*!0J{P}bJGNBUM zmJ?AuFmppCd+6z+Cb2n3c_H@oxorwfO-+kWlt*iy{f6>VJFpNDM|?11`jD$jbQp84 z{1x=!I7mvv$k2O!s=-!s9+Wwl=NaTBt#9O=)W}Qn>U^8)_Q`Rjq~uYQ7L0p}E#D5m zl$4bbBQghOfG*e^HQnx2yN)>@LuNQIVxx?;d$JhJh=!?Bd)e{~J}+P-1PUqJwxP>k zOf#%C$|AQER?kN~itA(|LbJ$qO=7WFM#c5yGEKsTZsd_LWU`4z}V92 z>Xz6kYe^WGyamVQCK#`)oNIee7C`X4i40rX39aAN<;=e}Kz0q+y1}>a&fU9rQK%+i z)`w2O8EY*vw}TzI1y{-MZ@fnPw=CY5|`+{>1<<%BuThiEyl_)TFA>%vpsoI{*vtjVktw?N&2A(mG zJyDWphlfX>^su4ex)?t~`m03FRCaTd9lS8|z#-IHcD5)Q1zSu|x9B3WShHq*Sa?d0 z;Ngcn@`(`sX~vP6a@Y7VaQ_#+rs`-hJeqT69oW*}nfIh{>6D3fyp)u5^KabW+BY8M zs~LQh{U-fD%jeQaX}G7yd&!z~t2~eLcp92ZV*J+iC?&#BtdbzUkmFN%L$12gS%t=n zFXL$osa0@4?e5PCqru6Mq+&TKp)^m}0)bys9)IMPEqmbe-eh{uh4RT4v(%Ek(-6S1 zg67Xm0|0htXw@;%8L!LZTb5H8n}mVm*~J1B-{0kree?A%&|ZR^S0hk{>dh~{y@3lKNL^$7@+f?$R zs%_I;TV8xwJ-=vfPS2EYU5|3~+v-Ua8+}*o?2VrIEg5MkJgEbnn{&FmYZ7;?m^OdC zCLxi$y;~g>ux63%cx5v*L`}`j1P0FqM8ZdrPqVhoWIcur|GXE>sT80!&ldL#^4xQW zefzyn!)beZ-1^mmR>!bvJGIdNT65g>UghRSdpc1OMrn;7M$vThFZCQEM}?>_yXre3 z;2S>+8A0VEfM%;x9B#o?i4*%MQ~JRS$sxW95-Iz3#FnM+I=ge)qvc}lQUygB%iTNQ zrV*2R{``4J`-9t{lX-mtWhh~Bt>6tndWji0>?*mlPOnG{*0JnWR%Je|U2MVZ7&qC? z)tPx6vM1h5IHG|zlL;%V1K)?eYulZD2O*Y#W~jS+hNrT2@(fGi18-3*T0f_KVwy9>V>t>31$B3KE27o+taptYux-A?hNYhgpO?TGaQlkH zmnU#OwVyny_g_6=Lh(**)LDr3o6)#CtmQM&3|9kV)Na{I^=dBfbm!;OOrJ39KxWzU9gvv|y z&o{N+qNbr8llyJWNS@K~fW_^-zhfXwU-!cGr?SwB%+m^4{GLeZ=0m#Lj&t(f7I<+E zmx(V}y@P}o{`Yp(hnXy7}qS+ldBi=yth5pvFl#w5@c=?Wwj^EwmrEb zC^Xc3|BE|?*dS7|?;~9YbN+iJL|xP@A0um#j)_{Zl}CQX{eicL*T-ANxi z+63W4SiKK!1{~^I98p&N8FLq;WjExFsng;O7o1rJH{jJ5Gb1A-CmRsFE2*}&wkw-I z!{=wsS-R9upGj`iu~!J=HcFzRkrDVadpO2^+?!U1^+6^AyV^*G@3)St$Vc%^<5+$VxJ84|4rCuC65#Py9kL~ zN)0sqPN*(8!VvJJ?3-!z0-`jiL+%P9=c4_HoR|Mg};V;d>dQ~=t#fUny58S zq4)+0v0Y{@cyW%yn}PcWg!0FK;@{@%--Sdou~x^#G1nyDj1)@I3>Kocj=!E8Qy5}{ z`qzvZ*3_Np3F4=8Wspe3Z6XUpIY0vnf6Yf()i+`a1B!Q-{(xE6u!SP zk&*H7<3SL_aO5Jo?e6{AwP^N|C2}{*%(#ad*IZ+;XzlsH=n<)nwS%pk^uE!oq?U`YR=& z21V3UR!4YjMGA%~m{CO1Qvt5sr9^F;1C|#kJ+b|6sApW->MDbX8BQt}A#gAp4(>{k zM2R9r+P(MyisND1zi&qa@&phNjdtBS9A-^bmi?>DL#0IdN0M7}(WZ= zZYMGZk=Q$N(zvi|uN|^c^H$ymCOO$WBf|6Br|6)dIk2_nL~#n_GznNtjq44HqXnq~ zgMigG$$jLSxc}a7V2ayOqWYR7L5yHus}NUbI=oRO5di?J0Yt??SFV^81&b)pbe|z2 z6^9Smn~q0-6XXCMBtbknaQulbsnT3UCHK#}fE1?1mx}sxSINuMNfUAWDG3$2&ETb^ zwX!Ht7DSLSfb-UH?97KzI)LyV8;|`RMWijLoF%TrWY9t0B|G;jBqm;^uL~pG_LszxrD)0g?@enQY7iK zDEGtQHc>P$p@iw`Z-B|~{yF2JN^v`1X4x_=U?25hiIWyrlQF`wELN zY-i!9HLDunj{IOC2etnCGizW?{S_MSj5-{}ga(Nup8o5@^Drohx3LQp05@jEqAE1c zQ3(e~oDSjSRY@gueSI-<;0sht32B6f3hPIzv>Y`TC2^HA#FVFyug{3ANWl1)eE52_ zuj^eHDKFr7xumr8nk0Pr;JT&QQm8w6eYV_Qa`}+>yvrLSvnNuwB!%iz{o3>BqtzR zzGld+Mp2*(70X2(4+Bmt*8NW^#p%nMB=$c+V_y-a%6B!Dro2yNw#m_S7mAU^H?$ga@EJ+e3W`@w^EcS&hlL*7ClISqdk< zRK$cTdWxdIJI_7s%(R88xQd*kmCG@`GX$6U&~`sq4qoAiDa#cR@VrPBDJsfK7LpWn zL?8wjvDBnlmbD1!i$z<~Y8B4Z5CKv!(=p;(Q6R=o(G(MR(Ith&R($Sg_iBy)?wy9G!51l6QaJhP2T^%d-P2LGR zAo)#~F(YRfq8OhVMm*#wT2Jk?uwX-XvEk0D5)psqJ6Bacj?qS<(m#Hgk_lc3A-(~E z-D(sRvm6RsL6Mjr3%VD!BCg)=RY*jHud0EFzxXwzQ4bA%9l81$y$dEy{9R#@Fj6LK z!(Zajf>Y!d!Rx;>k)LR`Bv21684AhXuB)e4>X4m+@qLxDTcYk!R6* zkd#yUy&uSDc(sI|C|N%h^``As*6SfjU47JJix{|5qv64Z(b`L!-V!%xUWGB0n)F$Z zL<5u~r>?N&1dqe9S)WSXf#3=gVqKbbL2gygy?giEFc<95pbV}}TRkU*py>Je>O=(Z zi3S>k*a8$5^`f7|uh^kLMwzy9u+yZ^U2DPceA`Jf6ai>&X>BJbd3fUwq0G`Ar6tMA zO~zi}IXe6u=+mFGhHZTK!LUGo%D1S78zB#YSUB+w`%i7%D)U{;{oAKXaa5BvHCR^* zK3@Y3sY!+#0ZB%N2kj74uJ#cWR!x+~V#LdziFS3J+gaF|%w!e?#mZUbCK`mw9V)kf z8TC8dvlvKyjfp6bpv=rPjykNY-KA7P4T_r6f-0j(!zBg}YfXkqOt^kngL!56Nmy4_ zY+qlW3~%rJGpNbB<7B~G87qPpfLR{H3!)4`WAQjVYgvLTTy{W`&HG5OqM2KHN2?RB zO4_2kg*@$Em6D}vrEYFB+YY3BGU|WERrLr4CQcZil(?2D@jhWKgh;}d(MNYGi?0<} z?Xs?y4rKfiuHq6;v|UuEMxf$?hITnG&b3AQaz%iL0}l7M8_apP0j*P zpQv<6Bpk$6pitUNSea^|n#dC*mo-^bq^1WUVwH2|{mNxwNMAYe7M=gykFs z!U^NK24r3HDbA%O8Wz}7Qio{dnLkvyES#N(;Adr#)Jaa{r;CrK$lccj&$q+OEM)FF z>r}9fOE*abT_|7fjb*@x^!*d=c1uz&Ifle_r!nd!s)SCbA7mdsAIY=!N_*5Z_^ovX zHO_rmNF3l_@y*`%r!P@YMBx<%=ODgDndm8;v(9y2(1Eq0C8f%ns~GsI(2gfZr6aFI z#w&}N1!w(!wILQe|SW{q7#Z;YahO8Q%g%|n-^9WQ8iGj zpf$l!KNBe)KG~)3$!)%Z64}zJ3s1w zm3^FtUVW}e!%Tv+PLeQCg~1)UMVL(6S!lv!M0SKnN+e+mDxY{uIiAzA0_0R%6nMJj z48wah#eQOZ|1IXA8;&A2>ht-<6I8c+{?2i`jH=65ofbJV=0EoeM@s^4k#P@}HD{ta zU-#fJ)HPz0CvF)Xa`6FxIe^+bL1AI3K#+=&F${!^kh<85;@||_rSrp}&Ow)|o6rd5 zf4IB{R=PIbYLCMxbQu>MVPU^+?#YTOfh?$3Vsgeim7{C6-?8Re9D|wF+ uQGfjpF(87={Z9)21jiyj{!68FBTEY#PnGpQ-6UYSsJccv>09^y@xK869e5ysb>*yv4FkjG_2mC0#v#>s zt?YW~lgCsXpANJ*T~ndYFOE!=83YcjUUhMm*e%M*9elrY|IV$q@z@`?q6hdiW2H8} zTka95aO*`}B%kU=<~Yx!Rg5oolFCkPhqw3)+Uf&mXLpzTo>e_7uq-Fo`wTnB zRIp8#&0gck9G9WYJp~8WEWwrFV}HrOz|tR|UibXt!jG@Mrv3T<%g+>+2MJqHiw*GK zReLTqT4dzDz;k;hdTWXrXbknYf-JM7_xMPQ*$-T?=Suw&dWRj~SS>c3(>{PlBy@{m zHNzFT#0GQCEZeBl-t2LI|NZ;&6)Q>#3QkP)*Q*V;=1!CeR$g9Qn6KEs!7h?RJfB^4Fl^TFc114?}-FI{?JR2dxCn(M;D!EthEXozvuD#ao%HlfQOc9cI8Q)^1I zu(1zR^EE8>H!1b!V>x`~x!dAwo1Sf6Y^IfP5c3~@JdfAOHf>BX@w|60X56kKL@FUb z&rKt}#XjgwK|yC{C+GI<+l8!JwNKn$QFnrGX=G>kG;{9u#Vr;4moi+>dgVH6|6r@&=`&ue)~q%T4gnz{A=TB@ z2I);~MR(S+MSDvvsI#-PQ$5u#Obj-uQQt1w*5!z_I-an~8M*B?mEG2RbDd;lO}&?= zXZ33SoE_4Pt5?Uo8qBom?t2l&==YmRo9k2yCI6B|!EGj%gO_e8DJiiQUAuP8AW_}- z(IdrZzL3&rE?!=h*~vk>xo_6<<2CZ0_wVOK$`!MYjf^}>NJt3#@>Pn9tGKGLzFsZF zZ6<2PT2@Cz_ksh5j4N2ngC(+696S2^d3=h)%F50aC0@VIkUP^C!y@H&EmJ6eq;T6z zsouhuZ_~XIA$3oW*l_38-C=h=Yn40Uuj}}EdHLgmFRLdR80rfdc^O^{U7YBn_tivr zd$AsQ;XKi2Qt|YN=+%zD85tRUpFWMfabxLVbEdMq)O^a^{Cw)Q>8lHRv!dhgcYF7I z2t8rPt~+0cx6M6wyyfn_do>Stp75noUv!lR^|v^*QSeNXl9GIbgX2?D4!O=x)ISk- zO1g35##5akX8ndFLs7T6j4X#?T_Z=k(7nNqZw^jv*s#Ix(W6k0)tgHyE9EsbG_r>C zW_=$%REYMzxW)PFKP!b?XKe9Ad#3UibN%_W!fR_)42_Jqcke#Y+uN&|c*$c06HD0m zxUK8RyUomXidVN?kp6pOVRpFGD4F6Mw@zaGA&1F7HdV zI`QXobJy&8J{+s6s&by`ji86iZ9B8=-n$n=E!k$cEuMGpR(<;C<}>w!*V9{_WpQ<* zU%!5sYI9GpZZG6IaNvWrCER#H{{YRkFbCitv`4IZHicSh8{cTe~-lsO{ybwrBbI`M1|>eZimi z?RcB}VlGyHscX4}%j7;$QO&>p`s;~^Rj_8t<CFA54MT;M?^&6$=i;Vi}dR) z&IDk2l?+Z{f%Yvf3@>inv}uong9B6;(}yhToHhS<*qjAiD1n3?Doy4rD8$gJ+1uC6ZQ+O?|P70)ID z^53Q6`^&S!rQ3#S8dp%J$e|0@7d1c zef{pD`j;-Tc5`ga%gZ~B6&9s0(qilL$j3)H&YEAPx+{A)kH=12RJ8GTM#ig8)75!T zD=0j?C=ke6RCs@@O_k%3BS#8zr&_h5PrJJ>D$P5O_goAM3)8N3XwIR#S-SCEoWMt1f#Nl8hs5D9Vd``>R&-sZZ&!9krqhkeB;Y&Rc~l2iH8ThjEFhsTk| z-Mgx3_juc#2dy>7d1bZ$t9Uev+({Dql&Gtb1Gs(U^r>PJlt zrzgyQII)g0JAYtJf%>Zpf9)*3j0Wp5D5GoKRTkKpwu*^Kh+`}1o$ViUoW@vPMXXw{ zNek)j6A`H&+1iw47jtpTZEN(P0t11qmX?-{6J+s}F z6meQa1kc{RXJS<2lmHb{U1uln39Ggy8Q$B(ugja<5Q~cyjTaFU(~_2!o|)-S5Hc#; zQq(mi)O(LV??aPSew><~D+`ENHhzA7w2vRv=cg;(RgWF}YtOmI&vmlxb!y!|JU=#rUTrrypkZii z%)`lf3hPue?^6L0&m^=O=59wEJ>Z$d9uMc^=fB{ zY3}5(+mx8}JDxQmj$c;c3iL+p?gPdEnY>)fE*^uXsL zKbLf!xm*)2S5jV1(bRkbbVSNT3E;@;&HHOfy&atTd}q7c!}0v7NhQB)t+X%9F`UBY z9|4A#m?(gX{QW{g7Ix=z)_lMu4nJS#G^B2IN z;aPz+izd}hXSZ*kSDv6M=DWG>-oHP-On78u#EX7XYH=>P{abUU4U=@?V0xQwXMK!k zbnI)Y0k3XOM%eKzrl#gV;JMT0<^!j?OM_N#j*enhr```eamQb*@Y_f`UTXWo*E?66 za)8M?=+3R`nO8ec@zlEYzo}F`dGcf+4-K_x+nFGm zY=CM^o~LAeo7-%hezW_+SO|rE?A>NP+iPn{*ECNC2s=UjbN%{DXq&1rU3=u7Y@y!A zMpFA2A2vCvdSQOh%H1YqdbVwG=&)|m`r$VejewWvX}3Ar@oRYP=5Qy3IkpZqrp8ns z=HzKKDtoNB+YTH3=J$=RdG%^i`|N5p##$Q6U5wlOOi4wB{XoC6vW)O)Nta1;zggb_ zE}O;qsTgUWJ%(wk)~!=(%X8(F)^neqIF%6a_^~=I;yOJH*LAt<@j=7jY-}-3X@K4A z*!r_)&+eOwG01=Evsd15^X3Yk9am68ZPM3*mvxDh$=L8lJ%h>*eeBIj@Nihqs zlMwnGXdKKn=7^esyRmqd8tmK`b#*o%XPwK`P;Sp%JLXlZR#jnf**00EOLOZ^BwMzK z=8jj(vIrRb{pQV^+FTb0bQ2f9A@|7+A9?>wc~x*2HXawr=?)+6`aP7n%>4}^QP_me z-#*`o5jQF}9vdmz9*~{w5@-Pkw#(h!os*N(WNN5|!rpXXO;Ov1(9lrIklGughX?y@02W?sB#PX`uY=C=Xo;i z5j0vT`m*rNx{k;AbG{xA>^^?t1feX;moKN7#P*Taw5H$#aL%==g5PC=FMY#9 z?tkXcYJKZrCs$_c+qZ8uqnH^KM1F@ZqLvCWbR9M}H{Cv0R&do&! z0gN6#{G&+fIOvLDdK16d_K>8qAQ5@c+!}Pr2-0>E@@ArWH{Hv!?R^1$t?WKi6H<#J ztmG=Ay3@eGVBhZDFRSa{7Z+P!Ym27v@M)%;CFI0yZsbgnaxJc#AiMd`>)b!!N$d3b z6z%r_0?6!cZuVUC3Fnsg$kyf@4r#GW81;Oyx~<^pQ`Q!{dYu_8AJ!re-;J!S1L}4@ z;9^+*EFt`KN`kILQB4=B4V^b&R8r*(wj({y)upHspt2^K5<{5fyTU?KJS*p+%wq|M?(6kxg}48%v3wga=y;X{f)gs;2QUwQO;&uc|xTNLH4v9HAIrS1;jF#&c5D)=8RCJ9?gQ8qBM$6*XTyFc> z;t?*C;=CPzNO`v%q>!V8270lHvGOz#bS-1W8S7O#t*s|>-R1M_G>V^U?>wuRy}4ge z{sD8qmpG*mLXfTFj4Pg20newPz)7HZZT3*BUR=n_ZPuaz8k!YFr=jSS7zpT$3tf24 zApI_;%74F(=4VIFzce+3mNCS${zjmjCdxG%&so9*+uJv9+C(Z2HH-)xxOK`mS1`$> zLImoJkKCtmgu^di^m&JBp6B>birCN z_&G(O4Sq)P{nr{l(e?$ZF~=Q_D#?j{?=d!awX3@G_tmRwz-~aI1Ug%G+2clDE!ua) z;WJ-wz-(roZ>73Leh4I+(W$8b+v)U1{|LQ&H|RIv77ak)Ek^UwFCujF(EL6-6~)JHw%hNu*i9CRxhWj~aH-Q%R z10NMl*fu9=#u3cOw#ZOfTFNuwU5qs*O|6U70JY(%#$GND6g=bptzbKcblbHtxd#sh zO=Vi8g37~F&FWRN-HV4abEdD3c1W{<(l#$}UQ|0ZmTaK=Ov+t%dV1P0Eovxd=6hv# zbUaH{P0)4K(AV)=ZNkR}xeo;LY zm9XBLh=3-kUAx{SN|h!VmhKm|N^cUvG8LHJgbQ#it@V)C$-c7vrPO?{JT+{7c8c(S zwaj_i7pC|8%_&(q2RhOdG+Ohd)ox;Y9=7xdl5};Zjdi5Q=zzj=_(|w-^g<_yzmh|x z95OL6=}gO9nCZtt&^C+{FDoynLrs}t)Qb=xgzoiK5P7c$^it&(id2w@RlKctL~JbY z8HJ`7r&bp!3%Hvt%uO5KmLoh>UwHw~vC?|(s#N`kJ?9>ButAHguKeh+@U2KnhFe!r zrGc+9Ajz{2QiMOpnXk$<$B!RpmEYG4p(OnLGfk7fQ|j0Q7sK<|yjms$PCh>CIPV<+S%Oyq1n{UCjE8;Zy#uUAs~Yiq|_i zI`)7Q_EppFbyYmmGWEMxZd60MPE||FMP0#Ewp-Jepcwp zr=x&zvUux;lMqlGV*i-M?TrS86kYlf&$d6jqs6KF8O3QfUOgdyA?uo}t6j(YKZ%+I{>IJx@TsJ$ zrmR0N5c>Q$G#I}=tt5xaSdHWqH0YvXzCC+RlTDLi+gr^TGEf(#yjQv!G*HFz^#*qK zc&s*A?%;s$kl35nlI;-VzPPa2Leq_FVWvKxC{HpnGD?-f5~;YGAfuucd-v=yg~XTz zIp~mSZKUagc@VQGNLNG~ePNY9pH`b^x^?STB6VBljGQhSv`2^HbBHB!T7}rKZEQ6c zH+MCVdORc`HEM0DnHm$DXl>O3mJ66D9qJAzv%68SQ&*spJoh;nnd%p(?y(+Iy9*rI zM=B%G>dfR|3@NL{#l>D@Si73p_Hjg4hYlY_b@+OT^Phf*-7XqBCDfA7$UeC$H zRPg2v>&49spBN1p7_L0{2%204;&p=BURqF4@cY`e!cauo9~T=4oPNM!xN+mg!!vGE zEe>8|`6x{L3(&uA+GjSW?kLg+fbQ!>1|lUP<*&2 zbk7Q$ebB}=?Q7O_lN zu>bDuEPi~%rt4Hfwm~sf$%Y0cfNY8TDB^ymQ)87)0W&&; zL~WiBbDc?n_U5hRz8#{d|BQ}|fM&X-PTW+@0Z*wZkdNCO`hZuRX*^C3lDhOL9|!H* zJvQrR^dx`k?(TM6C!2TU=FJD|B)`3eFhpQ3Taj9Vt`4of5wJ3Tme5%3A<8coS4Gi8NSd(hmqKOJ#4~uJ9CS>E3 z7K&#TZWpoOB7trgLA#+&jgF3DFNc8(N=$y#p8-^!07h0jTt~EEizZ>BzvF^$UyM9; zZ_^V|yJ)aCIx5w@8SSC&M(F2I)@p$2ZK3N$qK=l7mJ(4$)L|%=lwb7LeEz3XlqkwKw0seeuIOsX2wXDP``3=789|Io!VJmi%bQ_SnFo z*#A8V?(;F0xf7~FrnP6m$shv}75)$aHsL>e<%4Z=0ytw5(DrSi1gQ0<#%B+S7PYG8 z=RP>V!y}76Lgj$49u>ZS9m6M%Jq1@r#{$8eud}3?)a)Tnof4h>{gt@G)?aR+v9f;d zrn3sW!!#m1gOp?c<9 z(Uw)ft5ii!6)4^>QRA;p15Ta< zNQ9p{Wa8PNyi&ukX7{Syh*|!x?>{c5e?D~2!4L(X$MW%^c=M^k!aR7FeTYE(iw^md?z~ z%mrl`Qu_IIufCOkk1pUf%gTH?uxE6XKQo(p!>{Jx!a6MW`?+eayc1kgkoYJQS94V; zL(|dOS%y20_Mt&OnS(4c+;v8Wiy5yiY$Lfg$9L@h@ihhp?xR1hiGd;D^uPHm-Wf~C zd4jI?-DL9cD2B;&?AS3V#SvsfXJlk34ZeKw!ayK!9E|=*#3z9d$G6<_{Uzbzw!Zjh2e}y6P1fl=+s3`CtTHN<<#s56Z&+cT2ojV93i6xk z3kL~7B1GCk9&qb?WKtKYj95%8;*PI&=TO6Nr$~7^ac3=^Cn4wRspaYe=-lKZ+Q7lw zv$bLUON+hK)WvgI=C?!l9BVaY?u)@6Nn3AEhDg_^wM#o2%igyy3O}6MYS&+9g64`o zQa|2X!(+Y;(F=ewifC7&e$hr|W?Ha>OZ2guD~J;etBT-OkYwM6z0meh>0hD5b_@>2 zefo644$PPc8lMa9$fmYHx@33!w1g-?Xgt6wgw}+g3w!}&4b6a5uoh}-|S4oi|Tuc{$QOWhomoF;n>OJ3_NVuW2v<7;mkX>J`lEpeUQIxyu zGX16R-zzvfXK`?ei|3RH!{H}p6BH{t8iGub?eZTh_`0a!mfPney81q3u6b4=XWz^8 zT5-VfQrdZ17x(UT1)V3qQD$Zj2A(rjtvpjT5`|^{a)WdOR+-ir`hq;10}if3hf)d) z2Y_A!i;5m>i-0nH2B9P+y!LK$XllM;0wIRt&$GkKh?HZ34Z=r?2Si{9uZ3p z8e0OQEr%P4Wzh(32dyNG5PLXsh=kNa#g4+ZRqfq$T(50$xd+f0w6Oe0IW&2W;>zKY zRd*ZSvXSMe(C?PL#Ib+I&GeI%9Ukw9)UlR@NcmUxVQyIuW#6wCIeY@-c7Dh`5Kdry^SiKMgffu zeoQ=36Ctk#z667=>vI3_a02j`De&SGVT&gO-IKqT_;Q&xrNw!H5tux{?(}-z55vPS zjq6A&v;kQ+{=T0W=((z2>XHl^7DKKCuNTv6{x!=!u?BBSCRhG(;C7jjk2qh&-R(m; zW9Ox-K|8}=ym(Q{ZiSa4ahO*Z3&!89=8pu@20*tTSY`j^?cJ-htyc<|NbN;Adk!O% zAn1~^vRZ62nN-2RbA2t@>Cj_hAl3DtJd<~e@_z`fBsbj&aVA-Au?!ww-dZdoLqtjb z{8RBAkAoxvH~2Ujmvv>?SEC8;w&%G9%f8-kK3=rq)0Oz!f9Z~SwfF)tma*>4Bn=}F;P?9_>l$4b@{pM}+u{bDBv;f3{fFXAy*a0z3 z?PD4YI=lyJm`s!ZzEwk#Fpck3#Azg-Mqgnbde`as6KRm3TavH9XH>;2LyST-)I_z%yM`-EH8#dS|Ho*&#p~|Gj zy$9*-#5#a>On!k^dv|3B$Z!pZG^%D?wR-#wx#sU^HMLKM?DHD#+B2Vz>3YhRE1F+T z)4ZjUL#;Tl=G`9S(za5a&uDI2zbN0K``6KAH@ku`un3z!)^(dU8 zQ8zd_INqD4spST*^aSNU4 z793>`d9r)fJw&(%`#7R-3FEraU+}Jhvz`0c4@@0Nc~pKgRdCO#*~+jO>4y$}mYlo| z3^~f}3=tL#UP-5JP4^})l@6Sr9Y*{zu#qJh3~J>OIs)|_BtnKnZgn^ai3<1R7b z@L|{ShIC;iUw`G-D?TwqlcX>{6pUqr8QL7?eAhlJSMbpm5oTDa!1c5KJrlsivG&jk z|I$SS*xLRGLp;MTtorZKjsN-A{?lZn^x?B-anNLX_}!=Pk%TcxjHrKW+nqHbENyK~8}<7}1dcK?x}3&!1C*a&^UCBj6{2Wl-_H zcvkuhEyF@-#-!MvUqhUBy-=xU8||SmwYXz|8~6;e+A**f=+iO?5#&TZXfUrs8kbza zyP_ho(2^(hKRo64BV#}l&(!70FRc6Cl^7K4y50TqW@A#OnR{O|_I?zp9vSvr6o2*N z+qdu|?*^ZmBN9Wx2MC)YYCF!@wBonl2&VP(azeF%eHVqu5+TIIWQH&gnAZ>VVmNsh z<|$f7EF$9wCGa3zimq83ChcSU?dxYHi>cwZgq7@$M~SC~?sEBZByq;Ml*4-l8j>mb z-(uGM)CZ2z-wr->TTqaZ+|?N_n-{92AXq%Gr{P}M(~Z3Yx?F={zSgQ)pO-}S4nI>J zLNJ_5npCLfX45@OHBv4=BHR%qhD$&|DL6Qo1iJirHC~X010>LgRO(AtWS>YD&DVD$ z@k5raT zdwMQQD?v*%GcUt$xm+D4O(Gdl?e{kG*TF0oLIl{NIit$@8or90T-9!G@fY=a?zt)< zNK8OK5_Qu>&JSz}4*fN`XQHVpO(26@J9a!TjBl4Y@sq`K8*Qmx=zPbMAbu_ElWOO% zwV^$aWXRQ=jQPKql`e}#4BYj5`jnSMwc-*Fx{UWIc8x#@?*)pifo;uR zj4F%R2Beu%TgjYiQ6Jx8NOz_EQV*DAMY(D3nA?Q6w8o7dC^4Ykcp@8NFB@g8G@AJ3 zK}*8=e+PtXY`q-{A|s~i3ic^S9Un-pEV-0Om_BS(L$4-4^EjPsRY+zqRFgrphgq^G zMr4Y9iU-`A(&b7-)pEM&R#w}1y&K{(T`+7n@vo$zdoU!IQh^i5s5i<`n2im>q`i+XE}8F)8$!2f=r=;g7^DCCFFrXO_l+8 zO9b-9E^=+h-z)#9f=Ay~%gZ|TQXQ^L%s8#wJS8ioBW6c=Aseut8b(0)dq=!w68NW5 zsbutkP25od8cI^rpun0FuuiBPTW^2v(N9z#hoNZ-w~F*>!bJfsh_e3YpWjvUmvMl2 z!j{dEVESgbsy+l#$zQQsBC$9{oyRXf&@S@(`)Bb{Df8!Vu%IAw@}@(zxzb+`*YpJr zmM@1Zl7kRgvj#?lty*IdOCVw}k})>`7x=BLtO6HYWIIV6Z} z^Vj_sU)(lTHb%v)|DVHJY4Fg^&mfSi`>8ok&(4yVJ^BVJkh_Nk9$NwiSfry<2I=>I zy;u6YLSl`X zHpU+9KzwJZ{``8nrt4xck$_zIKZ${}9;gsXMqdg0!|Ft8?XVZo17O*1PMt^Skt0f_ z$&4u|V;Sjq*FA-D6+Pz_MYGiy%{5cCRt=s~QhibT>RxTET3mp7Fe3Op5D(~ta6pGQ z105%V8B#c83<7MIYv;~msxhh6*U4pN4W>1XBagIi*RJEJwvRZl)ua&)BWe%OCndTP zj`|@y?^IK|Oudf7GmN-w+_2##O6z-bVfe8cUTGwcNeb^;Hc>)vNT3cvRSL!`u-3_} zM@hXaw0%-%zh}?E;J`HAqW{e@0`iLs{2?FI9~|Oa%Tt8aK!* zjX!sssv55yg;yl9AF&+p6NvIgA`o*N+aYdL2$ZK1;T=A^0jx+-*DS{q^LP!46R+9@ zf&I-a+wJ22Bao8_)~4XK^^mbRrAZfP&|WRJ;@Ki)W+X)E4L|jc_r}_s0YCN07hk?c z@6ck*KHoQO9OX9qB%ymLXZlcPc6NPVzqVPlSc0iw`@b4)=FA{%8~eVsw1HFAQ7uX( ztGM{(N-DV*1UpZTSi2}%XK!PVocPLEzru3oZ)AlrP-@1fsB}HiSI1=@_#{;@FPfw? zOIdtiQON10C@4p@OWab6JP1hYi(v;M=3{;bqf&&WU?LE|g)%xa;Ea?a< z`TkBA;-QQB!EX&mK^%w4rn^yBx|+zsdsTjjmRANpaor+VHxGB6|j<2+i0ZZ?P_3C&nsonvh%1zyJOKT>`aew{gI#?>};dvio)PYcy+4X-KH` z7)MHhQK-}%;yS63J60h^7`$M~_Z!2IvFDEqlpR>OR8l0~UrOx3My!Q+=;!0}l9=|0 zz12THs88%bxOlWTi5PWJ?*a?*jse9&-XOYnRM88eYvX|HF>C&f_d%ADnxf((gaF~P z7z*oYiLGcb7d8&KLiy1U;1YoU_*L)(mG42GktbDKOEBvRRBjFuWF*4n0wz3o4jobf z=d5X4m=s~!E~yP8W~Qlap{qmYhp!W_8~Zx?I!4CYXOl1|gZPHz?0}#v(z$+KcAsAV zCEy(pTLu80`Ig%nfgi=1e`D~d2;w!7^W>CFEU+{DHPav8@Z9Ln3zX-GVq_u6W4PsXVEQV5R-RQ^-yh+1GpI{-WS$A?7N(BQA=L$+ zg=9N~&{7d8^E2Jf%*+Y-1I)7W$a1~gz&|F4{q!}ZCm^8%6DA%?*<})^M+z{xG@FAg zLTFALy?6Hpe}Fm5R`l}a%ZU=6gtJsqt|Ds51T5T;bT|{lb_L$0V;P45NcO_opg$04 zjl^T`rv>OLLC?yYpVTrA(A*8{KOrK-4WW*~Y9z*Gu?eWx82si62qf zNXFu=jM;fyA<1`=^`ja?x1J+r^NDp5VWfnnV_ps7#izI2F?SeZ7%^HAi!j7@KN?UF z?hZ-5z;%_@FT8JU@AUmn)duQE6{QSyh(0S8efhTeq~Rum5~Gg>2Q@mnKSxNca;g28 zkT`VN{*LC#RD097+ZTKOS-D*WP#WF&kWE+Fy~fAoMkLgN2!k@<_=f0Mr_MNzAjAgI zo#U}}`-wa|Hh+cEd|Z7wx;wd-M93jy7jS}c+ji%Czg61GFDlQN75~H8=wun;CO1v7 zFNiO6dq5X>PGgxB@^5+7U+=3oQPU8T((!5isSs~_)7<{LxEd&Su;1d5T~qrgjG;YD zvqjsMq4E(W2lQb)C4l1@q9;j3(Xz2W3Mzx2sK4_$9A=WNX5Ss5>cNdKjm(W<@PH>;7LRJOPwNz(o#e zXww<7*1x1#hRBB(w`e+CeRkgHsc(8v`jcr99tUrpdkrs)7RomU{Tbu4b?=1TK)osR z#}Y1=OOT9YsbFB5`uc0P3Y>&-q;zi+pA4HG;@L#z2F$&T1fy3wzN#c62^)E{OYCP% z;4s0+Ss$_@L~uv3FB*YREd5S?#atY=2c$JsifI#oU8$xkG}AC>@Z3^Tdc?2Hvg@}m z)<3fB7qRugc2>M(`Qk?0Kbu>G)!A`>E||SqZ?hp)>|(m+Z`!Og+EK`}q&QEQ;uc}L z=v|^`A5a^(Ly`A(hu9hJRi43UWE#AiCWhPcYkijR*Z%u_sp`yj64R~4?BhIwIOf!UPV8@klwfXGE;3}nV@KZYrH>qj5>m69P?I&%5onwtY1PS)cE`u zHni6;WWX3~N;7mpFs6rC-5@O_VEkaaR9>yF3I+qh5XO1|AvFrN8oXZ$%C%khGY3;d zbpo!f{*1RVf%JzgW&+5d7BegBHR<-l8-A*6*BO~Vt~L-fzbZ(vV!Qv&;8FRjsMop* zvVN4<|2Vf&$uU-61xE*kTLs~wDhT#OU?I2>X<-5u;6t!l%wvif43Q|E2plUT?L-_k zY|~Rfe00beF*;)qt|u_g0aASw#X`BiuA)I<@#;?U#g~#$ zofUDh1OFZAiq;)8Y(V?LdO}#{K1(u(T~)R?ZZsI+EmTC?TAQQQvrD-nlqhZviT3=Bx@lsQdW zPR@_RBdN;vfzLM%~Vqw!UN|q5k!W{F$iD)K> z(_*kr6$_IfPu%2QNPCUh4hh(H$XzJX%<}M~zCl4TWV8m2UXu)xS&;RD+N^3KuJ$X` z!Hwp9==n4QXBS7GLf_7JMsK6<>TS>{^S{^FI3WDaxR57e-%O?*nC*ATD`6_C6GNKz9&JOxOI zBp^+88blCea38@Ak;K1Kkl%GkaqXoAq+IQkAx7agVRHp!*@)-}PeEej?FNF3{NhD0 zD@g_6RqpbPU$3Tg-SB^r&WVYw00yY@e92=g&>kkhD6r9-N%gtVhmn+jQgRN_I%x0P z3iQh7gZhJory^zN_ophAddOI|;E0HXiTW&m6$f3qQQ<#0Hi3L7aAI8eQ9^b?p4Yr4 zS_scU5k+Hx%EQ6JJ^i0!CjS|v|92?JzBohXXIAGrw;5ZlX53P(UV}pE!Sf&EY#O>% zF7Q9R({KVCHBw7m1gmdoylI8C-G5890EX>)?xFcx3J&hbI9*#Im-zh}7>+Xi`kw2u zzc~E=)n_)}=gmkI$C!t=c2X$W*0EHyLD_~QXs5`)YCkO7JAjn}r4;L#a& zr;{WK0$s18w>JurGEx~x^qn!`b*0FU*7llmdG?9M=-KpQv3$o)zhae;w0>d-rZ5hPus^CY;H8VK{$H0>YeJ#okF8_Wzf56IKl%>MySQGv!m#t#tlNva(|Yr<9Okz*T0;^?JN<53n%bH8fQ^s$(=Z@^{$d66N&*vMc(FStf6a{lu{tp~YK&EE z7jgyy0|f?z1IsoA&d>QKyLgMUi1;rqGCed75fRDL6UR_Ed}Hz8^5;HNE%}wMCotbVE#4xxt*s zc+z3_i8b2t6~Q5XY1aZ7FI_SyeebK4>wIrSqQQr(TE!7VkcO{JvQUsy$W%p~W~vM(YRDlJY`=0-w6L&9 zfIf1F4>EEH6HQDuS;fF1@?tPUaHWxCVmVfv`JV22-%p=L~LC68Lk81K+J?R|J|G(NrXxf6E`CMO@M zbyo;z@X{L9=jJUKCU#*RP>-Xls{Vz=`^e>S&~^q~6gQ8_1}yPx)iR z%loPQ8>_QYkqtwT#h(K%e%;5%C_MYdzLBARU`{fp4>;m*OAgzgs?t@%guInzU$<>YPQr#Zkt@6hOMX!jB5BF?6{Z3>( z%Wa({CQ4orDt}zA8eS=>wb$-Ti2^PL8-}ba7oVR5YDn(Md;dpKH)obB?hGEzaug!gE%CHqZg+U&{4U-21?iL=yQ#CZh=MAWZyPMP!=hboJkod-2|udZIJs(9(eRr^6- z`nB+g?Hs=Ui z>2=j)@!pVHa4w`-z9-S4h7;YN#E~AbiKR8B|Ka~ioflT02fO>6H95Wtb)ZIXVRUnx zZte`V&}N0|_XEjZQ~J6-+ia}nSGpUzCvZ@yJ(;Q(tz+qAuQ7UWaa=YvW<;ad9B=OU z%qjAXPjy7K&mq#CWNcKjev5jXoB#724T1tHwnN&38&&VZjW|n1^i6qpyP=^WnaY4{ zS&gPflwD{krIzWX2i8Dymr)ww3*dxQDLFr`jMxI8MDUn7POL=qnO6DUtMDHBsu zWcn->qnvnHa%`fuAMjUVT9W7mPFl$wFw4Nm6$ap9U@=5JfBq?{D2C^UL3D*VyFYY_ ze)a7IP9cXHY=JdC=mm6HzJ;0t%)?H8was#TXV%o|tjpD#exA{_W%+Ue5Qv04?u$w4 z9N9XzeQr>xdk2ZB72qls%t3%92CKfOesHW6$>FrNwt8uC%RfD=XxX;SGUFJ`{uzL2 zqLdf0yPN}=eIj5e6J-w$0zJ77jh0w%P-VzqlhX0yH^SvZ+#2dH2n1q)Iu_}1T6nnb zq@&$WYd-#}$hwf1)~lx?CwgXmtBUoyHM4rp+1#s0wN*a7*FBZpHKdTQxuAr{w-k-c zr(sutQH-iofss#{QJ}cEX;hLY)Bliyajm)r_{%Tq0LILnFpltEJ&x`If=_`t%GiX} zr-ye#RWWIbCi4wn+S>_7gD_jlo)G^7S-uu}{beYA+sew?Z)*0JzhviM{xUl&G}5AX zXu*#y%lhlN$(-XJ%`Ar=HdM-|rKFfnB-6r628Q|5S5G=c%l?;n*)d4cnIe>t3X<@0fjPHERpLd~UyDOvE0g8KJsZ%wygm%OGYw(D zpY~JJtwMIt7STYm`hi>$6B9|^>SuJlJkZ84F2msa@Cjxa9-g_kY4mdQ*-h?J%!Ne( zjbS;w7}Gf*sf#Z-9kS&0-c;Tn{^2Sa%7O|&BE3Y=fZb*SA%?&_;`d-yuCJ%+WnX=Q z9!;P0XcD?ayn+}d;8|uEOe2~4rKKM`h}~A-QS8&%-5o)!Wsr9=qd-_0Az@H4f3PxA z)NpDb!7RvjsbZXh*lh$Eg6qrFi{S_m80<Gkt@-@YxvQe`@VO8#9po7!N#c8#|KBvYr+frGZl*CT!xw%wO;=8 z-+tX?U!XWfR?&0#?&4R>Tn=rL%x?=z{2%Rfu}?GKx|RFy2b7^aR{`@=qvrMT8LoVH z)G~x${hYvwTt6Hy^8QPA44SaYm6;UJ^&2RTeZB_ivPQ{e3kym1Jv+P$A9OCdFZ(?~ zLH}pa@~EFvn#s$Db#Z8kN=LHoqkEcv77pf9mlBJ+NL12 z6p@o7E&&+fjDwOok<&knxpEwXBt!ZRp!C&Cv{W4OiJ@|LC5-NoDH3S0N3z3YkN?cT zM87+*hQ`^^Q&x4zkk(bIY7p?QoVRUW4xDXM*fl%E1{PL)-h+}k} zvcQ<^|CwFHBW?dZ+KBxh3Bpy_(5Wr(eRvBHgyMf~kE~RjSJhBzqG;M|&X=_uJPY+3 z-?5#oOKj;*b+L$b)7J5PEBKd) zVeB2zUvFXT>;LfO+|yl7)0w6GZ@H5jII>$5bX7yww+s3`dKxp3axFDK@exZJ;}y+Z zJ-2BZhY4a`S8ZYfe>Xr-i5x|UnHe&Lh=Tz85D_O+7DzDAP-kLrYJ}G$###Ds;1G_& zti`d4WJ(DBC(5HUIr9glo8Sj(ip!Mc1kRa2{Uuqg73i@gQU*0tYsz zX4a9(L?~mJ>0O}gt{*!0D}bU@Y@9USpC%~dSxL>NznI~hGZYTUllxH9q~o^pw!nHD zzm0m$tp%kooF80!reuSK#t{XGEF|0otN4&fHAm{@su#5*@9u3joBK8btl){ETb$Y;RtH{Ab(em2bPhsk^N%13UjEj9D<(@~51c)Al2e|PMg^2@K;MvX~-Sjvd}Gg)<4(}A*-D~@QW{iTrx2_0zd{ry}a>OJi@c2i#byok z84wUMdn%pDzsOv;xU^EI!DL$0=1@7;64n2TC!q^}>Pm_$RPt2A(oG~&gQn>RkDL@Y zGIIo@FRq&J7MWXa#Tgysh^DNGIxYU;OFF;H|BPWUm&lZ>9kYBCn>R%7GoG*`pC>7e znE}O-pKQef%LEoh z?nkd}&ksd)J~C1OPF0(ze}2x|kMu zB53RdSq^8m>0N9>&)|W3OXarUAt_&hH80B&4(b;o@x`mL3w0ji9VJTlzp3LL+d8<` z@r!gCGONbuq11`zG~-K8AH2m`jgoU;PmrkKsZ+f;dQ8#Y-abkgHZ~^J6@VvGQPCKS z?*0AuLk>Q@yqsEgb)4-$LcRKeQ>*zjlETV9nILHo{0HCMnpG>~N+<>h_M6Vq)%2v5 zqSESFekQdUm`!WVRwcn(S`yX~Z8`+cw!@eR_5{1EPje|a@|kN3>~2Q7&9;Yz<7 zKNvW}^W%SAY#og;_KQdlLV=aFP}1G>f3)`=P*rAI)+p*#Z>i|5fR?$c1eB~q$y&w( z3QEox2m%5UC4*%u6Y3#JHjuOA3{@6NMv)-dK#*J#CCQuXVBM~M@AmEP_x^sP$N#tE zj$6v%d|`k4+k36K=A7%vPT#xt_>`?Brs~spcUI*Zhcexo930a=TrAqMTXZL_fUGUV&uAS zxN6MUsHD_ZpYNYo?TBF5%rvh~K4#n#!v)7YLnRd?APcVGhj6vu)dxvijHN zcSA!37=&88cy)ExX%_v;2~HZ;Z%7B#P1DGCo$rSG|g)9gAf2H9fJwgv=848#c}>9fbzm!yUCa}BIoV`yC*t5icP?9 zLAthaWH>zCxr$L;R5fT0lVFl%n+E(Ma7jJm zpPL~gSDd>Rzow{3VE_d@NN=tKqKSs(OxfRwb#`EAoq$afifynLfzh#ZwIEA6!uC4o zH-SqWPRL-f$SDcH_$Bpx>oAb+KyVP`lR)+wwSOW-1o45d&iS4EyUIVttdfUi8t~O< znb@ndnK~`MhjM6j{R~rZIL1c9%jEzzT?eQ@SbrM%HBR`Qh7AVzoX=5iw=l{lBEECJ zk?~q(g&5cToOxH7H%%venwu(leu>^N{%Pr%NW$PplB%&0sAX(0wyqN+@CFoUbe?ng2Umt?VcQ3Dro zTe%qULPFKX(N>K037e+S;sizex4(VCD9KvCZ25BO9Jn3hk5~LUe8pujqmh#V!NeWx zhd%KOWZ7&NfGl2oFW@N}Nm6>$0bRhHh^vdndTP8y9xW6I2826$5dW7PhfxM{{35%2 zXEa%_u$){(yT392YV->@xpZzok&b_@V&cuJ6$$1fSS6nZXda5-80=l}*_Gv(G&sKO z$S@iZi~9xz#lZ|pZ+>`wu84P176sqHXNnqR!clklR*Y1;UERMN|5DJ?5L%-tSPF^H z)G%a#nw$#iZyP*e$y^ilDpD` zjel93pwQXVWAXdzU!X7#w|}*%@>--0hI~?Y1|LYJeAMFAMyKBO04t_pN#w8pEbQkYo#h(&V_a8X$neW9` z_m$Q6341^QSoI`kjHurL?pSAj9rsz3`48<={;{61yL+J-&Hdc}2*nrHMhj@x>+81s z#hHAleY{!-?fRTE; zh#p(=ff4pLJNL({Dr?GGs&pGK>utZ$q!M?l=xWi18F39all;|@TWUe5>Fgh> zP~d0F{`K)SX&RjXQZX;?$qO&;UoRmxkB2ng(@ z(6Gmt!>CtpBBz;W72C1x3!{~tzu5J{*(*n_qWWa7mV?)4@(RS9m`JD@94@d1#H(U- zr)%k{)R@v8aT@Z$Cw)LxyxR20pLYpc-O|q|O1_}HWXky?MmJGsu6Crh6Ko)Gx6Pw> zvh4|7$j@Jot=GPQL89Qf$PM({qg{ zC|eafZ?0(B_2?bOB7xL)z| zOCd&4snx4`{07YxB6mCXvUydg6_`FJGPc*(4zV2v3Wo}(r6w#wt7Q_w3=b`ndFRx8 zKly5M^YScBkWO#C9P`T&*?z`gkk*vjot+=F~;YE~TEJ^PH z-_%hf8JH^FXco0>RwJvzq1=8!5GD3oSt*q@EPUzpDRVI{a$P{_lH3K5#xUTBbyhqc z)@^7J;t%B@d0%1KhFp})mk5ZZQWyNc2{}jKm<;WOu$WCxFLCgK7#3twmjTjHhe07W zQAsNNU?IGI`*tIIH>uW3OhDjwbYiNy5u69~h1K!|@iI|3GSojGG>I)^?Fl*)?Z0Ga zy;;(BKWPq0S}8AIB-}DHHPzdoYfVIi2tbd+|k z<#c``Di)~La8uJijgAzoUny6$;7bwQo*#GX^8$X(I4tQO&YU*(K@XsO@3up3LX`|x>9WZwrRA+D=1k@U1Yim0OAH9BR=|Luc2p^>4 zMOkNM%l=z*+m9d7{)n`8l!L(##1~FuT@?X*NJ7XM=yu=S(t$TO+u;ZaEY z8x0%~@$;Lu!kC`)R^-8-`T6&YIieaCCrA%v?<4Xm3cNy6J-xj=&}ot}ZQTcyqe*%W z3$6_H&jxWxJ2BXEJ@WHJAtkyf!GUlIi>w9{YmS^v;JA^2I&1+*yEMpj5s+cu|MNMa z8iFW~`X<5U<2dQ(QHAy9?ss3Mgt!NB<(K!0tGP4g{!g&F*G6UbF}nZka2nO z9Z9r$JM`||Bcd$BU7AD?bVLk%KPrwWk?KIT3?q{a=n@Cvn1n=|iUu&ov`AZ^Q?lvp z?d#;Z1Pv@z6~{pjF~fmKECb@PZ+JKfR`ub#n2XnlG^77inCh&;jvb zJ(>wTz#bioA~0CC>iYf*&yB8dxfY@Xl5oSx1P1myVAVl)JTp10iGmUtAik$&L_ioG zHw!M@7@OvO9rhHYgV8`2<1wwL+lD=&ac8UsR7BVV=Yte@I%y`ifQu)QWC)k8uB4=7 z>Aw&<(y5nf(JMe6uVPlMRQGC-pPy2eg~cRMiAYF<>Z>9XZN6g2AsMr;kxJT0`qD&q z_}9<7U~ZztyfG;hy?0_senie&9q1@U#b4ASsKLo5OEk72&ks@{7tOQ{i`sUUHuJJP z8{j;6PiJKci0Lq_`CeJMM&(&DO5O|=bMw9f?obWI!5&zTw6}?=3uAZgGA1$~6!oN| zh9U0IZhtf=LAe25vat|pc1;YT`us0*;ij%7`z)RzdGu2MEGvafw+smGj0NWv2qp zn(&k~CRBwk7LD&$Hved+dMn2xWjd>{y{QZS+4~chX^{qDA2e1d!oxO&wc?Sh7{qgC zu*xC#7{B1){xcmZC-+hA0mb2IOMjYm#b2zIl{WaY<80%7nSEQt%Zvh!Fjq15HaUth z6zbbrvid4Y=Uljijx!{mh^3BJRSRxpd%f6Ppco?1mk@Tv-MqO9&^1&d#Eum?EdypI_Q?kDR4n3I3y%Zmv|GB|t1PWXcUP^3U*Fbi zI9oA~R~P-bYSgnP_`2rlwj2?CQ<1mnToaAC0-M-g+tOIyzO4yh9`qcA&BLfva>k-5 z$GY(kBO@yKF>3{3y={9o?`GQWpTGGj+E&wpCp`ac%U?#@)TWB|RF(`LxzZWDU4MQw zS;x-ELf>~4+qsh&naln2^77!VAt+^#+Q++lcXp)*UVt4Lk1443;;YEo-e6I3NTlA< z`bzHB%!>GwkJ(p`^3D!_(&SjGeI+OR*43lAy#b=`9u-Yev6vXSxLCM6)Pp91L&AZU z_`0ngup#ccqKiYa>7n-j;M2qir`S|eMDSoir^)%3O-~P`c1QDmH(Gew%@n1yY?zeNar>QDxa zUsy-#ewx}UbS&+*566(*qZPBWzNQm*z6Y1h*VH3dWrY7`wNx<682RSgPIWe~3u;@EZZ!UrjHC>kcH0Gq?g!8fS z!no+p=N&vRlVe9@m#Dw*<_a!R6~7T}oByNlhE{{JUqZiG*RI+7Nx(?s!wS9|i6MJ$ zz1{v*bEV3*jw=pMNY*vg5L|?LesZQJ3)sEXhkP(uF^HrDSy+y}HjH&y-tJSYc*AR( zrXXBq^zFRtY332`rm8K%N4T}mPVxS}>e!V?Cow`5=u}r zlxX945icn81>5VN@QBdn3Er%+8sQg~EH{U0H$&}9dfq|lpSoX2)lVC6;&no1RfIXyzHbuxw$VsP&cBCyu<*g< zhd~+1@A#ImWe4fxUH%)6T3p|M$bu_PdIm4CgJiZwxkzen=i}n9g8hOIjt!aRQ|} zJ-9@1v$U6b_nu9C$00i5V^nH%xQoA#H`0mAf3Rp{US5UKE8}}@n|h3R+edkyRXiMc zaK7(TbWcM&*5;($IF9T{={C?PZ5`LILvN9Ku=Hqw1z|=Bl2G#Mqt1HR=3g~+QK;$= z_gvtxW7<`tZ+ShM@5ik@wcfGm=n%7P$LjQf1F4F<_C8AW=T(O`XPqfMos3qij~syjs9njWV}p1WiZChaQbkHY~COY(1d$Qs6IDNcFc4WU-YUx zBjK{0fj5ehd3_irt`}NYs``Dq!(DF2;rZb=liz%~>A3V#^a61@`_|wZ%nr@)0uxu2 z%&3C$3O=2wxht9jC4>FHh`;(qsBE{?VeCOAqBrf zd#61$^#f@_r$yF!IQnQ`DdW76c+4a4L-~2>B-x)6mf3(a)fqm}96w9k0;-$V^K?*O<1^qM~o7&CI;7&V|>BeAw?=xT`;g|JQ zg`f}Q02$9k+?(*GEi;9NFRspwadQih@GEy~MosT@iTZZo=9DQx7Ach%~i+mjh!K&sF<0>-MYqthmap zC?Xbec;(&$`;Gqg<()v;f+BgDbE13qPE_PgbdTl;CfO#ACrp}5X1BD;^lRr0haq$9 znxC2fR8$!*U&P$na*|paaF&73msdS%;a!6Xo@R`;x#s;%dFRXBqoR9KwPP*x1DhxO zeVc>Qx@~^tG!v?iEQk`c6dUIW=wqfwCpj2jsh)QC@YK+k`*68Ge%h7ozFq8l-M=bJ z^+vdX_*sogc&OoApQbZX)KMtQx^5WGp7NF%DGjl&Wk`14J6(%MtMJt63F2#iPBU|J zot`Q9!*ep=B{H2m*^F$h(b)}T&h^kotmW7GeVJ&J0N13h&BIQI z%DZeK{Ah6N+_tq06DRbglC;42R+~dyk1#(r4|uKoB$9DUIbyPQeQ$yN!3~;4_nIfV z>oT(( zQL4*9W@c9<)@X#~AqT0qh*fL$s?AcO+e6O%sI>ddB{c5X63o}^lIYz38f_#RoIQYs zGMK1B77P`j%b{n&=*J*GZPeS`wtd<3m%?s)QM>EjMshFiR&JMSuIQ=TC7;b%;m=>T zRo>a$rLsTRKi7k&u`aT%J!rb&fZ6)|-G^pB&PSRKx2qpHa(8OWfkVRKaq%kg$;>LP z69ugxf7v0p>xK(YC8VZy_3E0&AX5cO+L;Juzy3+j>CI&`OUuNA>6%V2gWG*Mosr-) zI(t-o0PyRMs(83qdRTjI2j&R(=bctOIqf0^REwH7=I@JX&2V#q`E4aKWtw3a{BeeVyS_YC#f(g(d?TDJ_Fnc>OKg zXWA#bk;&CSd1hc&3D8NzWA-ET1KeO#>kAfseCzgl$<`RP{Ww0G)CG)yLkWjwC#o@S z)sj6SM?!Y*LYJ*%A5OH(ErU`e1PsJT*hOmR+MA&-@;zh%#&{|WW>8QN9Tmx?ha-$9 z6%J5XasTU>_uNC)9;3md=-DC+!~L^@NF(T|cy84Q5)3y-BncwRG4z(|iwSXTHfw?c zmv23-{9a0@((*5#!*y0k6n?nn_HJWG=}1?F2=vuh=j36patiauCo!{`7u6zHT!8o? zRvBIDZk5W30zIhjgrQljntM$5X0O80vS6Pp^%Kjn)9Xi7R>FDg%mR^e#Zi_G_nrql ztTM_D(FOYP<-|I zU63YJgO6AX^7SUyfyd5h&)F#5z0&aGk7%-Syo^&48~Jh09toj;qSm!!r@bff~Wb7%qZumMvs2%KJNq(aJc2(T$dx6ZtJ z23t~QjmJcqWPd^$@AwDSb$yA`SfPO+x_?Qd>9xfKfF=9kc3B!T5A?L_MrP$e0|{53 zJV|siPs}Ft>qG&s#tDj@CEqpe;?4i(6+;=;-S5aZuLl zrIc`LsRkBX2$>7oNAm_!6>%R$MgjVcWeD$mPkT#pgZ>exw(yW*aW6=x-9Mo}MNzjH zsQ6WId1;g&i>}~WmIbF_GXd@i3 zQW>rN>KYrZpO3S%v*#e{8GW+#(@uC-#Qka50Rq%Klbd*aYlEt)s!xquw+M#`KEJw=)U0;l$F!vugl9pc#oG-6mAF3f~vZ@!B~0vH_CKd7|!UJo12fM zh0i6Zu;%xBBRnsV)p!8#S%Y?)|I6u20Dc1)%N!s$e?AnJ0<<3b{ni$Vv#(On^)Puc zg>r1~Z{i5`jg8ScInIxsWu&J^WM*dm=_AXuDsg9QP2w)CkVps{mEKvwNi*fX2$m&> z((kVtL6k9t=2f}BoCdI6cqCLx3|;HbM4qDIeqM&rk;3#+6%4S0*^LR5dC9JGz{qUz zuP8NMV}N#k*J&c{*{=F{alhfGE<@X9vuI=ZgEYaiaRlv!MbSaUx!wW)U#5%=VE|2L zoo7Ehv%{}-(eMBLE|ZuNMc}%l(dvjE+|{Rk+b(z4bAHmZ26j`zXgI`KhMoc8(P1vU zUAB_=-`45pS8Y+0)ev5oZbz{2LU^dJ4?B}^5QgPwi9)ZHQ8*3KbFIQd4c;E^CXANT ztTz?)>mIbH8ejG!Zh+0;0RoMN-4KY{;qrRW*QXR1>L~oHIT_1VeS3%YJM7-An|9G} zzrTdFC4<_^j!a|~x!ZYg(oaM6N>(Q5S{I0+vsozwEVZv78k}qu!9|->L+Rez+9=d zMI-RlDuc122%0WYqx7lwhvb8>!$CzQ=XaehW6!!{j~83OK?U`MGRv&CiReQpPw$SrZE0*_YgJ{Bec^`YR za7l@Y`aQ`ivFYuj4h|eGx~wB8MLj%vJV&oR;T?XJ?Y#?bx~XFY>uaCuO#j|W{|#$> z{wC=E)i&|@%R2fQOV~nHbuBEqKg~u}=D!=(&dlc?>8rPRL z&ht@@an!^2q$HQFO*tN=|M7{8<9scD^5!7_r$c6E^n;@O5Aa0FcGX4XWV-r`t}ZKY z@YA-b5YgT>f3;~!F+9%kEPZAHJ-%;$Y6bs^i|HAeg=4Qy40_dNCM(^}T&JQ_ zbN-IX(b`9Ym+_P8k>*9t0}{8R6Ehq}mtoG{uQ-O28V%K0m*Y0m>l~DCH(ciNQ%H7p zk5yB^-_2tC!;BM;2D-kh3g+R#Y4mR`Uis=fk>QW78jWKL`}%9glk%rcBZDFyIB4T1 zm6aXxDotK=J=%0V{JI7{{>@fqXLNIpzuVBP5s`r*5SSdqxxFNwhVQt*UTcuVkQC#I zbbs{JuQqI=E}~$dg+dPNoASpOZ;Xhl3sY%UZ7;Rni1FhdjODS^`#=km#f}s&_F6o> zz7~zhoXnYnw=9w@74%!m#|9qI%zS+-Hr|o#eF9R6wend%*oA3@7~jyqjmu^@i1jul z@7m`$5DZ>R!BFtDl+R#C=Ap3Q-|g{q7%$^WHm2Wo&5<>;dLP&x-(xg$en5Nb4&4%C z1;5i0gL`TG%5pp96%Dogx`dLHM#~%0vjVUaDeRlft#ltL8QbtmVB2IH?~*HH368C+ zA6G4J57<&9C(oy=Y2vIuKX%6Tjo8Xu?1xwfO%bm?#6 zwXMBE-PWG>{F-hHm5-+RN9hShHx^s-nd{>UJe%nj|*?wRHar&Zni^6DcW$I9VfXj?;r_O#{Ts(B-deSA#WIHdotqrg zlFyzW`J&z%@Y9~{QN=p9K^pD;X{BK4mxngp1xgoHSSW``zZ!dR0BSik_1=d#uzt!+ z70>c}SRKHnMAc}tsj8+89eQtWuF#vNK3R7@zUpm{MrYabo@hNm>+awD9*+jd`MKYA zQC;R|5Z0OmRe}&U%#fjeA)y5dg(eIvWmB=y6{i|kF;m6YP~lSls(&f0>j3g zC{TbPBN{q{CRF=g7J1I2pBon-7d!N{x&yBI?(mt`p193ERcAif@uiMkR@W|gI3CHN zk({>I6)(&1-Zl}>r%ZnLlj=0#=9W#qI%39Wfz_e(&eu93lTU+1Mkj9@HH`$N2Uw`6 znk(0Y4K{t+>}rBX-~V_orkB(udHtkkf_Vc>YxjO#N$glJk+x?%oA2@bv_1UeZ`(&o zggkb^DZ>bHc@}S!kzLT}Z*TcMZ5(nZ;|zz(<2^Mn2`3H4wF{jbx@8_`SA3&Yrs#Ug za^}Iiw85+1$*fE!clYhTB|Srf-5CN0l6NFCJ3BrNcGz~_JrtFgC;;4NpI_~9_KLLy zW0}8L$@WW_>t%(Fn;A3(;r-Fvv7X)o%M}R{Cmv~NK zUvmXBYoX{w2ifES+A9ov7WcC|A+TU_QZi@zm3VY>ZcyE<_4z7J_cBFte4z2(l_3Z1j0EFHPZM<-nD__Y-^V|e;XC&&(yq-M zJY#8D#S{yBDOF3sub z0($psEi4oq9AXDM?1&s-+@Guth&zk7}M;}VeQ38VgWYeU+plI!DPGu;wJfr^4ToQPH&kn43s zplrC&VVErc`eh1Dj2qxIBGKnjpFVwUdunH9i%OX6cCpc(?TP_Wt?m9QM=i}=#ucV6 zEcbb^?`416qnFw5yz9O546HjX3`F8wKV=$etgY1X?}}IGm5rH^(ma)cf$N;|Gt*WN zztA#XIW%J#u;`+Tv?g$EiSunc-p82nN}WdVMfMo-1*&ji&e0SrDeILrI~L2 z?)a!9jEc0hTH*PeG1(z^GnWdvdhfQA%U1OU>aW?vd^Qva--^W2+4YLG1)A=;;|a>K zQNFgWlJWi-MqRc3qT=<&uN{T-)OjG*ob2VWHU1WiM14kCj^^P(&xWDH4; z5pmjczkRJedm}j2rLV3|bo}t7?BtQ&@aFpF_5xLT`!hNwRpouLs%anBNknF9*8G_K zTeDWn!1L|wZ5E@Q7e~`*vA{d&FR0}=G4I}T0vp9D7uDpk4bN$#P;jOVE%@+-@eM50 zYwXe1qX>7=o~wJ4{qw!`-fCh9ixsW%1gb<#BBEjs^&yccn34B0w@@vbn=lKM6u}2Z zhzLzzm)_MkS58>8&n0SJTsHM%4o4s@5xVJ8mWhM0iSdjYk6Y_gPj`&9<;E(`g<%%m z*ZD@P|3g60EEg>aNC-xOH^|T;ld(-*ee~vfGfWUmMgPL|kv@m(fhw`S(}S56<%hN~ zMhBYA!amqWRcdNZ1`O{m3IB5#8FJ`Ad9q!;bm}?!iI)U|}tLUSF>!%@(>Z_QCg&LCwA`&En>I zIf(+Xv5eRU4_IrASCZ0&l4Y?QWp;}dxI_+mZcS`GW{EyhQRj#2*th5fp1`^G1Vk5~ zx+sdoqz@2CqELRyFYzffQT4NTI$T^9X;yTcLx}(;d-WCk;)kF7{>JQEDb9=n*GS`r zgvPdQ3E1E9x4MZTzbkn0cDlXl{(@$uy(IlQ?Jnnwq}iWbjdm{?Nv{maY4_9W%FM*y z0w*{s@as-4MXvS=k+mjD1i9IB;9FYA$D@XAh85ol=0&tN1o_>TVRi?Kyv#IWGzSPN zw=lWP!X!obwmNfmWj2TorB*054riavctlHfs1`!z=Q*MU#^H4neSutAZDHL_X)mW| zN6i2*Mij_mc#aOYlS&=;AzIKOtHYYZXN8xp-I$0?T;yD5sc4Op6yKI?`NYxgNB}7+ z`}XxMTch;S<5BHSw|mc)(F(TuLGfF5gqvoYcFEk@c12T~?)iC1(-Ky${htJd{#T?5 z|DW=V|M~KN6ua}Z`CoO` zoOqJ|@$HRz?>*~I|FNC!KP2);d4~52;*z?C293^k{mf!1bl)09;{nUMd+|xRycALT za8iv(1YDBYH)}i(pFVw>>jzq?Qx@f(y#PDtn@8Yu^yq1V*5e--!e+G*vj8B<8QVjB zvkC?+H#2)^sHAQuYX^czRJ?j>lXyt7y|7U=kLcGmu&#j1rLBRE1&tr3hRNTfRT-#FrX*e<5fUiGm4O0>J`n@KLdUsqSAJ z-vIYKnxkjXlkB4`C&{pdlouI5PdQ(5f)&99UV=*h7JS@%81_fT$O)BXKK%B_t$J z?6r5Q=uR?t@0&X;bSWl#MyOCYZP3|R1dTpNg`&Vte_p1u4%EIyCeWXN0WYi&@{@iGr@n3x#8V%+E z-T6MPU-?p}Q5Ls9GC7}fQiLn=J?kadbD(l=)K|1|Qo+6AGv1@3(viwvH7+aClf>i4 zemI(ixv=p*jLhM-%xF{XNVR?Rv_320u&(7~x@f$B)3rc)B5M1A^aLm{nk8(FT+1Va zeCyZF3W?A{81pkw9^Qbo599leDs)ZwisycO82|Zlk9Rx|YtHmDiybaJ{!XVaSOt$` zoP7nq!9xOi*mzF`?{ie#S5cc@H>r@5fAVyBS43o?DeAz+r4RDd#lH)^vhaL=mhgQ0 zu`WwUS--zL!D=9Uq(5B?J3#!#87i^&wFH>n_LTPc(_NzwVfy~Twpz>apVI5aO&s2N zjVJxa8{kuaYe}s}%RQ_3bw>DD#n78!zh3%cy{wBpm0GRZa*gwl1yK5n;zC~Y3p#nOOmKG56|D0i z9@D)!Z?E&!f{#w2elJKh#DZvr+N%jh;&xyuXi5{+V^2U-u?sthNd`&TZ?99$l9p!> zc#9@lVV#(I;+LOzqv+0F2_pe`2P$w?R^fPJe(zE1a`;4sgT7Yu)~(26t~S}Qh&Ph; zo3^i(Sja-T6o5YUH#bX9sCTjSMZvc@wE7X5p66t&mifK7GE`bZex|8r1Vsb_*d^co zylo`ud;wpiN^Cg~&B$E2r425CfQ$z{3sJbL00NXf(R#jcG<1{4$2U1>a86+ZFBcV_ zSeJJi)-5P(*T{%a?Whp7YE#%n1&W%fD8U+I7V5ZiD6Ycbq;~S+P}ZNpiJcpNwLT~$ zwC%yRd#bE#8T5e{l{`|+sr`T*u0H@QlaZ0Zk#jykAjKPPHD$23Zxri}i%%-o?U-)h zWVpJzG6TddkO#HUpmUZ{WHQ^QSyT=MLLe37!5DHvMK{`;owbkZAVMIUEyx5ikDu1S zmOoK6InX46LR&dX)RmCj6L7S_>}yf-v9f;$Y6JYZ!mze z3#w4ABe+bb!4HUrLNM#Jv(KHxc(G=p`Vp#0J|A~zl1&j;x3siOLiJ}8Dj$;XZi;}^ zFv|(}p%NbAAyke6ZMhV5{a}??wZRyC4=F8&R`N+e0@YMOdU4xB6l4TF)Km;3b8;l1 zAgsE$M(&fkqh{8Z@QJ1C~QSsV}|5%Cpf6M42F{zneEw)Tiths(unbt7+XQ#{z zb49x*(AmLU^<})KhRnxf8?LNAI(+`N5^`P*X{+xSB06y&jy19&B}Lghgqv8F)z-0p zduQ4*>u7AIIAzZQ1|jOIQ4w8D+Gc_Cded7b3n}3>f0iW0+MSC{QV1ghrei!_7aMEV zcXtRclZxdaUsCK~oAmg;t5HbV6T+m#2&Xc49dCWBd1|38@cm!QyG9gmvsd4{8x*xA z7F|j;{RkLk;Wc!m?)4%Bz5#BLuzP#zIBQ#0)A|>*CCVdj(BS;Vi3PYt5dauq80jjJ zuy&cfD-~E<|FM&Qf=(8SF#ifVNj~@MsRdSrnpS_lGmRNIk5+Zr%~&oAjTnTJ97$37 z@$oQhfYi1y}#3g?Y%KfyWaYMZ`I(qwsnvTw zf8XKa^5`hdWDIKl@psMWKmmLJm`S$qFH&EyhI7wlv40MaXq{!f8D1+azLk?<-*+`4 z^L%o8Wssk3&TLR)Kt&h*9e7*qPWv+(uB>VK(?CS3@Dy~+4bi+II7Ha4+ePz~UrTeX zu$@V>CciS^mfpFc7XTW9C2bymo*WmSZa#mc<6V2eQ+-E9PNEngAyufhT9z@>LF35e zQmmD+GtrP6Ib3d;Xx3^R5RlY?wCzxGZmv1Y-QktWe+nNNFIpJN;NzI2CIIRPJkyXl z=ZOcQh~*>l$`!y#AyIP&BTs%z5%~1@mw<)Gch&^=2XrLb=C|L?5A}Yt(Dw7+y00qLuC+RIU%Ff>5h> z?w6&`6}s)rFj?2A$B%bGuvA0Q0rs7^<`3^9sOE(B8K&^Z?QKZZCHg3_mvRs`#BaW( zG=%m<%76u9)yl;h^;8FU+y8(zOI1tP>D}4pz55678IHKSyMuZXg2^W62}VTx=G#BP z1HiZt3^LQ`P)7xD;)pjwJg-2A&oUmpD5K1u7!Jg(836T-&WzmrE>R>XNCSIRWAJBt zTd1#o%xpG~_f?1lnx@UWjP$Imp0St8H5{6HcR@+*gx*RCN;P70b;5hRvaxU?BLw8XdT+*d zF%&umup^s6!-*0ov0lOOdffc@J!dAmMO0#mgtoB~z9iwW0XIcA^r@MSdF&;=e=6TC zcAlzXw46;lx>~aHjtodJ6pK()iz^a>`B;qO5vgm0{y+`p!Zbpkz^W~-19!oH>O?R_ z1dTMJPlA6}siAAB-W6f55glTykd)gOhl(XwhpU}ol@`DG+G<#n>gE%yL!=*~ztP!< zOJoaCeHU2nmC~Nz*SDku(Rc`FM9YR0_G(dR? zN*<=#LxnGTkDvul6OGw=8K-ju_aLIzl>SP;lz3oncuQ+Ay?wB@pU1I7IJE5VoiFIu zpBl9G3Z|c10QeK8riX9Ai;)fhI9~938b>l3(L2psDvJM zMC8Vrk3hbN^1`B|KKz={x^`fL(RdAM_A5yb8ZFgW$9j5CpFV9YFhPIQ;P1cC{{@Z< zwLr3|D^c?MV_>saXq$%mWx?=4^3A2MaUp_d{!|p*alL4^OUM}n*EB43`EmIQ2Gfeg zoKtAsQ;_rM#nQy7Ekvy+`yq9ueWs&Z=Ra(9MwyhjPpF3%HrvGfjb;#f)(S81WYJkq z&ov+GrQ!T^qYo#s4C9!$s(ZYphYmA0IlaCRD1F{aF!%jKx3^!1mtqV;siL;FVC0~C zw@7$dxgVch8CQUs^a}mDpaB0>TV%4!8MsRLRWO)Y`CS72GDY1Vak|td;TI0LJT*f@ zdXY3G*+a|lV z7)uMeNQa>p3-`6TdaZu=$1z4~yXX5;yFa4#ETPMtn?y5>!Nh85{ru~%?&Ob+P~RxR zY^SQv7h-KxyT_q*_5--)#PjYX;P!3FjYg}tpRn$j()&%>5&@^u+@ZfA?PPM&`#1rV zkk2u|#?oEreE*ywH z4~}0q((IO)U7Gq1>h04FS=`RC=XN8Zv4c5&50*EN_Q}G@$kzxeMbqkZhpkTUZV_#dkY|UpPAkk*d*Bi_ zU0)d_#z&sgv$sTpWx^Y}M8cRWF0*)naJ7BTJ%Evr* z=4k&sg{;iiM@fpu+O?&H_siQ#CaOh;=F(VDb0*dy--=tIM z=FE%$kD8uL1$fXTN#NH>-$AoL4j6%k^jD#!>rF%M0#VR|T}-|AuO<(RAHEEhaUR*Y zrKO?4AAQocPZde@=C{I|B><*3J+aYY<*LfEe&_)`#qPN_^hs1@G-ne&O@k*Y5dE{E zJy-FUF$0JaWNo<+Y$es&b%HT`&Zk7linP)c2Q+^VgbQN?BaLEb@=2i~NZ=Xs%_vTm5`N^#2l z3x}zo@xzPIimG}O$c@+^7we4fXawOpopdq7NZe`spU|5%gkmR}C6^H!DE!k{Gy?Z} z?*rS@oj$xJ2%ujk3)bQpJq^A(_EzFHrZ*Zu))5sIMHz>+y`(W_8o|UUSaN-66U@BrDtA3I!W?vN z%xm|qk6V z?Z>AMtd@Fz|1223_178ODHQkv*f4m!-WGv!H9`Y^z3iQc2M?{5`}mqS>MxmUU@#kw zfW9q{%o_4x!5P_-^nnrmUq%**0+a$5==I1ck8!&&@;8kbw zx3REyt}FUj(p+?8nUn0_gF2`PX%Nb>=LSIe(&e>e^LRDz#guEu1DA#M`XU~OU(xGkIcNBh)f~b;%ZJ|>MDvX;OB?Mu~bkH_Re)R!u9nhUS|Q~ob85JpdlTajco_6JtkbtYP5{<=pBH`bHdeLl>x)P z-h1Ej)aBT9!H50cbEc)k_LrsWkf~c$z%2o(Xb2!S7D1#Cd%G!UScwQ1?-Ku?L=-fM zX?dkUi5TC&AI0&0dOtgUAx=Br$p(+xB)j{|8xF@$JU;k`C!mMzSxOn|V`NYa3W zcz&AlIC$z&zT55R@Vsy?Xrw8-g8#MpAIZsoRTg+yh1bvELwr;eH!L}-NMu8?aF?xf z!RcXOy>v&k=^=3OBN!N1-c<2&xjVQ>N${_evp-SLP9f1I2)0N-(&*70B{i7-l7LBQ zMLY)|%VU#Do-Ro2Z^X--wKv?R%TLql`5Z;inl~}zpZrONL2(3xf_4xf754R~J_Q6B zfJmOIxcxHouuMm#w@bQXs(P7+F`HL)lA1?i_)|bjf3sK-!Kw?^Vq(+8#cUwLBqGoU zH@C`v;y8`ub7UCa6gjga6+WDBFt&3+jK)u?iZfKzM`6K+Ru4J0KNAJxXLru&3|X#05L9 za(J)gw{N0t5@hlu5?sOE!n3WFZBGvgV@l^awB~0Yy`U&9A3*@a!otF1uHUf7aDLpd zF>L1dtMVa4Z=%QdsbhY|lhh=JyBzTXOH#ui47@nZt?QcKth*H@d&m>%*rZnz@%%K4bRMBIO5fFMJbu4O%u951(H%CW#-oz2y_VQQ zTh#@^=&K0a?g!^fe`9+smOmOgTuJq5P7BR-TxF1~-l6*=<{J$VAU6hOxU^;Gz_G>9 zW|oeRITrvUV&8hbBr1O^Noc)Xj`{KV=+WlbPmXmsRMPi1@V%Xe5 zkd*W++4^x0GXlN@Q>BOGnD8`*CNIz;*%cAVXvh3q2kp$WL0#(10fcb05mQA&R6@eq z){*W0D}oY|PlMpk7*RQ%{`9~)eP2#VD27;Kp6-trrx@EeOg)d>&vy_=2z z#^Ya69+j&E{Oc>(qXj80khD32A4Z)kZ7eH>=hQ zleDerwN1Zk>+mg?#F+w`#@O)+Kb8oYpu92#ZdwS`)WU=w&;pyFmm^GJ8eJU9Ml6)j7eFlk0eVs&Vf&2Lh} zEr_HDMuBO~>_K;Stg8or@BS_fd5tYI0-FM<>4LEa)9RkQ;}8jGI0-I@XMX4+YAvUb z-`S0E+qP~!i);uby7}D6_~hgoSl)`D`;q3Rc}RVONhU~C6rcRDD^Dp6qC7qoMA}Z2 zvox>>`yi+M0T@kH{7?(@?VQdfpLE#vG(Mt<6o}_P;*d--Bqk@B@gq>st9MT!0%_;G zc#x+oOP7ZEG=_o}JqU@ZQQFB(Fp@OusQhpu5lf~f$sy1!nZWhaxuvCjBB=2b_MS>2wkJa_+h5R)5c2?vj(5>VO&%6q@0OW* zK;%3^8`ab-47jdmZHIq?FoNVMB#L4F{{Eb0kQAn3MI-<>IkyJi49B1YSUG!9ek0ra z5Q>L>U#1TlHstN)geERoBeRo)k3^Qo_R>R0F@AOjD*^2sZY9}Rp}2sSeQNf!qRfU? zZj0OQc=#2^4{graD@m(LE5rbl_WNR6I9bq`=-fKIZR=F2l%{AwD+F`Iy+$p0(qTC3 zaeNL%=E$_I2jw&^M8(9q@I8CNV`wThA)5godzSSIAshM-H$ydH1t$9^sYPs|0jU1J zW{<tIH|KngbPP%8eGJ(VBI5`-sR6)=^%DEYhnesOE-Ya5oH`ZGk=+mzN5 zU+sx2Jc3|}P&bm)(K<^BLx!t+K`YiD5iq|9hYlWdUBq@hc>&U2#8w<72}FW~YlIsR z%il5NdLE3|>|S43-c5)Lkm+NCyV>?!CT{2bmAe6YP?U8;FgK?8xcChUpeO}pVJTqE zi7&yHwP#%ltqG{mS91mEjpSM%7#N^^f>qeogzyb3Zc(!hn^#rwwo40O`+^PpKLFk7 g

FDg<7!(FV( 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 diff --git a/plots/class_4_top15.png b/plots/class_4_top15.png index c25cec84318b72bfca22cd0a43174d4a8e8f6ab5..8d7e4228c45ead370f6160e0ecc1e86e821fca9e 100644 GIT binary patch literal 44842 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 Date: Mon, 29 Dec 2025 18:49:05 +0000 Subject: [PATCH 34/35] fix gcn --- .../recomm_system/experiment_results copy.csv | 243 ++++++++++++ examples/recomm_system/experiment_results.csv | 360 +++++++++--------- examples/recomm_system/graph_nn.py | 230 +++++------ examples/recomm_system/test.ipynb | 223 +++++++++-- 4 files changed, 723 insertions(+), 333 deletions(-) create mode 100644 examples/recomm_system/experiment_results copy.csv diff --git a/examples/recomm_system/experiment_results copy.csv b/examples/recomm_system/experiment_results copy.csv new file mode 100644 index 00000000..23d8efe7 --- /dev/null +++ b/examples/recomm_system/experiment_results copy.csv @@ -0,0 +1,243 @@ +Exp_id,Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,47.380565881729126,84.23497080802917 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.12741780281067,98.63387978142076 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1190.9095215797424,77.11748633879782 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,49.00558853149414,92.65027046203613 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.65191793441772,98.44262295081967 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1020.6083555221558,74.86338797814209 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,44.6860625743866,77.13114619255066 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.2872724533081,97.78688524590164 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1246.0178999900818,72.40437158469946 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,82.58793544769287,88.46994638442993 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,137.15939092636108,94.39890710382514 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1317.742176771164,63.25136612021858 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,54.852065563201904,76.4207661151886 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,151.09674072265625,89.89071038251366 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1123.5956239700317,49.59016393442623 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,51.210848808288574,68.93442869186401 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.72992277145386,78.5792349726776 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1148.6567842960358,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,48.660605907440186,86.63934469223022 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.17098808288574,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1061.7185904979706,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,49.778627157211304,95.76502442359924 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.88378477096558,98.4153005464481 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1058.3029556274414,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,39.869826555252075,76.5573799610138 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.86488842964172,97.6775956284153 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1157.85533452034,72.40437158469946 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,39.27051615715027,80.21857738494873 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,137.07859206199646,94.42622950819673 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1060.4789934158325,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,41.18854546546936,78.032785654068 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.01649594306946,89.86338797814207 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1074.8029758930206,49.21448087431694 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.942272901535034,68.22404265403748 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.39786314964294,78.0327868852459 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1051.4041996002197,20.081967213114755 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,48.943641662597656,80.43715953826904 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,111.18853044509888,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1000.6668944358826,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,34.4648540019989,84.59016680717468 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.77461814880371,98.27868852459017 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1045.2479929924011,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,40.32768535614014,77.40437388420105 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.75347566604614,97.8415300546448 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1042.6038060188293,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,49.051427602767944,76.85792446136475 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,135.81657576560974,94.89071038251366 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1049.5465006828308,63.69535519125683 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,50.19066071510315,74.07103776931763 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.23873829841614,89.69945355191257 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1161.7163217067719,48.80464480874317 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.93249225616455,63.06011080741882 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,169.8643877506256,79.20765027322403 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,968.4304020404816,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,46.011924266815186,80.24590015411377 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,109.72403120994568,98.66120218579235 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1174.494342327118,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,41.743159532547,80.02732396125793 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.41021490097046,98.4153005464481 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1171.6064977645874,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,44.349541664123535,87.45901584625244 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.4791738986969,97.45901639344262 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,952.0120975971222,71.65300546448088 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,48.69317936897278,75.92896223068237 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.3904469013214,94.4535519125683 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,969.868058681488,64.00273224043715 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,44.044572591781616,70.8743155002594 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,149.6289074420929,89.8360655737705 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,953.6086061000824,50.10245901639344 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,44.549598932266235,61.284154653549194 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.53832936286926,79.53551912568307 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,972.7086639404297,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,47.114877223968506,81.69398903846741 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,109.53987145423889,98.68852459016394 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,957.2526223659515,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,37.89606070518494,85.65573692321777 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.25655388832092,98.30601092896175 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1173.4506571292877,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,47.68080997467041,83.36065411567688 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.15364933013916,97.8688524590164 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1153.5412156581879,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,41.10796904563904,83.41529965400696 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.6818916797638,95.0 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,967.7902429103851,63.25136612021858 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,36.63528251647949,82.81420469284058 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.54849863052368,89.31693989071037 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,965.3704278469086,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.28898596763611,64.61748480796814 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,169.49659419059753,79.97267759562841 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1158.38462972641,20.21857923497268 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,43.29892086982727,77.95081734657288 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.77093839645386,98.68852459016394 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.0426867008209,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,40.48178577423096,91.17486476898193 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.66628408432007,98.3879781420765 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1151.3295328617096,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,46.342252254486084,91.42076373100281 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.12805104255676,97.70491803278688 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,956.9201290607452,72.37021857923497 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,48.09459686279297,90.16393423080444 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.35990571975708,94.31693989071039 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,951.3514447212219,64.00273224043715 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,47.61181974411011,77.04917788505554 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,149.66685557365417,90.40983606557377 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1159.4669754505157,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.52361035346985,61.666667461395264 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45302724838257,79.09836065573771 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,942.1310601234436,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,42.33190155029297,80.79234957695007 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.67640900611877,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1151.425032377243,76.63934426229508 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,46.83778142929077,79.94535565376282 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.82480311393738,98.25136612021858 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,959.6910009384155,74.86338797814209 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,46.91451978683472,79.26229238510132 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.25436019897461,97.81420765027322 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.5784142017365,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,45.216925859451294,79.56284284591675 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.08299708366394,94.89071038251366 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,941.2294843196869,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,35.09868001937866,70.24590373039246 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.008531332016,89.97267759562841 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.8004837036133,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.60944890975952,60.76502799987793 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.61232328414917,78.52459016393442 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1174.2148485183716,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,44.02885293960571,86.72131299972534 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.33011960983276,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.813972711563,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,34.82557439804077,91.83059930801392 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.68903136253357,98.30601092896175 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1142.874398946762,74.86338797814209 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,38.12274146080017,84.09836292266846 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.88822174072266,97.89617486338797 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,958.9832980632782,72.60928961748634 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,47.38658022880554,83.63388180732727 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.52869582176208,95.0 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,982.7437946796417,64.00273224043715 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,50.3098578453064,78.49726676940918 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.58712220191956,90.10928961748634 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,952.3902399539948,48.97540983606557 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,47.68881940841675,67.54098534584045 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.5669903755188,78.44262295081967 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1160.643584728241,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,42.35506534576416,80.71038126945496 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.72827911376953,98.46994535519126 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1161.2603483200073,76.70765027322405 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,44.48380947113037,75.95628499984741 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.78427290916443,98.4153005464481 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1164.732885837555,74.93169398907104 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,41.45829200744629,88.27868700027466 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.14582562446594,97.62295081967213 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.4570569992065,72.40437158469946 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,44.6593804359436,75.7377028465271 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.09871077537537,94.72677595628414 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1170.4177556037903,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,41.33125162124634,78.38797569274902 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.5243456363678,89.61748633879782 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,940.6334030628204,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,43.79690456390381,63.387978076934814 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.47909784317017,77.34972677595628 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,951.3798985481262,20.116120218579233 +20250409090514,Graph NN,0.005,0,0,0,2000,CPU,44.20913028717041,94.4535493850708 +20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.41194748878479,98.82513661202185 +20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.4012093544006,76.74180327868852 +20250409090514,Graph NN,0.01,0,0,0,2000,CPU,43.56287693977356,77.86885499954224 +20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.86108899116516,98.25136612021858 +20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1165.0554220676422,74.55601092896174 +20250409090514,Graph NN,0.02,0,0,0,2000,CPU,43.18827676773071,90.76502919197083 +20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.40065360069275,97.6775956284153 +20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1142.509984254837,72.1311475409836 +20250409090514,Graph NN,0.05,0,0,0,2000,CPU,46.11475706100464,87.2950792312622 +20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.23513627052307,93.98907103825137 +20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1018.888409614563,64.1051912568306 +20250409090514,Graph NN,0.1,0,0,0,2000,CPU,46.72879457473755,72.92349934577942 +20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.53106451034546,89.75409836065575 +20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1152.1242747306824,49.62431693989071 +20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.78840351104736,61.72131299972534 +20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45607113838196,78.5792349726776 +20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1150.6887817382812,20.184426229508194 +,Graph NN,0.01,0,0,0,100,GPU,105.22724032402039,99.07103825136612 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.30437421798706,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.94404554367065,99.15300546448087 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,106.36529588699341,98.5792349726776 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,105.73539352416992,95.95628415300547 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.28051996231079,90.65573770491804 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,104.57090783119202,80.79234972677595 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.84101176261902,99.59016393442623 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.33427810668945,98.4153005464481 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,105.29664444923401,98.55191256830601 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,104.42256879806519,96.12021857923497 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.5591254234314,91.17486338797814 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,103.87886691093445,84.15300546448087 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,108.37157607078552,99.61748633879782 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,106.7497067451477,99.09836065573771 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,108.2449460029602,98.36065573770492 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,107.68048405647278,95.57377049180327 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,106.6329939365387,91.47540983606558 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.5293939113617,84.09836065573771 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,106.02579545974731,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,107.17805647850037,98.46994535519126 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,104.92045092582703,98.4153005464481 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.34843349456787,95.24590163934427 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,106.10412120819092,91.22950819672131 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.39587831497192,83.68852459016394 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.31673216819763,99.64480874316939 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,106.44842505455017,99.04371584699453 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,105.34441113471985,97.70491803278688 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.11384105682373,95.68306010928961 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,104.63398885726929,90.7103825136612 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,107.11718535423279,83.93442622950819 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,104.8668966293335,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.29218888282776,99.1256830601093 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,105.88010931015015,98.55191256830601 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,107.72886347770691,95.90163934426229 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.87288475036621,91.09289617486338 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,104.76583194732666,83.3879781420765 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,103.62620329856873,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.91338658332825,99.01639344262296 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,106.28621697425842,98.49726775956285 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.76134848594666,95.81967213114754 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,104.27628254890442,91.03825136612022 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,106.67031502723694,83.52459016393442 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.14721989631653,99.64480874316939 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.0157368183136,99.1256830601093 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,104.89587163925171,98.3879781420765 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,105.60598754882812,95.90163934426229 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.7902615070343,91.03825136612022 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,106.23296308517456,84.26229508196721 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,106.46581220626831,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,106.43900418281555,99.09836065573771 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,107.15450119972229,98.44262295081967 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.85507273674011,95.8743169398907 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,112.26786231994629,91.17486338797814 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.8468599319458,83.98907103825137 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,107.57627940177917,98.3879781420765 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.0660994052887,99.07103825136612 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,106.52923154830933,98.08743169398907 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.40064692497253,95.95628415300547 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,106.87861132621765,91.47540983606558 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.05328607559204,82.65027322404372 + diff --git a/examples/recomm_system/experiment_results.csv b/examples/recomm_system/experiment_results.csv index 45da5c4e..8bff5d38 100644 --- a/examples/recomm_system/experiment_results.csv +++ b/examples/recomm_system/experiment_results.csv @@ -1,181 +1,181 @@ Exp_id,Algorithm,Noise_Ratio,T,s,Max_Included_Literals,Epochs,Platform,Total_Time,Accuracy -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,47.380565881729126,84.23497080802917 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.12741780281067,98.63387978142076 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1190.9095215797424,77.11748633879782 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,49.00558853149414,92.65027046203613 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.65191793441772,98.44262295081967 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1020.6083555221558,74.86338797814209 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,44.6860625743866,77.13114619255066 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.2872724533081,97.78688524590164 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1246.0178999900818,72.40437158469946 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,82.58793544769287,88.46994638442993 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,137.15939092636108,94.39890710382514 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1317.742176771164,63.25136612021858 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,54.852065563201904,76.4207661151886 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,151.09674072265625,89.89071038251366 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1123.5956239700317,49.59016393442623 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,51.210848808288574,68.93442869186401 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.72992277145386,78.5792349726776 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1148.6567842960358,20.116120218579233 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,48.660605907440186,86.63934469223022 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.17098808288574,98.82513661202185 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1061.7185904979706,76.63934426229508 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,49.778627157211304,95.76502442359924 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.88378477096558,98.4153005464481 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1058.3029556274414,74.93169398907104 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,39.869826555252075,76.5573799610138 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.86488842964172,97.6775956284153 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1157.85533452034,72.40437158469946 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,39.27051615715027,80.21857738494873 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,137.07859206199646,94.42622950819673 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1060.4789934158325,64.1051912568306 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,41.18854546546936,78.032785654068 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.01649594306946,89.86338797814207 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1074.8029758930206,49.21448087431694 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.942272901535034,68.22404265403748 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.39786314964294,78.0327868852459 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1051.4041996002197,20.081967213114755 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,48.943641662597656,80.43715953826904 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,111.18853044509888,98.82513661202185 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1000.6668944358826,76.74180327868852 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,34.4648540019989,84.59016680717468 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.77461814880371,98.27868852459017 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1045.2479929924011,74.93169398907104 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,40.32768535614014,77.40437388420105 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.75347566604614,97.8415300546448 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1042.6038060188293,72.1311475409836 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,49.051427602767944,76.85792446136475 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,135.81657576560974,94.89071038251366 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1049.5465006828308,63.69535519125683 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,50.19066071510315,74.07103776931763 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.23873829841614,89.69945355191257 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1161.7163217067719,48.80464480874317 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.93249225616455,63.06011080741882 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,169.8643877506256,79.20765027322403 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,968.4304020404816,20.116120218579233 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,46.011924266815186,80.24590015411377 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,109.72403120994568,98.66120218579235 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1174.494342327118,76.74180327868852 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,41.743159532547,80.02732396125793 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.41021490097046,98.4153005464481 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1171.6064977645874,74.93169398907104 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,44.349541664123535,87.45901584625244 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.4791738986969,97.45901639344262 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,952.0120975971222,71.65300546448088 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,48.69317936897278,75.92896223068237 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.3904469013214,94.4535519125683 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,969.868058681488,64.00273224043715 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,44.044572591781616,70.8743155002594 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,149.6289074420929,89.8360655737705 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,953.6086061000824,50.10245901639344 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,44.549598932266235,61.284154653549194 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.53832936286926,79.53551912568307 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,972.7086639404297,20.116120218579233 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,47.114877223968506,81.69398903846741 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,109.53987145423889,98.68852459016394 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,957.2526223659515,76.63934426229508 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,37.89606070518494,85.65573692321777 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.25655388832092,98.30601092896175 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1173.4506571292877,74.93169398907104 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,47.68080997467041,83.36065411567688 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.15364933013916,97.8688524590164 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1153.5412156581879,72.1311475409836 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,41.10796904563904,83.41529965400696 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.6818916797638,95.0 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,967.7902429103851,63.25136612021858 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,36.63528251647949,82.81420469284058 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.54849863052368,89.31693989071037 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,965.3704278469086,49.62431693989071 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.28898596763611,64.61748480796814 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,169.49659419059753,79.97267759562841 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1158.38462972641,20.21857923497268 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,43.29892086982727,77.95081734657288 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.77093839645386,98.68852459016394 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.0426867008209,76.63934426229508 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,40.48178577423096,91.17486476898193 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,114.66628408432007,98.3879781420765 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1151.3295328617096,74.93169398907104 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,46.342252254486084,91.42076373100281 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.12805104255676,97.70491803278688 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,956.9201290607452,72.37021857923497 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,48.09459686279297,90.16393423080444 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.35990571975708,94.31693989071039 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,951.3514447212219,64.00273224043715 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,47.61181974411011,77.04917788505554 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,149.66685557365417,90.40983606557377 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1159.4669754505157,49.62431693989071 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.52361035346985,61.666667461395264 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45302724838257,79.09836065573771 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,942.1310601234436,20.116120218579233 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,42.33190155029297,80.79234957695007 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.67640900611877,98.82513661202185 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1151.425032377243,76.63934426229508 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,46.83778142929077,79.94535565376282 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.82480311393738,98.25136612021858 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,959.6910009384155,74.86338797814209 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,46.91451978683472,79.26229238510132 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.25436019897461,97.81420765027322 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.5784142017365,72.1311475409836 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,45.216925859451294,79.56284284591675 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.08299708366394,94.89071038251366 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,941.2294843196869,64.1051912568306 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,35.09868001937866,70.24590373039246 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.008531332016,89.97267759562841 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.8004837036133,49.62431693989071 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,40.60944890975952,60.76502799987793 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.61232328414917,78.52459016393442 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1174.2148485183716,20.116120218579233 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,44.02885293960571,86.72131299972534 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.33011960983276,98.82513661202185 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.813972711563,76.74180327868852 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,34.82557439804077,91.83059930801392 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.68903136253357,98.30601092896175 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1142.874398946762,74.86338797814209 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,38.12274146080017,84.09836292266846 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,120.88822174072266,97.89617486338797 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,958.9832980632782,72.60928961748634 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,47.38658022880554,83.63388180732727 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.52869582176208,95.0 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,982.7437946796417,64.00273224043715 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,50.3098578453064,78.49726676940918 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.58712220191956,90.10928961748634 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,952.3902399539948,48.97540983606557 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,47.68881940841675,67.54098534584045 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.5669903755188,78.44262295081967 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1160.643584728241,20.116120218579233 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,42.35506534576416,80.71038126945496 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.72827911376953,98.46994535519126 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1161.2603483200073,76.70765027322405 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,44.48380947113037,75.95628499984741 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.78427290916443,98.4153005464481 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1164.732885837555,74.93169398907104 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,41.45829200744629,88.27868700027466 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.14582562446594,97.62295081967213 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.4570569992065,72.40437158469946 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,44.6593804359436,75.7377028465271 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.09871077537537,94.72677595628414 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1170.4177556037903,64.1051912568306 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,41.33125162124634,78.38797569274902 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.5243456363678,89.61748633879782 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,940.6334030628204,49.62431693989071 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,43.79690456390381,63.387978076934814 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.47909784317017,77.34972677595628 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,951.3798985481262,20.116120218579233 -20250409090514,Graph NN,0.005,0,0,0,2000,CPU,44.20913028717041,94.4535493850708 -20250409090514,GraphTM,0.005,10000,10.0,23,10,CUDA,110.41194748878479,98.82513661202185 -20250409090514,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.4012093544006,76.74180327868852 -20250409090514,Graph NN,0.01,0,0,0,2000,CPU,43.56287693977356,77.86885499954224 -20250409090514,GraphTM,0.01,10000,10.0,23,10,CUDA,113.86108899116516,98.25136612021858 -20250409090514,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1165.0554220676422,74.55601092896174 -20250409090514,Graph NN,0.02,0,0,0,2000,CPU,43.18827676773071,90.76502919197083 -20250409090514,GraphTM,0.02,10000,10.0,23,10,CUDA,121.40065360069275,97.6775956284153 -20250409090514,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1142.509984254837,72.1311475409836 -20250409090514,Graph NN,0.05,0,0,0,2000,CPU,46.11475706100464,87.2950792312622 -20250409090514,GraphTM,0.05,10000,10.0,23,10,CUDA,136.23513627052307,93.98907103825137 -20250409090514,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1018.888409614563,64.1051912568306 -20250409090514,Graph NN,0.1,0,0,0,2000,CPU,46.72879457473755,72.92349934577942 -20250409090514,GraphTM,0.1,10000,10.0,23,10,CUDA,150.53106451034546,89.75409836065575 -20250409090514,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1152.1242747306824,49.62431693989071 -20250409090514,Graph NN,0.2,0,0,0,2000,CPU,42.78840351104736,61.72131299972534 -20250409090514,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45607113838196,78.5792349726776 -20250409090514,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1150.6887817382812,20.184426229508194 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,110.12741780281068,98.63387978142076 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1190.9095215797424,77.11748633879782 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,113.65191793441772,98.44262295081968 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1020.6083555221558,74.86338797814209 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,121.2872724533081,97.78688524590164 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1246.0178999900818,72.40437158469946 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,137.15939092636108,94.39890710382514 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1317.742176771164,63.25136612021858 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,151.09674072265625,89.89071038251366 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1123.5956239700315,49.59016393442623 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.72992277145386,78.5792349726776 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1148.6567842960358,20.11612021857924 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,110.17098808288574,98.82513661202184 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1061.7185904979706,76.63934426229508 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,113.88378477096558,98.4153005464481 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1058.3029556274414,74.93169398907104 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,120.86488842964172,97.6775956284153 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1157.85533452034,72.40437158469946 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,137.07859206199646,94.42622950819673 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1060.4789934158323,64.1051912568306 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,150.01649594306946,89.86338797814207 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1074.8029758930206,49.21448087431694 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.39786314964294,78.0327868852459 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1051.4041996002195,20.081967213114755 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,111.18853044509888,98.82513661202184 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1000.6668944358826,76.74180327868852 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,113.77461814880373,98.27868852459017 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1045.2479929924011,74.93169398907104 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,120.75347566604614,97.8415300546448 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1042.6038060188291,72.1311475409836 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,135.81657576560974,94.89071038251366 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1049.5465006828308,63.69535519125683 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,150.23873829841614,89.69945355191257 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1161.716321706772,48.80464480874317 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,169.8643877506256,79.20765027322403 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,968.4304020404816,20.11612021857924 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,109.72403120994568,98.66120218579236 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1174.494342327118,76.74180327868852 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,114.41021490097046,98.4153005464481 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1171.6064977645874,74.93169398907104 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,121.4791738986969,97.45901639344262 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,952.0120975971222,71.65300546448088 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,136.3904469013214,94.4535519125683 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,969.868058681488,64.00273224043715 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,149.6289074420929,89.8360655737705 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,953.6086061000824,50.10245901639344 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.53832936286926,79.53551912568307 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,972.7086639404296,20.11612021857924 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,109.53987145423888,98.68852459016394 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,957.2526223659517,76.63934426229508 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,114.25655388832092,98.30601092896175 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1173.4506571292875,74.93169398907104 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,120.15364933013916,97.8688524590164 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1153.541215658188,72.1311475409836 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,136.6818916797638,95.0 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,967.7902429103852,63.25136612021858 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,150.54849863052368,89.31693989071037 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,965.3704278469086,49.62431693989071 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,169.49659419059753,79.97267759562841 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1158.38462972641,20.21857923497268 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,110.77093839645386,98.68852459016394 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,944.0426867008208,76.63934426229508 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,114.66628408432008,98.3879781420765 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1151.3295328617096,74.93169398907104 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,121.12805104255676,97.70491803278688 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,956.9201290607452,72.37021857923497 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,136.35990571975708,94.3169398907104 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,951.351444721222,64.00273224043715 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,149.66685557365415,90.40983606557376 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1159.4669754505155,49.62431693989071 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45302724838257,79.09836065573771 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,942.1310601234436,20.11612021857924 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,110.67640900611876,98.82513661202184 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1151.425032377243,76.63934426229508 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,113.82480311393738,98.25136612021858 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,959.6910009384156,74.86338797814209 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,121.2543601989746,97.81420765027322 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,973.5784142017365,72.1311475409836 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,136.08299708366394,94.89071038251366 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,941.2294843196868,64.1051912568306 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,150.008531332016,89.97267759562841 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,967.8004837036132,49.62431693989071 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.61232328414917,78.52459016393442 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1174.2148485183716,20.11612021857924 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,110.33011960983276,98.82513661202184 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.813972711563,76.74180327868852 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,113.68903136253356,98.30601092896175 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1142.874398946762,74.86338797814209 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,120.88822174072266,97.89617486338796 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,958.9832980632782,72.60928961748634 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,136.52869582176208,95.0 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,982.7437946796416,64.00273224043715 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,150.58712220191956,90.10928961748634 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,952.3902399539948,48.97540983606557 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.5669903755188,78.44262295081967 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1160.643584728241,20.11612021857924 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,110.72827911376952,98.46994535519126 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1161.260348320007,76.70765027322405 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,113.78427290916444,98.4153005464481 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1164.732885837555,74.93169398907104 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,121.14582562446594,97.62295081967213 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,971.4570569992064,72.40437158469946 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,136.09871077537537,94.72677595628414 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1170.4177556037905,64.1051912568306 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,150.5243456363678,89.61748633879782 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,940.6334030628204,49.62431693989071 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.47909784317017,77.34972677595628 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,951.3798985481262,20.11612021857924 +20251229141357,GraphTM,0.005,10000,10.0,23,10,CUDA,110.4119474887848,98.82513661202184 +20251229141357,TMClassifier,0.005,10000,10.0,32,10,CPU_sparse,1164.4012093544006,76.74180327868852 +20251229141357,GraphTM,0.01,10000,10.0,23,10,CUDA,113.86108899116516,98.25136612021858 +20251229141357,TMClassifier,0.01,10000,10.0,32,10,CPU_sparse,1165.0554220676422,74.55601092896174 +20251229141357,GraphTM,0.02,10000,10.0,23,10,CUDA,121.40065360069276,97.6775956284153 +20251229141357,TMClassifier,0.02,10000,10.0,32,10,CPU_sparse,1142.509984254837,72.1311475409836 +20251229141357,GraphTM,0.05,10000,10.0,23,10,CUDA,136.23513627052307,93.98907103825135 +20251229141357,TMClassifier,0.05,10000,10.0,32,10,CPU_sparse,1018.888409614563,64.1051912568306 +20251229141357,GraphTM,0.1,10000,10.0,23,10,CUDA,150.53106451034546,89.75409836065575 +20251229141357,TMClassifier,0.1,10000,10.0,32,10,CPU_sparse,1152.1242747306824,49.62431693989071 +20251229141357,GraphTM,0.2,10000,10.0,23,10,CUDA,170.45607113838196,78.5792349726776 +20251229141357,TMClassifier,0.2,10000,10.0,32,10,CPU_sparse,1150.6887817382812,20.1844262295082 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.30437421798706,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.94404554367065,99.15300546448087 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,106.36529588699341,98.5792349726776 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,105.73539352416992,95.95628415300547 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.28051996231079,90.65573770491804 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,104.57090783119202,80.79234972677595 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.84101176261902,99.59016393442623 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.33427810668945,98.4153005464481 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,105.29664444923401,98.55191256830601 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,104.42256879806519,96.12021857923497 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.5591254234314,91.17486338797814 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,103.87886691093445,84.15300546448087 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,108.37157607078552,99.61748633879782 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,106.7497067451477,99.09836065573771 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,108.2449460029602,98.36065573770492 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,107.68048405647278,95.57377049180327 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,106.6329939365387,91.47540983606558 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.5293939113617,84.09836065573771 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,106.02579545974731,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,107.17805647850037,98.46994535519126 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,104.92045092582703,98.4153005464481 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.34843349456787,95.24590163934427 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,106.10412120819092,91.22950819672131 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.39587831497192,83.68852459016394 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.31673216819763,99.64480874316939 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,106.44842505455017,99.04371584699453 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,105.34441113471985,97.70491803278688 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.11384105682373,95.68306010928961 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,104.63398885726929,90.7103825136612 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,107.11718535423279,83.93442622950819 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,104.8668966293335,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.29218888282776,99.1256830601093 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,105.88010931015015,98.55191256830601 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,107.72886347770691,95.90163934426229 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.87288475036621,91.09289617486338 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,104.76583194732666,83.3879781420765 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,103.62620329856873,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.91338658332825,99.01639344262296 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,106.28621697425842,98.49726775956285 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.76134848594666,95.81967213114754 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,104.27628254890442,91.03825136612022 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,106.67031502723694,83.52459016393442 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,105.14721989631653,99.64480874316939 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.0157368183136,99.1256830601093 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,104.89587163925171,98.3879781420765 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,105.60598754882812,95.90163934426229 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,105.7902615070343,91.03825136612022 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,106.23296308517456,84.26229508196721 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,106.46581220626831,99.67213114754098 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,106.43900418281555,99.09836065573771 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,107.15450119972229,98.44262295081967 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.85507273674011,95.8743169398907 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,112.26786231994629,91.17486338797814 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.8468599319458,83.98907103825137 +20251229141357,Graph NN,0.005,0,0,0,100,GPU,107.57627940177917,98.3879781420765 +20251229141357,Graph NN,0.01,0,0,0,100,GPU,105.0660994052887,99.07103825136612 +20251229141357,Graph NN,0.02,0,0,0,100,GPU,106.52923154830933,98.08743169398907 +20251229141357,Graph NN,0.05,0,0,0,100,GPU,106.40064692497253,95.95628415300547 +20251229141357,Graph NN,0.1,0,0,0,100,GPU,106.87861132621765,91.47540983606558 +20251229141357,Graph NN,0.2,0,0,0,100,GPU,105.05328607559204,82.65027322404372 \ No newline at end of file diff --git a/examples/recomm_system/graph_nn.py b/examples/recomm_system/graph_nn.py index 5ace5cca..b7a2d06d 100644 --- a/examples/recomm_system/graph_nn.py +++ b/examples/recomm_system/graph_nn.py @@ -1,149 +1,118 @@ import argparse import torch import torch.nn.functional as F -from torch_geometric.data import Data -from torch_geometric.nn import GCNConv +from torch_geometric.data import Data, DataLoader +from torch_geometric.nn import GCNConv, global_mean_pool import prepare_dataset from tmu.tools import BenchmarkTimer -import os import pandas as pd -from sklearn.preprocessing import OneHotEncoder +import os import numpy as np +# ------------------------- +# Graph Construction +# ------------------------- +def build_graph(x_row, y_label, bits=16): + u, i, c = map(int, x_row) + + def bin_encode(v): + return torch.tensor([(v >> b) & 1 for b in range(bits)], dtype=torch.float) + + x = torch.stack([ + torch.cat([bin_encode(u), torch.zeros(bits * 2)]), + torch.cat([torch.zeros(bits), bin_encode(i), torch.zeros(bits)]), + torch.cat([torch.zeros(bits * 2), bin_encode(c)]), + ]) + + edge_index = torch.tensor([ + [0, 1, 1, 2], + [1, 0, 2, 1], + ], dtype=torch.long) + + y = torch.tensor(y_label, dtype=torch.long) + + return Data(x=x, edge_index=edge_index, y=y) + +# ------------------------- +# GNN Model (Graph-level) +# ------------------------- +class GraphClassifier(torch.nn.Module): + def __init__(self, in_dim, hidden_dim, num_classes): + super().__init__() + self.conv1 = GCNConv(in_dim, hidden_dim) + self.conv2 = GCNConv(hidden_dim, hidden_dim) + self.classifier = torch.nn.Linear(hidden_dim, num_classes) + + def forward(self, x, edge_index, batch): + x = self.conv1(x, edge_index) + x = F.relu(x) + x = self.conv2(x, edge_index) + x = global_mean_pool(x, batch) # graph-level embedding + return self.classifier(x) + +# ------------------------- +# Main Experiment +# ------------------------- def main(args): results = [] - data = prepare_dataset.aug_amazon_products(noise_ratio=args.dataset_noise_ratio) + + data = prepare_dataset.aug_amazon_products( + noise_ratio=args.dataset_noise_ratio + ) x, y = prepare_dataset.construct_x_y(data) X_train, X_test, Y_train, Y_test = prepare_dataset.train_test_split(x, y) - # Extract categorical identifiers for features - user_ids = data['user_id'].unique() - item_ids = data['product_id'].unique() - category_ids = data['category'].unique() - - print("Unique user_ids: ", len(user_ids)) - print("Unique item_ids: ", len(item_ids)) - print("Unique category_ids: ", len(category_ids)) - - num_users = len(user_ids) - num_items = len(item_ids) - num_categories = len(category_ids) - num_nodes = num_users + num_items + num_categories - - # One-hot encoding for node features - user_encoder = OneHotEncoder() - item_encoder = OneHotEncoder() - category_encoder = OneHotEncoder() - - # Fit encoders using unique identifiers - user_features = user_encoder.fit_transform(user_ids.reshape(-1, 1)).toarray() # Convert to dense - item_features = item_encoder.fit_transform(item_ids.reshape(-1, 1)).toarray() # Convert to dense - category_features = category_encoder.fit_transform(category_ids.reshape(-1, 1)).toarray() # Convert to dense - - print("User features shape: ", user_features.shape) - print("Item features shape: ", item_features.shape) - print("Category features shape: ", category_features.shape) - - # Ensure consistent feature dimensions - max_feature_dim = max(user_features.shape[1], item_features.shape[1], category_features.shape[1]) - - # Pad features if dimension mismatch - if user_features.shape[1] < max_feature_dim: - user_features = np.pad(user_features, ((0, 0), (0, max_feature_dim - user_features.shape[1])), 'constant') - if item_features.shape[1] < max_feature_dim: - item_features = np.pad(item_features, ((0, 0), (0, max_feature_dim - item_features.shape[1])), 'constant') - if category_features.shape[1] < max_feature_dim: - category_features = np.pad(category_features, ((0, 0), (0, max_feature_dim - category_features.shape[1])), 'constant') - - # Concatenate all node features into a single tensor - node_features = torch.cat([ - torch.tensor(user_features, dtype=torch.float), - torch.tensor(item_features, dtype=torch.float), - torch.tensor(category_features, dtype=torch.float) - ], dim=0) - - # Build edge list - edge_list = [] - # User ↔ Item edges - for user, item in zip(X_train[:, 0], X_train[:, 1]): - edge_list.append((user, num_users + item)) # User to Item - edge_list.append((num_users + item, user)) # Item to User - # Item ↔ Category edges - for item, category in zip(X_train[:, 1], X_train[:, 2]): - edge_list.append((num_users + item, num_users + num_items + category)) # Item to Category - edge_list.append((num_users + num_items + category, num_users + item)) # Category to Item - # Create edge index for PyTorch Geometric - edge_index = torch.tensor(edge_list, dtype=torch.long).t() - - # PyTorch Geometric Data object - graph_data = Data(x=node_features, edge_index=edge_index) - - # Step 2: Define GCN Model - class GCN(torch.nn.Module): - def __init__(self, input_dim, hidden_dim, output_dim): - super(GCN, self).__init__() - self.conv1 = GCNConv(input_dim, hidden_dim) - self.conv2 = GCNConv(hidden_dim, output_dim) - - def forward(self, x, edge_index): - x = self.conv1(x, edge_index) - x = F.relu(x) - x = self.conv2(x, edge_index) - return x - - # Initialize Model - model = GCN(input_dim=node_features.shape[1], hidden_dim=128, output_dim=64) - # Define optimizer - optimizer = torch.optim.Adam(model.parameters(), lr=0.01) - - # Convert train/test data to tensors - train_edges = torch.tensor( - [(user, num_users + item) for user, item in zip(X_train[:, 0], X_train[:, 1])], - dtype=torch.long - ).t() - train_labels = torch.tensor(Y_train, dtype=torch.float) - test_edges = torch.tensor( - [(user, num_users + item) for user, item in zip(X_test[:, 0], X_test[:, 1])], - dtype=torch.long - ).t() - test_labels = torch.tensor(Y_test, dtype=torch.float) - - # Training Loop with Accuracy Logging - benchmark_total = BenchmarkTimer(logger=None, text="Epochs Time") + bits = 16 + feature_dim = 3 * bits + # Build graph datasets + train_graphs = [build_graph(X_train[i], Y_train[i], bits=bits) for i in range(len(X_train))] + test_graphs = [build_graph(X_test[i], Y_test[i], bits=bits) for i in range(len(X_test))] + + train_loader = DataLoader(train_graphs, batch_size=64, shuffle=True) + test_loader = DataLoader(test_graphs, batch_size=64) + + num_classes = len(np.unique(y)) + + model = GraphClassifier( + in_dim=feature_dim, + hidden_dim=64, + num_classes=num_classes + ) + + optimizer = torch.optim.Adam(model.parameters(), lr=0.001) + criterion = torch.nn.CrossEntropyLoss() + + benchmark_total = BenchmarkTimer(logger=None, text="Total Time") with benchmark_total: for epoch in range(args.epochs): + # Training benchmark1 = BenchmarkTimer(logger=None, text="Training Time") with benchmark1: - # Training Phase model.train() - optimizer.zero_grad() - out = model(graph_data.x, graph_data.edge_index) - # User-item embeddings - user_embeddings = out[train_edges[0]] - item_embeddings = out[train_edges[1]] - predicted_ratings = (user_embeddings * item_embeddings).sum(dim=1) - # Compute loss - loss = F.mse_loss(predicted_ratings, train_labels) - loss.backward() - optimizer.step() - train_time = benchmark1.elapsed() - - # Testing Phase + for batch in train_loader: + optimizer.zero_grad() + out = model(batch.x, batch.edge_index, batch.batch) + loss = criterion(out, batch.y) + loss.backward() + optimizer.step() + + # Testing benchmark2 = BenchmarkTimer(logger=None, text="Testing Time") with benchmark2: model.eval() + correct = 0 + total = 0 with torch.no_grad(): - out = model(graph_data.x, graph_data.edge_index) - test_user_embeddings = out[test_edges[0]] - test_item_embeddings = out[test_edges[1]] - test_predicted_ratings = (test_user_embeddings * test_item_embeddings).sum(dim=1) - # Compute accuracy - accuracy = ((test_predicted_ratings.round() == test_labels).float().mean().item()) * 100 - test_time = benchmark2.elapsed() + for batch in test_loader: + out = model(batch.x, batch.edge_index, batch.batch) + pred = out.argmax(dim=1) + correct += (pred == batch.y).sum().item() + total += batch.y.size(0) + + accuracy = 100.0 * correct / total total_time = benchmark_total.elapsed() - # Append results for each epoch results.append({ "Exp_id": args.exp_id, "Algorithm": "Graph NN", @@ -157,27 +126,28 @@ def forward(self, x, edge_index): "Accuracy": accuracy, }) - # Save results to CSV results_df = pd.DataFrame(results) results_file = "experiment_results.csv" if os.path.exists(results_file): - results_df.to_csv(results_file, mode='a', index=False, header=False) + results_df.to_csv(results_file, mode="a", index=False, header=False) else: results_df.to_csv(results_file, index=False) - print(f"Results saved to {results_file}") + print(f"Results saved to {results_file}") +# ------------------------- +# Arguments +# ------------------------- def default_args(**kwargs): parser = argparse.ArgumentParser() - parser.add_argument("--platform", default="CPU", type=str, choices=["CPU", "CUDA"]) - parser.add_argument("--epochs", default=2000, type=int) + parser.add_argument("--epochs", default=100, type=int) parser.add_argument("--dataset_noise_ratio", default=0.01, type=float) + parser.add_argument("--platform", default="GPU", type=str) parser.add_argument("--exp_id", default="", type=str) args = parser.parse_args() - for key, value in kwargs.items(): - if key in args.__dict__: - setattr(args, key, value) + for k, v in kwargs.items(): + setattr(args, k, v) return args if __name__ == "__main__": - main(default_args()) + main(default_args()) \ No newline at end of file diff --git a/examples/recomm_system/test.ipynb b/examples/recomm_system/test.ipynb index a1834796..395f49b7 100644 --- a/examples/recomm_system/test.ipynb +++ b/examples/recomm_system/test.ipynb @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -80,12 +80,12 @@ "\\begin{tabular}{|c|c|c|c|}\n", "\\hline\n", "\\textbf{Noise Ratio} & \\textbf{GCN (\\%)} & \\textbf{GTM (\\%)} & \\textbf{TMClassifier (\\%)} \\\\ \\hline\n", - "0.005 & 83.39 & 98.73 & 76.73 \\\\ \\hline\n", - "0.01 & 85.55 & 98.35 & 74.87 \\\\ \\hline\n", - "0.02 & 83.57 & 97.73 & 72.24 \\\\ \\hline\n", - "0.05 & 82.13 & 94.61 & 63.86 \\\\ \\hline\n", - "0.1 & 75.93 & 89.85 & 49.48 \\\\ \\hline\n", - "0.2 & 64.12 & 78.73 & 20.13 \\\\ \\hline\n", + "0.005 & 99.52 & 98.73 & 76.73 \\\\ \\hline\n", + "0.01 & 98.96 & 98.35 & 74.87 \\\\ \\hline\n", + "0.02 & 98.36 & 97.73 & 72.24 \\\\ \\hline\n", + "0.05 & 95.80 & 94.61 & 63.86 \\\\ \\hline\n", + "0.1 & 91.11 & 89.85 & 49.48 \\\\ \\hline\n", + "0.2 & 83.45 & 78.73 & 20.13 \\\\ \\hline\n", "\\end{tabular}\n", "\\caption{Average accuracy comparison of GCN, GraphTM, and TMClassifier for varying noise ratios.}\n", "\\label{tab:recomm_sys_accuracy}\n", @@ -96,7 +96,7 @@ "source": [ "import pandas as pd\n", "data = pd.read_csv(\"experiment_results.csv\")\n", - "exp_id = \"20250409090514\" \n", + "exp_id = \"20251229141357\" \n", "data['Exp_id'] = data['Exp_id'].astype(str)\n", "filtered_data = data[data['Exp_id'] == exp_id]\n", "# print(filtered_data)\n", @@ -133,9 +133,16 @@ "print(latex_table)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Row is noise and columns is models" + ] + }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -147,17 +154,17 @@ "\\centering\n", "\\begin{tabular}{|c|c|c|c|}\n", "\\hline\n", - "\\textbf{Noise Ratio} & \\textbf{GCN (\\%)} & \\textbf{GraphTM (\\%)} & \\textbf{TMClassifier (\\%)} \\\\ \\hline\n", - "0.005 & 83.39 \\pm 4.83 & 98.73 \\pm 0.12 & 76.73 \\pm 0.14 \\\\ \\hline\n", - "0.01 & 85.55 \\pm 6.99 & 98.35 \\pm 0.08 & 74.87 \\pm 0.12 \\\\ \\hline\n", - "0.02 & 83.57 \\pm 5.76 & 97.73 \\pm 0.13 & 72.24 \\pm 0.26 \\\\ \\hline\n", - "0.05 & 82.13 \\pm 5.30 & 94.61 \\pm 0.34 & 63.86 \\pm 0.34 \\\\ \\hline\n", - "0.1 & 75.93 \\pm 3.89 & 89.85 \\pm 0.29 & 49.48 \\pm 0.38 \\\\ \\hline\n", - "0.2 & 64.12 \\pm 3.07 & 78.73 \\pm 0.75 & 20.13 \\pm 0.04 \\\\ \\hline\n", + "\\textbf{Noise Ratio} & \\textbf{GCN} & \\textbf{GraphTM} & \\textbf{TMClassifier} \\\\ \\hline\n", + "0.005 & 99.52 \\pm 0.40 & 98.73 \\pm 0.12 & 76.73 \\pm 0.14 \\\\ \\hline\n", + "0.01 & 98.96 \\pm 0.28 & 98.35 \\pm 0.08 & 74.87 \\pm 0.12 \\\\ \\hline\n", + "0.02 & 98.36 \\pm 0.27 & 97.73 \\pm 0.13 & 72.24 \\pm 0.26 \\\\ \\hline\n", + "0.05 & 95.80 \\pm 0.25 & 94.61 \\pm 0.34 & 63.86 \\pm 0.34 \\\\ \\hline\n", + "0.1 & 91.11 \\pm 0.27 & 89.85 \\pm 0.29 & 49.48 \\pm 0.38 \\\\ \\hline\n", + "0.2 & 83.45 \\pm 1.05 & 78.73 \\pm 0.75 & 20.13 \\pm 0.04 \\\\ \\hline\n", "\\end{tabular}\n", "\\caption{Average accuracy and standard deviation comparison of GCN, GraphTM, and TMClassifier for varying noise ratios.}\n", "\\label{tab:recomm_sys_accuracy}\n", - "\\{table}\n" + "\\end{table}\n" ] } ], @@ -166,7 +173,7 @@ "\n", "# Load the data\n", "data = pd.read_csv(\"experiment_results.csv\")\n", - "exp_id = \"20250409090514\"\n", + "exp_id = \"20251229141357\"\n", "data['Exp_id'] = data['Exp_id'].astype(str)\n", "\n", "# Filter the data for the specified experiment ID\n", @@ -188,7 +195,7 @@ "\\\\centering\n", "\\\\begin{tabular}{|c|c|c|c|}\n", "\\\\hline\n", - "\\\\textbf{Noise Ratio} & \\\\textbf{GCN (\\\\%)} & \\\\textbf{GraphTM (\\\\%)} & \\\\textbf{TMClassifier (\\\\%)} \\\\\\\\ \\\\hline\n", + "\\\\textbf{Noise Ratio} & \\\\textbf{GCN} & \\\\textbf{GraphTM} & \\\\textbf{TMClassifier} \\\\\\\\ \\\\hline\n", "\"\"\"\n", "\n", "# Iterate over the pivot data to construct the table rows with mean and standard deviation\n", @@ -210,14 +217,141 @@ "latex_table += \"\\\\end{tabular}\\n\"\n", "latex_table += \"\\\\caption{Average accuracy and standard deviation comparison of GCN, GraphTM, and TMClassifier for varying noise ratios.}\\n\"\n", "latex_table += \"\\\\label{tab:recomm_sys_accuracy}\\n\"\n", - "latex_table += \"\\\\{table}\"\n", + "latex_table += \"\\\\end{table}\"\n", "\n", "print(latex_table)\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Vertical models and rows as noise" + ] + }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\\begin{table}[htbp]\n", + "\\centering\n", + "\\caption{Accuracy of \\ac{GCN}, \\ac{GraphTM}, and standard \\ac{TM} under varying noise ratios.}\n", + "\\label{tab:recomm_sys_accuracy}\n", + "\\begin{tabular}{l c c c c c c}\n", + "\\toprule\n", + " & \\multicolumn{6}{c}{Noise Ratio} \\\\\n", + "\\cmidrule(lr){2-7}\n", + "Model\n", + " & 0.005 & 0.01 & 0.02 & 0.05 & 0.1 & 0.2 \\\\\n", + "\\midrule\n", + "\\ac{GCN} & 99.52 & 98.96 & 98.36 & 95.80 & 91.11 & 83.45 \\\\\n", + "\\ac{GraphTM} & 98.73 & 98.35 & 97.73 & 94.61 & 89.85 & 78.73 \\\\\n", + "Standard TM & 76.73 & 74.87 & 72.24 & 63.86 & 49.48 & 20.13 \\\\\n", + "\n", + "\\bottomrule\n", + "\\end{tabular}\n", + "\\end{table}\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "# Load data\n", + "data = pd.read_csv(\"experiment_results.csv\")\n", + "\n", + "exp_id = \"20251229141357\"\n", + "data[\"Exp_id\"] = data[\"Exp_id\"].astype(str)\n", + "\n", + "# Filter by experiment ID\n", + "filtered_data = data[data[\"Exp_id\"] == exp_id]\n", + "\n", + "# Compute mean accuracy per Algorithm × Noise_Ratio\n", + "grouped = (\n", + " filtered_data\n", + " .groupby([\"Algorithm\", \"Noise_Ratio\"])[\"Accuracy\"]\n", + " .mean()\n", + " .reset_index()\n", + ")\n", + "\n", + "# Pivot: rows = Algorithm, columns = Noise_Ratio\n", + "pivot = grouped.pivot(index=\"Algorithm\", columns=\"Noise_Ratio\", values=\"Accuracy\")\n", + "\n", + "# Ensure consistent column order\n", + "noise_ratios = sorted(pivot.columns)\n", + "pivot = pivot[noise_ratios]\n", + "\n", + "# Model display names (LaTeX)\n", + "model_names = {\n", + " \"Graph NN\": r\"\\ac{GCN}\",\n", + " \"GraphTM\": r\"\\ac{GraphTM}\",\n", + " \"TMClassifier\": r\"Standard TM\"\n", + "}\n", + "\n", + "# Begin LaTeX table\n", + "latex = r\"\"\"\n", + "\\begin{table}[htbp]\n", + "\\centering\n", + "\\caption{Accuracy of \\ac{GCN}, \\ac{GraphTM}, and standard \\ac{TM} under varying noise ratios.}\n", + "\\label{tab:recomm_sys_accuracy}\n", + "\\begin{tabular}{l c c c c c c}\n", + "\\toprule\n", + " & \\multicolumn{6}{c}{Noise Ratio} \\\\\n", + "\\cmidrule(lr){2-7}\n", + "Model\n", + "\"\"\"\n", + "\n", + "# Header: noise ratios\n", + "for nr in noise_ratios:\n", + " latex += f\" & {nr}\"\n", + "latex += r\" \\\\\"\n", + "latex += \"\\n\\\\midrule\\n\"\n", + "\n", + "# For each model, build a row\n", + "for model in [\"Graph NN\", \"GraphTM\", \"TMClassifier\"]:\n", + " latex += model_names[model]\n", + "\n", + " for nr in noise_ratios:\n", + " val = pivot.loc[model, nr]\n", + "\n", + " # Boldface the best model for this noise ratio\n", + " col_max = pivot[nr].max()\n", + " latex += f\" & {val:.2f}\"\n", + " # if np.isclose(val, col_max):\n", + " # latex += f\" & \\\\textbf{{{val:.2f}}}\"\n", + " # else:\n", + " # latex += f\" & {val:.2f}\"\n", + "\n", + " latex += r\" \\\\\"\n", + " latex += \"\\n\"\n", + "\n", + "latex += r\"\"\"\n", + "\\bottomrule\n", + "\\end{tabular}\n", + "\\end{table}\n", + "\"\"\"\n", + "\n", + "print(latex)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calc time" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -225,7 +359,7 @@ "output_type": "stream", "text": [ "Averages across all noise ratios:\n", - "Algorithm: Graph NN, Average Accuracy: 79.11%, Average Total Time: 44.80s\n", + "Algorithm: Graph NN, Average Accuracy: 94.53%, Average Total Time: 106.01s\n", "Algorithm: GraphTM, Average Accuracy: 93.00%, Average Total Time: 133.75s\n", "Algorithm: TMClassifier, Average Accuracy: 59.55%, Average Total Time: 1068.99s\n" ] @@ -238,7 +372,7 @@ "data = pd.read_csv(\"experiment_results.csv\")\n", "\n", "# Define the experiment ID you want to filter\n", - "exp_id = \"20250409090514\"\n", + "exp_id = \"20251229141357\"\n", "\n", "# Ensure that Exp_id is treated as a string\n", "data['Exp_id'] = data['Exp_id'].astype(str)\n", @@ -259,6 +393,49 @@ " # Print the results\n", " print(f\"Algorithm: {algorithm}, Average Accuracy: {average_accuracy:.2f}%, Average Total Time: {average_total_time:.2f}s\")\n" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Remove algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Algorithms before filtering:\n", + "['GraphTM' 'TMClassifier' 'Graph NN']\n", + "Algorithms after filtering:\n", + "['GraphTM' 'TMClassifier']\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "data = pd.read_csv(\"experiment_results.csv\")\n", + "\n", + "# Inspect unique algorithm names (optional sanity check)\n", + "print(\"Algorithms before filtering:\")\n", + "print(data[\"Algorithm\"].unique())\n", + "\n", + "# Remove all Graph Neural Network results\n", + "filtered_data = data[~data[\"Algorithm\"].str.contains(\"Graph NN\", regex=False)]\n", + "\n", + "# Optional sanity check\n", + "print(\"Algorithms after filtering:\")\n", + "print(filtered_data[\"Algorithm\"].unique())\n", + "\n", + "# Overwrite the CSV with cleaned results\n", + "# careful before remove\n", + "# filtered_data.to_csv(\"experiment_results.csv\", index=False)" + ] } ], "metadata": { From cfc3e7e7252b9ad08c1129bc29dc5f010d67349c Mon Sep 17 00:00:00 2001 From: Ahmed Khalid Date: Mon, 5 Jan 2026 11:54:14 +0000 Subject: [PATCH 35/35] adding t-sne plot --- .../prepare_dataset.cpython-310.pyc | Bin 5348 -> 5348 bytes examples/recomm_system/graph_tm_explain.py | 77 ++++++++++++++++++ .../all_classes_top15_comparison_compact.png | Bin 0 -> 100086 bytes .../plots/clause_diversity_analysis.png | Bin 0 -> 60031 bytes .../clause_feature_space_visualization.png | Bin 0 -> 206129 bytes .../feature_class_association_heatmap.png | Bin 0 -> 146059 bytes .../plots/feature_space_tsne.png | Bin 0 -> 138376 bytes .../plots/feature_space_visualization.png | Bin 0 -> 48235 bytes 8 files changed, 77 insertions(+) create mode 100644 examples/recomm_system/plots/all_classes_top15_comparison_compact.png create mode 100644 examples/recomm_system/plots/clause_diversity_analysis.png create mode 100644 examples/recomm_system/plots/clause_feature_space_visualization.png create mode 100644 examples/recomm_system/plots/feature_class_association_heatmap.png create mode 100644 examples/recomm_system/plots/feature_space_tsne.png create mode 100644 examples/recomm_system/plots/feature_space_visualization.png diff --git a/examples/recomm_system/__pycache__/prepare_dataset.cpython-310.pyc b/examples/recomm_system/__pycache__/prepare_dataset.cpython-310.pyc index 359048333a440a694927013b30d5a34a45a23fd5..d199d3b968bd4ef562b9cbf2b3fee990439f7e41 100644 GIT binary patch delta 21 bcmaE&`9zZ^pO=@50SI0%iO$@}b3+6GNHGSs delta 21 bcmaE&`9zZ^pO=@50SIg~bJ92R+z( diff --git a/examples/recomm_system/graph_tm_explain.py b/examples/recomm_system/graph_tm_explain.py index 0aceb18a..7287d9ed 100644 --- a/examples/recomm_system/graph_tm_explain.py +++ b/examples/recomm_system/graph_tm_explain.py @@ -5,6 +5,7 @@ import prepare_dataset import os import matplotlib.pyplot as plt +from sklearn.decomposition import PCA def main(args): @@ -104,6 +105,82 @@ def main(args): class_labels = np.unique(Y_train) num_classes = len(class_labels) + # t-SNE visualization of features by class + feature_vectors = [] # vectors for each feature + feature_labels = [] # feature names + feature_classes = [] # class each feature belongs to + + for class_label in class_labels: + # Get top-15 features for this class + scores = np.zeros(num_symbols) + for clause in range(int(state[3])): + w = weights[class_label, clause] + if w > 0: + for lit in range(num_symbols): + s = clause_literals[clause, lit] + ns = clause_literals[clause, lit + num_symbols] + if s > threshold: + scores[lit] += s * w + if ns > threshold: + scores[lit] -= ns * w + + top_idx = np.argsort(-np.abs(scores))[:top_n] + + # Create vector for each top feature + class_vecs = [] + for feat_idx in top_idx: + feat_vec = np.zeros(num_symbols) + for clause in range(int(state[3])): + w = weights[class_label, clause] + if w > 0: + s = clause_literals[clause, feat_idx] + ns = clause_literals[clause, feat_idx + num_symbols] + feat_vec[clause] = s * w - ns * w + + class_vecs.append(feat_vec) + + # Normalize vectors within this class + class_vecs = np.array(class_vecs) + class_max = np.max(np.abs(class_vecs)) + if class_max > 0: + class_vecs = class_vecs / class_max + + for i, feat_idx in enumerate(top_idx): + feature_vectors.append(class_vecs[i]) + feature_labels.append(symbol_dict[feat_idx]) + feature_classes.append(class_label) + + if len(feature_vectors) > 1: + feature_vectors = np.array(feature_vectors) + feature_classes = np.array(feature_classes) + + # PCA projection + pca = PCA(n_components=2) + features_2d = pca.fit_transform(feature_vectors) + + # Plot + fig, ax = plt.subplots(figsize=(12, 8)) + colors = plt.cm.Set3(np.linspace(0, 1, num_classes)) + + for class_label in class_labels: + mask = feature_classes == class_label + ax.scatter(features_2d[mask, 0], features_2d[mask, 1], + c=[colors[class_label]], label=f'Class {class_label}', s=100, alpha=0.7) + + # Add feature names as labels + for i, txt in enumerate(feature_labels): + ax.annotate(txt, (features_2d[i, 0], features_2d[i, 1]), + fontsize=8, ha='center', va='center') + + ax.set_xlabel('t-SNE 1') + ax.set_ylabel('t-SNE 2') + ax.set_title('Feature Space (Top-15 features per class)') + ax.legend() + ax.grid(True, alpha=0.3) + plt.tight_layout() + plt.savefig('plots/feature_space_tsne.png', dpi=150) + plt.close() + # --- Determine optimal figure and subplot spacing --- # Calculate dynamic height based on number of classes and top_n to avoid too much whitespace # Adjusted multiplier for height diff --git a/examples/recomm_system/plots/all_classes_top15_comparison_compact.png b/examples/recomm_system/plots/all_classes_top15_comparison_compact.png new file mode 100644 index 0000000000000000000000000000000000000000..6bb29f7cae0cfe0d255f9c4bca43f4c0702179c0 GIT binary patch literal 100086 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%0AjH=vroaK<6E|Vy&={6{>qk?OZ=eAT6tNTcTsCP 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 literal 0 HcmV?d00001 diff --git a/examples/recomm_system/plots/clause_diversity_analysis.png b/examples/recomm_system/plots/clause_diversity_analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..125c9673a3f00afb54714df967abc2acf7084ebe GIT binary patch literal 60031 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≺i7p^w*vM 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 z zgZwruPFw@tSf&_PKLh8MM0D16w)v0(Qk&uo`q>K|`bB6>eV_MzpZ7fHoF}dMBAzT zXjHC3)s#qdG)kaxl!+xqBSc5{z(r3Y?i~@=r&AaFr3>QiWo7!vF^7FaX6Qu8y8til660^d&xu)=wEbAEuMK% z(7|Px$@=hh%wi_a%tntvtJVH_58_7%5+-;coPGmXH$~=4DK9UVqKRu!QPJ4gSg!2@ z=fY~{Z#Qm$AP`|d>&mU-iBk}OlBJKKa!IT|WLKfAT7nagpt%C`M2cpMdhukDIOnB= zgc7W3<;4W>nGyib*ohg^Q`^gg_^fzibNvf zj7<$4{9&LrEU%zI;c~e`k|mp2ESA6m4Qf<-Zq(e|oE1IPFk3x8RveK?rjP|#`=u2) zE|KY`Mx((7=IDDF{ml$D-Vd>+H-cfz=H;kTFv}et*LT1#(+bW8-V4N)a;^}2C2`y8 zrXYZo!n=}l(-#xz24C;n-rh(aHshtMu?mjh#aj0>7K??}lpJ+x^Z58Ua<(M+8?3&= z&(F`NjTbIP z@0OQ)Z(TAPjex${gFxoY$+pqaFOf*edVR=8?AzWfE>l-7d1? zNRu&)F~a;Y^L<#n@baf2iSLDj`G_$XB6knyX)q*;fhxQ|KA&&BbXY`okXXL_5*zLY zY+W`Fi&8yO!491clM4Stwec17O3gx`m*4ui7JtF2_`RazR&vFw4tCt%?2qKlm=Vq{ZN&+=jSQSzJt z^@-E;7^;iIs69q6UdGL}%#PA9omsJ)=nFyO^LDcu(4+%9u>sxc_nE4cIQ?h<^%AdX zW_Fg8i?B0tDjXr)nyMawSp`zgG%5iYOFmvhJP63$d;7K`{C>p|z*Ja?{S_@CHzJmX zvBo$Nx$Hrt4{>k}jw#m1(2%q_u<9dDvnifYvTtv1-xL}eN;FvtFxa~ugcjR>Cmpes z_N<1Y_>(n>FrGqwQoGX2!H2+gJNZEZIO&p~d;-hf+O=ipT9;9LJGUX7Mux5y;s5%_ Z4$g^&UY+h=Hev`Ckr_EVdbYoP>_1VZe0%@^ literal 0 HcmV?d00001 diff --git a/examples/recomm_system/plots/clause_feature_space_visualization.png b/examples/recomm_system/plots/clause_feature_space_visualization.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c2a0b8f1e8aadc1e1789d1dbf609545a5bd0b7 GIT binary patch literal 206129 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