From 45328f4b2c24ae086cc72898629cad30ce4d5728 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 23 Apr 2022 16:54:55 +0100 Subject: [PATCH 1/4] Update API --- .../Examples/qlearning_three_columns.rst | 13 +++- docs/source/examples.rst | 1 + .../helpers/load_full_mock_dataset.py | 52 ++++++++-------- .../load_three_columns_mock_dataset.py | 1 - src/examples/q_learning_all_columns.py | 62 ++++++++++++++++--- src/examples/qlearning_three_columns.py | 1 + 6 files changed, 92 insertions(+), 38 deletions(-) diff --git a/docs/source/Examples/qlearning_three_columns.rst b/docs/source/Examples/qlearning_three_columns.rst index d7cadc1..c44dd39 100644 --- a/docs/source/Examples/qlearning_three_columns.rst +++ b/docs/source/Examples/qlearning_three_columns.rst @@ -48,6 +48,17 @@ Given that the total dataset distortion is assumed to be in the range :math:`[0, discretize this range into bins and for each entailed value of the distortion we use the corresponding bin as a state index. Alternatively, we could discretize the distortion of each column into bins and create tuples of indeces representing a state. +We preprocess the data set by normalizing the numeric columns. +We will use the cosine normalized distance to measure the distortion of columns with string data. +Similarly, we use the following :math:`L_2`-based norm for calculating the distortion of +numeric columns + +.. math:: + + dist(\mathbf{v}_1, \mathbf{v}_2) = \sqrt{\frac{||\mathbf{v}_1 - \mathbf{v}_2||_{L_2}}{N}} + +where $N$ is the size of the vector. This way the resulting distance, due to the normalization of numeric columns, will be in the range :math:`[0,1]`. + Code ---- @@ -98,7 +109,7 @@ Next establish a set of configuration parameters SAVE_DISTORTED_SETS_DIR = "q_learning_three_columns_results/distorted_set" PUNISH_FACTOR = 2.0 -The dirver code creates brings all the elements together +The dirver code brings all the elements together .. code-block:: diff --git a/docs/source/examples.rst b/docs/source/examples.rst index 2eff455..73ca019 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -7,5 +7,6 @@ Some examples can be found below :maxdepth: 4 Examples/qlearning_three_columns + Examples/qlearning_all_columns Examples/semi_gradient_sarsa_three_columns Examples/a2c_three_columns diff --git a/src/examples/helpers/load_full_mock_dataset.py b/src/examples/helpers/load_full_mock_dataset.py index d14d14b..18ec319 100644 --- a/src/examples/helpers/load_full_mock_dataset.py +++ b/src/examples/helpers/load_full_mock_dataset.py @@ -9,7 +9,6 @@ from src.datasets.datasets_loaders import MockSubjectsLoader, MockSubjectsData from src.spaces.discrete_state_environment import DiscreteStateEnvironment from src.spaces.action_space import ActionSpace -from src.spaces.actions import ActionIdentity, ActionStringGeneralize, ActionNumericBinGeneralize from src.maths.distortion_calculator import DistortionCalculationType, DistortionCalculator from src.maths.numeric_distance_type import NumericDistanceType from src.maths.string_distance_calculator import StringDistanceType @@ -17,24 +16,6 @@ from src.spaces.env_type import DiscreteEnvType -N_LAYERS = 5 -N_BINS = 10 -N_EPISODES = 1000 -OUTPUT_MSG_FREQUENCY = 100 -GAMMA = 0.99 -ALPHA = 0.1 - -MAX_DISTORTION = 0.7 -MIN_DISTORTION = 0.3 -OUT_OF_MAX_BOUND_REWARD = -1.0 -OUT_OF_MIN_BOUND_REWARD = -1.0 -IN_BOUNDS_REWARD = 5.0 -N_ROUNDS_BELOW_MIN_DISTORTION = 10 -#SAVE_DISTORTED_SETS_DIR = "/home/alex/qi3/drl_anonymity/src/examples/semi_grad_sarsa/distorted_set" -REWARD_FACTOR = 0.95 -PUNISH_FACTOR = 2.0 - - def get_gender_hierarchy(): hierarchy = SerialHierarchy(values={"F": "*", "M": "*", "*": "*"}) return hierarchy @@ -94,14 +75,32 @@ def load_mock_subjects() -> MockSubjectsLoader: return ds +def get_salary_bins(ds: MockSubjectsLoader, n_states: int): + # create bins for the salary generalization + unique_salary = ds.get_column_unique_values(col_name="salary") + unique_salary.sort() + + # modify slightly the max value because + # we get out of bounds for the maximum salary + bins = np.linspace(unique_salary[0], unique_salary[-1] + 1, n_states) + return bins + + def load_discrete_env(env_type: DiscreteEnvType, n_states: int, min_distortion: Any, max_distortion: Any, total_min_distortion: float, total_max_distortion: float, - punish_factor: float, column_types: dict, + out_of_max_bound_reward: float, + out_of_min_bound_reward: float, + in_bounds_reward: float, + punish_factor: float, + column_types: dict, action_space: ActionSpace, save_distoreted_sets_dir: str, use_identifying_column_dist_in_total_dist: bool, - use_identifying_column_dist_factor: float) -> DiscreteStateEnvironment: + use_identifying_column_dist_factor: float, + gamma: float, + n_rounds_below_min_distortion: int) -> DiscreteStateEnvironment: + mock_ds = load_mock_subjects() action_space.shuffle() @@ -114,18 +113,17 @@ def load_discrete_env(env_type: DiscreteEnvType, n_states: int, dataset_distortion_type=DistortionCalculationType.SUM), reward_manager=RewardManager( bounds=(total_min_distortion, total_max_distortion), - out_of_max_bound_reward=OUT_OF_MAX_BOUND_REWARD, - out_of_min_bound_reward=OUT_OF_MIN_BOUND_REWARD, - in_bounds_reward=IN_BOUNDS_REWARD, + out_of_max_bound_reward=out_of_max_bound_reward, + out_of_min_bound_reward=out_of_min_bound_reward, + in_bounds_reward=in_bounds_reward, min_distortions=min_distortion, max_distortions=max_distortion, punish_factor=punish_factor), - gamma=GAMMA, - reward_factor=REWARD_FACTOR, + gamma=gamma, min_distortion=min_distortion, min_total_distortion=total_min_distortion, max_distortion=max_distortion, max_total_distortion=total_max_distortion, - n_rounds_below_min_distortion=N_ROUNDS_BELOW_MIN_DISTORTION, + n_rounds_below_min_distortion=n_rounds_below_min_distortion, distorted_set_path=Path(save_distoreted_sets_dir), n_states=n_states, env_type=env_type, column_types=column_types, use_identifying_column_dist_in_total_dist=use_identifying_column_dist_in_total_dist, diff --git a/src/examples/helpers/load_three_columns_mock_dataset.py b/src/examples/helpers/load_three_columns_mock_dataset.py index 62d7457..31fbaec 100644 --- a/src/examples/helpers/load_three_columns_mock_dataset.py +++ b/src/examples/helpers/load_three_columns_mock_dataset.py @@ -9,7 +9,6 @@ from src.datasets.datasets_loaders import MockSubjectsLoader, MockSubjectsData from src.spaces.discrete_state_environment import DiscreteStateEnvironment from src.spaces.action_space import ActionSpace -from src.spaces.actions import ActionIdentity, ActionStringGeneralize, ActionNumericBinGeneralize from src.maths.distortion_calculator import DistortionCalculationType, DistortionCalculator from src.maths.numeric_distance_type import NumericDistanceType from src.maths.string_distance_calculator import StringDistanceType diff --git a/src/examples/q_learning_all_columns.py b/src/examples/q_learning_all_columns.py index 0940873..e3837bf 100644 --- a/src/examples/q_learning_all_columns.py +++ b/src/examples/q_learning_all_columns.py @@ -1,6 +1,8 @@ import random +import numpy as np -from src.examples.helpers.load_full_mock_dataset import load_discrete_env, get_ethinicity_hierarchy, get_gender_hierarchy +from src.examples.helpers.load_full_mock_dataset import load_discrete_env, get_ethinicity_hierarchy, \ + get_gender_hierarchy, get_salary_bins, load_mock_subjects from src.datasets import ColumnType from src.spaces.env_type import DiscreteEnvType from src.spaces.action_space import ActionSpace @@ -8,10 +10,13 @@ from src.algorithms.q_learning import QLearnConfig, QLearning from src.policies.epsilon_greedy_policy import EpsilonGreedyPolicy, EpsilonDecayOption from src.trainers.trainer import Trainer, TrainerConfig +from src.examples.helpers.plot_utils import plot_running_avg +from src.utils import INFO -N_BINS = 20 +# configuration params +N_STATES = 10 GAMMA = 0.99 -ALPHA = 0.01 +ALPHA = 0.1 PUNISH_FACTOR = 2.0 MAX_DISTORTION = 0.7 MIN_DISTORTION = 0.4 @@ -21,12 +26,25 @@ EPSILON_DECAY_FACTOR = 0.01 USE_IDENTIFYING_COLUMNS_DIST = True IDENTIFY_COLUMN_DIST_FACTOR = 0.1 +N_EPISODES = 1001 +N_ITRS_PER_EPISODE = 30 +OUT_OF_MAX_BOUND_REWARD = -1.0 +OUT_OF_MIN_BOUND_REWARD = -1.0 +IN_BOUNDS_REWARD = 5.0 +OUTPUT_MSG_FREQUENCY = 100 +N_ROUNDS_BELOW_MIN_DISTORTION = 10 + if __name__ == '__main__': # set the seed for random engine random.seed(42) + # specify the column types. An identifying column + # will me removed from the anonymized data set + # An INSENSITIVE_ATTRIBUTE remains intact. + # A QUASI_IDENTIFYING_ATTRIBUTE is used in the anonymization + # A SENSITIVE_ATTRIBUTE currently remains intact column_types = {"NHSno": ColumnType.IDENTIFYING_ATTRIBUTE, "given_name": ColumnType.IDENTIFYING_ATTRIBUTE, "surname": ColumnType.IDENTIFYING_ATTRIBUTE, @@ -39,33 +57,47 @@ "preventative_treatment": ColumnType.SENSITIVE_ATTRIBUTE, "diagnosis": ColumnType.INSENSITIVE_ATTRIBUTE} - action_space = ActionSpace(n=8) + # define the action space + action_space = ActionSpace(n=10) + # all the columns that are SENSITIVE_ATTRIBUTE will be kept as they are # because currently we have no model # also INSENSITIVE_ATTRIBUTE will be kept as is + # in order to declare this we use an ActionIdentity action_space.add_many(ActionIdentity(column_name="dob"), ActionIdentity(column_name="education"), ActionIdentity(column_name="salary"), ActionIdentity(column_name="diagnosis"), ActionIdentity(column_name="mutation_status"), ActionIdentity(column_name="preventative_treatment"), + ActionIdentity(column_name="ethnicity"), ActionStringGeneralize(column_name="ethnicity", generalization_table=get_ethinicity_hierarchy()), ActionStringGeneralize(column_name="gender", - generalization_table=get_gender_hierarchy())) + generalization_table=get_gender_hierarchy()), + ActionNumericBinGeneralize(column_name="salary", + generalization_table=get_salary_bins(ds=load_mock_subjects(), + n_states=N_STATES)) + ) + action_space.shuffle() env = load_discrete_env(env_type=DiscreteEnvType.TOTAL_DISTORTION_STATE, - n_states=N_BINS, + n_states=N_STATES, min_distortion=MIN_DISTORTION, max_distortion=MAX_DISTORTION, total_min_distortion=MIN_DISTORTION, total_max_distortion=MAX_DISTORTION, + out_of_max_bound_reward=OUT_OF_MAX_BOUND_REWARD, + out_of_min_bound_reward=OUT_OF_MIN_BOUND_REWARD, + in_bounds_reward=IN_BOUNDS_REWARD, punish_factor=PUNISH_FACTOR, column_types=column_types, action_space=action_space, save_distoreted_sets_dir=SAVE_DISTORTED_SETS_DIR, use_identifying_column_dist_in_total_dist=USE_IDENTIFYING_COLUMNS_DIST, - use_identifying_column_dist_factor=IDENTIFY_COLUMN_DIST_FACTOR) + use_identifying_column_dist_factor=IDENTIFY_COLUMN_DIST_FACTOR, + gamma=GAMMA, + n_rounds_below_min_distortion=N_ROUNDS_BELOW_MIN_DISTORTION) - agent_config = QLearnConfig(n_itrs_per_episode=100, gamma=GAMMA, + agent_config = QLearnConfig(n_itrs_per_episode=N_ITRS_PER_EPISODE, gamma=GAMMA, alpha=ALPHA, policy=EpsilonGreedyPolicy(eps=EPS, n_actions=env.n_actions, decay_op=EPSILON_DECAY_OPTION, @@ -73,7 +105,19 @@ agent = QLearning(algo_config=agent_config) - trainer_config = TrainerConfig(n_episodes=100, output_msg_frequency=10) + trainer_config = TrainerConfig(n_episodes=N_EPISODES, output_msg_frequency=OUTPUT_MSG_FREQUENCY) trainer = Trainer(env=env, agent=agent, configuration=trainer_config) trainer.train() + avg_rewards = trainer.total_rewards + plot_running_avg(avg_rewards, steps=100, + xlabel="Episodes", ylabel="Reward", + title="Running reward average over 100 episodes") + + avg_episode_dist = np.array(trainer.total_distortions) + print("{0} Max/Min distortion {1}/{2}".format(INFO, np.max(avg_episode_dist), np.min(avg_episode_dist))) + + plot_running_avg(avg_episode_dist, steps=100, + xlabel="Episodes", ylabel="Distortion", + title="Running distortion average over 100 episodes") + diff --git a/src/examples/qlearning_three_columns.py b/src/examples/qlearning_three_columns.py index 3a0dc91..68ad9de 100644 --- a/src/examples/qlearning_three_columns.py +++ b/src/examples/qlearning_three_columns.py @@ -40,6 +40,7 @@ SAVE_DISTORTED_SETS_DIR = "q_learning_three_columns_results/distorted_set" PUNISH_FACTOR = 2.0 + if __name__ == '__main__': # set the seed for random engine From e897e4341cb93516e5cd03a524a48e7311b566b9 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 23 Apr 2022 16:55:30 +0100 Subject: [PATCH 2/4] Add new example --- .../images/qlearn_distortion_multi_cols.png | Bin 0 -> 45071 bytes .../images/qlearn_rewards_all_cols.png | Bin 0 -> 43831 bytes .../source/Examples/qlearning_all_columns.rst | 168 ++++++++++++++++++ 3 files changed, 168 insertions(+) create mode 100644 docs/source/Examples/images/qlearn_distortion_multi_cols.png create mode 100644 docs/source/Examples/images/qlearn_rewards_all_cols.png create mode 100644 docs/source/Examples/qlearning_all_columns.rst diff --git a/docs/source/Examples/images/qlearn_distortion_multi_cols.png b/docs/source/Examples/images/qlearn_distortion_multi_cols.png new file mode 100644 index 0000000000000000000000000000000000000000..a52da78929ecc8467c164031f83a77d46d6e2209 GIT binary patch literal 45071 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 literal 0 HcmV?d00001 diff --git a/docs/source/Examples/qlearning_all_columns.rst b/docs/source/Examples/qlearning_all_columns.rst new file mode 100644 index 0000000..437a229 --- /dev/null +++ b/docs/source/Examples/qlearning_all_columns.rst @@ -0,0 +1,168 @@ +Q-learning with column distortion +================================= + +Overview +-------- + +In the `previous `_ example, we applied Q-learning on a dataset consisting +of three columns. Moreover, we used a one dimensional state space; we discretized the range :math:`[0,1]` into bins and used the +resulting bin index as the state index. + +In this example, we want to include in the state space the distortion of an individual column. +We will do so by following what we did previously; for every column we assume a distortion in the range :math:`[0,1]` +which we discretize into a number of bins. This way a state is a tuple of indexes. We can use different number +of bins per column if needed but we won't do this here. + +The rest remain the same as in the previous tutorial. + +Code +---- + +The necessary imports + +.. code-block:: + + import random + import numpy as np + + from src.examples.helpers.load_full_mock_dataset import load_discrete_env, get_ethinicity_hierarchy, \ + get_gender_hierarchy, get_salary_bins, load_mock_subjects + from src.datasets import ColumnType + from src.spaces.env_type import DiscreteEnvType + from src.spaces.action_space import ActionSpace + from src.spaces.actions import ActionIdentity, ActionStringGeneralize, ActionNumericBinGeneralize + from src.algorithms.q_learning import QLearnConfig, QLearning + from src.policies.epsilon_greedy_policy import EpsilonGreedyPolicy, EpsilonDecayOption + from src.trainers.trainer import Trainer, TrainerConfig + from src.examples.helpers.plot_utils import plot_running_avg + from src.utils import INFO + +Next establish a set of configuration parameters + +.. code-block:: + + # configuration params + N_STATES = 10 + GAMMA = 0.99 + ALPHA = 0.1 + PUNISH_FACTOR = 2.0 + MAX_DISTORTION = 0.7 + MIN_DISTORTION = 0.4 + SAVE_DISTORTED_SETS_DIR = "/home/alex/qi3/drl_anonymity/src/examples/q_learning_all_cols_results/distorted_set" + EPS = 1.0 + EPSILON_DECAY_OPTION = EpsilonDecayOption.CONSTANT_RATE # .INVERSE_STEP + EPSILON_DECAY_FACTOR = 0.01 + USE_IDENTIFYING_COLUMNS_DIST = True + IDENTIFY_COLUMN_DIST_FACTOR = 0.1 + N_EPISODES = 1001 + N_ITRS_PER_EPISODE = 30 + OUT_OF_MAX_BOUND_REWARD = -1.0 + OUT_OF_MIN_BOUND_REWARD = -1.0 + IN_BOUNDS_REWARD = 5.0 + OUTPUT_MSG_FREQUENCY = 100 + N_ROUNDS_BELOW_MIN_DISTORTION = 10 + +The dirver code brings all the elements together + +.. code-block:: + + if __name__ == '__main__': + + # set the seed for random engine + random.seed(42) + + # specify the column types. An identifying column + # will me removed from the anonymized data set + # An INSENSITIVE_ATTRIBUTE remains intact. + # A QUASI_IDENTIFYING_ATTRIBUTE is used in the anonymization + # A SENSITIVE_ATTRIBUTE currently remains intact + column_types = {"NHSno": ColumnType.IDENTIFYING_ATTRIBUTE, + "given_name": ColumnType.IDENTIFYING_ATTRIBUTE, + "surname": ColumnType.IDENTIFYING_ATTRIBUTE, + "gender": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, + "dob": ColumnType.SENSITIVE_ATTRIBUTE, + "ethnicity": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, + "education": ColumnType.SENSITIVE_ATTRIBUTE, + "salary": ColumnType.SENSITIVE_ATTRIBUTE, + "mutation_status": ColumnType.SENSITIVE_ATTRIBUTE, + "preventative_treatment": ColumnType.SENSITIVE_ATTRIBUTE, + "diagnosis": ColumnType.INSENSITIVE_ATTRIBUTE} + + # define the action space + action_space = ActionSpace(n=10) + + # all the columns that are SENSITIVE_ATTRIBUTE will be kept as they are + # because currently we have no model + # also INSENSITIVE_ATTRIBUTE will be kept as is + # in order to declare this we use an ActionIdentity + action_space.add_many(ActionIdentity(column_name="dob"), + ActionIdentity(column_name="education"), + ActionIdentity(column_name="salary"), + ActionIdentity(column_name="diagnosis"), + ActionIdentity(column_name="mutation_status"), + ActionIdentity(column_name="preventative_treatment"), + ActionIdentity(column_name="ethnicity"), + ActionStringGeneralize(column_name="ethnicity", + generalization_table=get_ethinicity_hierarchy()), + ActionStringGeneralize(column_name="gender", + generalization_table=get_gender_hierarchy()), + ActionNumericBinGeneralize(column_name="salary", + generalization_table=get_salary_bins(ds=load_mock_subjects(), + n_states=N_STATES)) + ) + action_space.shuffle() + + env = load_discrete_env(env_type=DiscreteEnvType.TOTAL_DISTORTION_STATE, + n_states=N_STATES, + min_distortion=MIN_DISTORTION, max_distortion=MAX_DISTORTION, + total_min_distortion=MIN_DISTORTION, total_max_distortion=MAX_DISTORTION, + out_of_max_bound_reward=OUT_OF_MAX_BOUND_REWARD, + out_of_min_bound_reward=OUT_OF_MIN_BOUND_REWARD, + in_bounds_reward=IN_BOUNDS_REWARD, + punish_factor=PUNISH_FACTOR, + column_types=column_types, + action_space=action_space, + save_distoreted_sets_dir=SAVE_DISTORTED_SETS_DIR, + use_identifying_column_dist_in_total_dist=USE_IDENTIFYING_COLUMNS_DIST, + use_identifying_column_dist_factor=IDENTIFY_COLUMN_DIST_FACTOR, + gamma=GAMMA, + n_rounds_below_min_distortion=N_ROUNDS_BELOW_MIN_DISTORTION) + + agent_config = QLearnConfig(n_itrs_per_episode=N_ITRS_PER_EPISODE, gamma=GAMMA, + alpha=ALPHA, + policy=EpsilonGreedyPolicy(eps=EPS, n_actions=env.n_actions, + decay_op=EPSILON_DECAY_OPTION, + epsilon_decay_factor=EPSILON_DECAY_FACTOR)) + + agent = QLearning(algo_config=agent_config) + + trainer_config = TrainerConfig(n_episodes=N_EPISODES, output_msg_frequency=OUTPUT_MSG_FREQUENCY) + trainer = Trainer(env=env, agent=agent, configuration=trainer_config) + trainer.train() + + avg_rewards = trainer.total_rewards + plot_running_avg(avg_rewards, steps=100, + xlabel="Episodes", ylabel="Reward", + title="Running reward average over 100 episodes") + + avg_episode_dist = np.array(trainer.total_distortions) + print("{0} Max/Min distortion {1}/{2}".format(INFO, np.max(avg_episode_dist), np.min(avg_episode_dist))) + + plot_running_avg(avg_episode_dist, steps=100, + xlabel="Episodes", ylabel="Distortion", + title="Running distortion average over 100 episodes") + + +Results +------- + +The following images show the performance of the learning process + +.. figure:: images/qlearn_rewards_all_cols.png + + Running average reward. + + +.. figure:: images/qlearn_distortion_multi_cols.png + + Running average total distortion. From 79e0f57086a721ed044b4b17454b1eb278967bec Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 23 Apr 2022 18:08:19 +0100 Subject: [PATCH 3/4] Fix multi state qlearning --- .../source/Examples/qlearning_all_columns.rst | 16 +- src/datasets/dataset_wrapper.py | 1 + src/examples/q_learning_all_columns.py | 2 +- src/examples/q_learning_multistate.py | 154 +++++++++++------- src/spaces/discrete_state_environment.py | 79 ++++++++- 5 files changed, 175 insertions(+), 77 deletions(-) diff --git a/docs/source/Examples/qlearning_all_columns.rst b/docs/source/Examples/qlearning_all_columns.rst index 437a229..fa2b2c8 100644 --- a/docs/source/Examples/qlearning_all_columns.rst +++ b/docs/source/Examples/qlearning_all_columns.rst @@ -1,19 +1,13 @@ -Q-learning with column distortion -================================= +Q-learning with many columns +============================= Overview -------- In the `previous `_ example, we applied Q-learning on a dataset consisting of three columns. Moreover, we used a one dimensional state space; we discretized the range :math:`[0,1]` into bins and used the -resulting bin index as the state index. - -In this example, we want to include in the state space the distortion of an individual column. -We will do so by following what we did previously; for every column we assume a distortion in the range :math:`[0,1]` -which we discretize into a number of bins. This way a state is a tuple of indexes. We can use different number -of bins per column if needed but we won't do this here. - -The rest remain the same as in the previous tutorial. +resulting bin index as the state index. In this example, we will simply allow for more columns in the data set. +Other than that, this example is the same as the previous one. Code ---- @@ -83,7 +77,7 @@ The dirver code brings all the elements together "dob": ColumnType.SENSITIVE_ATTRIBUTE, "ethnicity": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, "education": ColumnType.SENSITIVE_ATTRIBUTE, - "salary": ColumnType.SENSITIVE_ATTRIBUTE, + "salary": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, "mutation_status": ColumnType.SENSITIVE_ATTRIBUTE, "preventative_treatment": ColumnType.SENSITIVE_ATTRIBUTE, "diagnosis": ColumnType.INSENSITIVE_ATTRIBUTE} diff --git a/src/datasets/dataset_wrapper.py b/src/datasets/dataset_wrapper.py index 26b95ad..10fe20e 100644 --- a/src/datasets/dataset_wrapper.py +++ b/src/datasets/dataset_wrapper.py @@ -214,6 +214,7 @@ def apply_column_transform(self, column_name: str, transform: Transform) -> None """ # get the column + column = self.get_column(col_name=column_name) column = transform.act(**{"data": column.values}) self.ds[transform.column_name] = column diff --git a/src/examples/q_learning_all_columns.py b/src/examples/q_learning_all_columns.py index e3837bf..0beba2a 100644 --- a/src/examples/q_learning_all_columns.py +++ b/src/examples/q_learning_all_columns.py @@ -52,7 +52,7 @@ "dob": ColumnType.SENSITIVE_ATTRIBUTE, "ethnicity": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, "education": ColumnType.SENSITIVE_ATTRIBUTE, - "salary": ColumnType.SENSITIVE_ATTRIBUTE, + "salary": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, "mutation_status": ColumnType.SENSITIVE_ATTRIBUTE, "preventative_treatment": ColumnType.SENSITIVE_ATTRIBUTE, "diagnosis": ColumnType.INSENSITIVE_ATTRIBUTE} diff --git a/src/examples/q_learning_multistate.py b/src/examples/q_learning_multistate.py index fa03adf..094925f 100644 --- a/src/examples/q_learning_multistate.py +++ b/src/examples/q_learning_multistate.py @@ -1,34 +1,38 @@ import random -from pathlib import Path import numpy as np -from src.algorithms.q_learning import QLearning, QLearnConfig +from src.examples.helpers.load_full_mock_dataset import load_discrete_env, get_ethinicity_hierarchy, \ + get_gender_hierarchy, get_salary_bins, load_mock_subjects +from src.datasets import ColumnType from src.spaces.env_type import DiscreteEnvType - -from src.trainers.trainer import Trainer +from src.spaces.action_space import ActionSpace +from src.spaces.actions import ActionIdentity, ActionStringGeneralize, ActionNumericBinGeneralize +from src.algorithms.q_learning import QLearnConfig, QLearning from src.policies.epsilon_greedy_policy import EpsilonGreedyPolicy, EpsilonDecayOption -from src.utils.plot_utils import plot_running_avg +from src.trainers.trainer import Trainer, TrainerConfig +from src.examples.helpers.plot_utils import plot_running_avg from src.utils import INFO -from src.examples.helpers.load_three_columns_mock_dataset import load_discrete_env -N_BINS = 10 -N_EPISODES = 1000 -OUTPUT_MSG_FREQUENCY = 100 +# configuration params +N_STATES = 10 GAMMA = 0.99 ALPHA = 0.1 -N_ITRS_PER_EPISODE = 30 +PUNISH_FACTOR = 2.0 +MAX_DISTORTION = 0.7 +MIN_DISTORTION = 0.4 +SAVE_DISTORTED_SETS_DIR = "/home/alex/qi3/drl_anonymity/src/examples/q_learning_all_cols_multi_state_results/distorted_set" EPS = 1.0 -EPSILON_DECAY_OPTION = EpsilonDecayOption.CONSTANT_RATE #.INVERSE_STEP +EPSILON_DECAY_OPTION = EpsilonDecayOption.CONSTANT_RATE # .INVERSE_STEP EPSILON_DECAY_FACTOR = 0.01 -MAX_DISTORTION = 0.7 -MIN_DISTORTION = 0.3 -#OUT_OF_MAX_BOUND_REWARD = -1.0 -#OUT_OF_MIN_BOUND_REWARD = -1.0 -#IN_BOUNDS_REWARD = 5.0 +USE_IDENTIFYING_COLUMNS_DIST = True +IDENTIFY_COLUMN_DIST_FACTOR = 0.1 +N_EPISODES = 1001 +N_ITRS_PER_EPISODE = 30 +OUT_OF_MAX_BOUND_REWARD = -1.0 +OUT_OF_MIN_BOUND_REWARD = -1.0 +IN_BOUNDS_REWARD = 5.0 +OUTPUT_MSG_FREQUENCY = 100 N_ROUNDS_BELOW_MIN_DISTORTION = 10 -SAVE_DISTORTED_SETS_DIR = "/home/alex/qi3/drl_anonymity/src/examples/q_learning_multistate_results/distorted_set" -#REWARD_FACTOR = 0.95 -PUNISH_FACTOR = 2.0 if __name__ == '__main__': @@ -36,36 +40,82 @@ # set the seed for random engine random.seed(42) + # specify the column types. An identifying column + # will me removed from the anonymized data set + # An INSENSITIVE_ATTRIBUTE remains intact. + # A QUASI_IDENTIFYING_ATTRIBUTE is used in the anonymization + # A SENSITIVE_ATTRIBUTE currently remains intact + column_types = {"NHSno": ColumnType.IDENTIFYING_ATTRIBUTE, + "given_name": ColumnType.IDENTIFYING_ATTRIBUTE, + "surname": ColumnType.IDENTIFYING_ATTRIBUTE, + "gender": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, + "dob": ColumnType.SENSITIVE_ATTRIBUTE, + "ethnicity": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, + "education": ColumnType.SENSITIVE_ATTRIBUTE, + "salary": ColumnType.QUASI_IDENTIFYING_ATTRIBUTE, + "mutation_status": ColumnType.SENSITIVE_ATTRIBUTE, + "preventative_treatment": ColumnType.SENSITIVE_ATTRIBUTE, + "diagnosis": ColumnType.INSENSITIVE_ATTRIBUTE} + + # define the action space + action_space = ActionSpace(n=10) + + # all the columns that are SENSITIVE_ATTRIBUTE will be kept as they are + # because currently we have no model + # also INSENSITIVE_ATTRIBUTE will be kept as is + # in order to declare this we use an ActionIdentity + action_space.add_many(ActionIdentity(column_name="dob"), + ActionIdentity(column_name="education"), + ActionIdentity(column_name="salary"), + ActionIdentity(column_name="diagnosis"), + ActionIdentity(column_name="mutation_status"), + ActionIdentity(column_name="preventative_treatment"), + ActionIdentity(column_name="ethnicity"), + ActionStringGeneralize(column_name="ethnicity", + generalization_table=get_ethinicity_hierarchy()), + ActionStringGeneralize(column_name="gender", + generalization_table=get_gender_hierarchy()), + ActionNumericBinGeneralize(column_name="salary", + generalization_table=get_salary_bins(ds=load_mock_subjects(), + n_states=N_STATES)) + ) + action_space.shuffle() + # load the discrete environment - env = load_discrete_env(env_type=DiscreteEnvType.MULTI_COLUMN_STATE, n_states=N_BINS, - min_distortion={"ethnicity": 0.15, "salary": 0.15, - "diagnosis": 0.0}, - max_distortion={"ethnicity": 0.35, "salary": 0.35, - "diagnosis": 0.0}, + env = load_discrete_env(env_type=DiscreteEnvType.MULTI_COLUMN_STATE, n_states=N_STATES, + min_distortion={"ethnicity": 0.133, "salary": 0.133, "gender": 0.133, + "dob": 0.0, "education": 0.0, "diagnosis": 0.0, + "mutation_status": 0.0, "preventative_treatment": 0.0, + "NHSno": 0.0, "given_name": 0.0, "surname": 0.0}, + max_distortion={"ethnicity": 0.133, "salary": 0.133, "gender": 0.133, + "dob": 0.0, "education": 0.0, "diagnosis": 0.0, + "mutation_status": 0.0, "preventative_treatment": 0.0, + "NHSno": 0.1, "given_name": 0.1, "surname": 0.1}, total_min_distortion=MIN_DISTORTION, total_max_distortion=MAX_DISTORTION, - punish_factor=PUNISH_FACTOR) - env.config.state_type = DiscreteEnvType.MULTI_COLUMN_STATE - - algo_config = QLearnConfig() - algo_config.n_itrs_per_episode = N_ITRS_PER_EPISODE - algo_config.gamma = GAMMA - algo_config.alpha = ALPHA - # algo_config.policy = SoftMaxPolicy(n_actions=len(action_space), tau=1.2) - algo_config.policy = EpsilonGreedyPolicy(eps=EPS, n_actions=env.n_actions, - decay_op=EPSILON_DECAY_OPTION, - epsilon_decay_factor=EPSILON_DECAY_FACTOR) - - # the learner we want to train - agent = QLearning(algo_config=algo_config) - - # create a trainer to train the Qlearning agent - configuration = {"n_episodes": N_EPISODES, "output_msg_frequency": OUTPUT_MSG_FREQUENCY} - trainer = Trainer(env=env, agent=agent, configuration=configuration) - - # train the agent + out_of_max_bound_reward=OUT_OF_MAX_BOUND_REWARD, + out_of_min_bound_reward=OUT_OF_MIN_BOUND_REWARD, + in_bounds_reward=IN_BOUNDS_REWARD, + punish_factor=PUNISH_FACTOR, + column_types=column_types, + action_space=action_space, + save_distoreted_sets_dir=SAVE_DISTORTED_SETS_DIR, + use_identifying_column_dist_in_total_dist=USE_IDENTIFYING_COLUMNS_DIST, + use_identifying_column_dist_factor=IDENTIFY_COLUMN_DIST_FACTOR, + gamma=GAMMA, + n_rounds_below_min_distortion=N_ROUNDS_BELOW_MIN_DISTORTION) + + agent_config = QLearnConfig(n_itrs_per_episode=N_ITRS_PER_EPISODE, gamma=GAMMA, + alpha=ALPHA, + policy=EpsilonGreedyPolicy(eps=EPS, n_actions=env.n_actions, + decay_op=EPSILON_DECAY_OPTION, + epsilon_decay_factor=EPSILON_DECAY_FACTOR)) + + agent = QLearning(algo_config=agent_config) + + trainer_config = TrainerConfig(n_episodes=N_EPISODES, output_msg_frequency=OUTPUT_MSG_FREQUENCY) + trainer = Trainer(env=env, agent=agent, configuration=trainer_config) trainer.train() - # avg_rewards = trainer.avg_rewards() avg_rewards = trainer.total_rewards plot_running_avg(avg_rewards, steps=100, xlabel="Episodes", ylabel="Reward", @@ -77,17 +127,3 @@ plot_running_avg(avg_episode_dist, steps=100, xlabel="Episodes", ylabel="Distortion", title="Running distortion average over 100 episodes") - - print("=============================================") - print("{0} Generating distorted dataset".format(INFO)) - - """ - # Let's play - env.reset() - - stop_criterion = IterationControl(n_itrs=10, min_dist=MIN_DISTORTION, max_dist=MAX_DISTORTION) - agent.play(env=env, stop_criterion=stop_criterion) - env.save_current_dataset(episode_index=-2, save_index=False) - """ - print("{0} Done....".format(INFO)) - print("=============================================") diff --git a/src/spaces/discrete_state_environment.py b/src/spaces/discrete_state_environment.py index 1a64ea0..3ed6c19 100644 --- a/src/spaces/discrete_state_environment.py +++ b/src/spaces/discrete_state_environment.py @@ -249,10 +249,10 @@ def get_aggregated_state(self, state_val: Any, column_name: str = None) -> Any: raise ValueError("Name {0} not in column bins names {1} ".format(column_name, list(self.column_bins.keys()))) if column_name is None: - column_dists = [(0.0, name) for name in self.column_bins] + column_dists = [(0.0, name) for name in self.column_bins if self.config.column_types[name] == ColumnType.QUASI_IDENTIFYING_ATTRIBUTE] else: - column_dists = [(self.column_distances[name], name) for name in self.column_bins] + column_dists = [(self.column_distances[name], name) for name in self.column_bins if self.config.column_types[name] == ColumnType.QUASI_IDENTIFYING_ATTRIBUTE] state = [] for distortion, name in column_dists: @@ -274,8 +274,13 @@ def initialize_column_counts(self) -> None: """ col_names = self.config.data_set.get_columns_names() - for col in col_names: - self.column_visits[col] = 0 + for name in col_names: + self.column_visits[name] = 0 + + # if it is an identifying attribute + # we have visited it + if self.config.column_types[name] == ColumnType.IDENTIFYING_ATTRIBUTE: + self.column_visits[name] = 1 def all_columns_visited(self) -> bool: """Returns true is all columns have been visited @@ -524,21 +529,83 @@ def _create_multi_column_state_bins(self) -> None: # create the column bins for name in self.column_names: - self.column_bins[name] = np.linspace(0.0, 1.0, self.config.n_states) + + # we create bins only for the QUASI_IDENTIFYING_ATTRIBUTE + # attributes + if self.config.column_types[name] == ColumnType.QUASI_IDENTIFYING_ATTRIBUTE: + self.column_bins[name] = np.linspace(0.0, 1.0, self.config.n_states) + #else: + # self.column_bins["all_the_rest"] = np.linspace(0.0, 1.0, self.config.n_states) if len(self.column_bins) == 3: self._build_three_columns() + elif len(self.column_bins) == 4: + self._build_4_columns() + elif len(self.column_bins) == 5: + self._build_5_columns() else: raise ValueError("Invalid number of columns. Cannot build the multi-column state bins") + # add the remaining columns + for name in self.column_names: + + # we create bins only for the QUASI_IDENTIFYING_ATTRIBUTE + # attributes + if self.config.column_types[name] != ColumnType.QUASI_IDENTIFYING_ATTRIBUTE: + self.column_bins[name] = np.linspace(0.0, 1.0, self.config.n_states) + def _build_three_columns(self): - name = self.column_names[0] + name = "" + for n in self.config.column_types: + if self.config.column_types[n] == ColumnType.QUASI_IDENTIFYING_ATTRIBUTE: + name = n + break + + if name == "": + raise ValueError("No QUASI_IDENTIFYING_ATTRIBUTE has been specified") + for i in range(len(self.column_bins[name])): for j in range(len(self.column_bins[name])): for k in range(len(self.column_bins[name])): self.state_space.append((i, j, k)) + def _build_4_columns(self): + + name = "" + for n in self.config.column_types: + if self.config.column_types[n] == ColumnType.QUASI_IDENTIFYING_ATTRIBUTE: + name = n + break + + if name == "": + raise ValueError("No QUASI_IDENTIFYING_ATTRIBUTE has been specified") + + for i1 in range(len(self.column_bins[name])): + for i2 in range(len(self.column_bins[name])): + for i3 in range(len(self.column_bins[name])): + for i4 in range(len(self.column_bins[name])): + self.state_space.append((i1, i2, i3, i4)) + + def _build_5_columns(self): + + name = "" + for n in self.config.column_types: + if self.config.column_types[n] == ColumnType.QUASI_IDENTIFYING_ATTRIBUTE: + name = n + break + + if name == "": + raise ValueError("No QUASI_IDENTIFYING_ATTRIBUTE has been specified") + + name = self.column_names[0] + for i1 in range(len(self.column_bins[name])): + for i2 in range(len(self.column_bins[name])): + for i3 in range(len(self.column_bins[name])): + for i4 in range(len(self.column_bins[name])): + for i5 in range(len(self.column_bins[name])): + self.state_space.append((i1, i2, i3, i4, i5)) + def _distort_identifying_attributes(self): for name in self.config.column_types: From 77ab27eece907ae814873643b22b09b762b764c3 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 23 Apr 2022 18:08:43 +0100 Subject: [PATCH 4/4] Add new images --- ...qlearn_distortion_multi_cols_multi_state.png | Bin 0 -> 45071 bytes .../qlearn_rewards_all_cols_multi_state.png | Bin 0 -> 43831 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/source/Examples/images/qlearn_distortion_multi_cols_multi_state.png create mode 100644 docs/source/Examples/images/qlearn_rewards_all_cols_multi_state.png diff --git a/docs/source/Examples/images/qlearn_distortion_multi_cols_multi_state.png b/docs/source/Examples/images/qlearn_distortion_multi_cols_multi_state.png new file mode 100644 index 0000000000000000000000000000000000000000..a52da78929ecc8467c164031f83a77d46d6e2209 GIT binary patch literal 45071 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 literal 0 HcmV?d00001