From ed66d8dddf4369205e0222660eafcf7554cea5eb Mon Sep 17 00:00:00 2001 From: Manos Katsomallos Date: Wed, 6 Oct 2021 13:30:15 +0200 Subject: [PATCH] lmdk_sel: Trying without Pareto --- code/lib/lmdk_sel.py | 19 +++++++++++++++--- ...agen-sel.pdf => Copenhagen-sel-pareto.pdf} | Bin 14643 -> 14622 bytes .../{HUE-sel.pdf => HUE-sel-pareto.pdf} | Bin 15975 -> 16610 bytes ...T-drive-sel.pdf => T-drive-sel-pareto.pdf} | Bin 15612 -> 15619 bytes 4 files changed, 16 insertions(+), 3 deletions(-) rename rslt/bgt_cmp/{Copenhagen-sel.pdf => Copenhagen-sel-pareto.pdf} (83%) rename rslt/bgt_cmp/{HUE-sel.pdf => HUE-sel-pareto.pdf} (75%) rename rslt/bgt_cmp/{T-drive-sel.pdf => T-drive-sel-pareto.pdf} (80%) diff --git a/code/lib/lmdk_sel.py b/code/lib/lmdk_sel.py index 421ab7e..46e250c 100644 --- a/code/lib/lmdk_sel.py +++ b/code/lib/lmdk_sel.py @@ -299,6 +299,19 @@ def get_non_opts_from_bottom(seq, lmdks): def find_lmdks(seq, lmdks, epsilon): + ''' + Add dummy landmarks to original landmarks. + + Parameters: + seq - All of the data points. + lmdks - The original landmarks. + epsilon - The available privacy budget. + + Returns: + lmdks_new - The new landmarks. + The remaining privacy budget. + ''' + # The privacy budget to use eps_sel = 0 if len(lmdks) > 0 and len(seq) != len(lmdks): # Get landmarks timestamps in sequence @@ -310,10 +323,10 @@ def find_lmdks(seq, lmdks, epsilon): # Landmarks selection budget eps_sel = epsilon/(len(lmdks_seq) + 1) # Get private landmarks timestamps - lmdks_seq, _ = exp_mech.exponential_pareto(hist, opts, exp_mech.score, 1.0, eps_sel) + lmdks_seq, _ = exp_mech.exponential(hist, opts, exp_mech.score, 1.0, eps_sel) # Get actual landmarks values - lmdks = seq[lmdks_seq] - return lmdks, epsilon - eps_sel + lmdks_new = seq[lmdks_seq] + return lmdks_new, epsilon - eps_sel def test(): # Start and end points of the sequence diff --git a/rslt/bgt_cmp/Copenhagen-sel.pdf b/rslt/bgt_cmp/Copenhagen-sel-pareto.pdf similarity index 83% rename from rslt/bgt_cmp/Copenhagen-sel.pdf rename to rslt/bgt_cmp/Copenhagen-sel-pareto.pdf index d5065ce73f45ba86dd0e774b85bf4c577ed5a6c8..7ecdc82428a619c70f57ce2215d701d85a2ec31d 100644 GIT binary patch delta 2367 zcmZuvdpwl+9RvUA5bCD4SlRW=T+7%$y2&(kCB>Xc=7_|Tx#;EBV=dRG+}wD# zU4$qKhi`;s}Uo$l#FPzy|&u^^lTJ=|Z&>aP4w)3ZSgwYKjy_TlL zs8x1M@4HQ*@rBwsoU7aGZwH-cCB4|9BCmuVLTlfXPkW?s(`bn7X$N%; ztv{I$xA~adW|rE;pLkMM#5aX@(t==%$2P(jtgr?u#zQPWRz;~aeUs)D#1ZX8*^J`^ zv6)JZ%DB=67J`O@jT|CkQIuz=FJ8FFJ4&-qio|UWt`w%anjA++P-G=~o-u}XQ)Liq zV_%WUt8rE=;_qTGb;LWMlxaHh;C=a_;>nzb&#;adwfNpR0HvF!oM|Lp3A}|juJD`! z?wOWO22Q+i$PUc}$!O7{iLMiwEwrHy)6}cKjMVg@YJ5A~kl1UY=d=>$B_}={O4mj= zAd^{9>|fdOZY8D;AN-It);-CF?x^_vHT_ZSYGz-PE2oc5?cL$JsyY&`;4CR2=OiJ_ z%*L8>xBFsw=PC``c*+mHDIw)27U^~@@^ir3@)=J_Yj&CiW8A6_3f zj8s{eIktKV`RWX^JBF-vsVit{<+lb6T{;`V;W+H6+i!ou_jqg1j|x}%UnHsANk^5T zlMW|)>+77hs%8|kVDDsqe68rw^06O=xHB1hRx&(0@l?T`54OG0RfP{j!m1P-XMc)Z zi4m&Ushe*8&yB9Oe8F?c-1JXDT}-0i&YnzLHvjU9$Qz z7;tXyXtA(4px@tkX2^i?!Ek?eE({HS#dfbWtczc)KGH9kq8cU}gH%$GMr%g_kxr z(iewEC4#BKH;nRtu@ct4Z}P9bv#fRWdKo^4^k{TM9t&ly9i@Qf+7nfMgOI%Mc5Rj8)E#*? zYn4WkjN7X%RhNvkzP{k6);2%F5A92PZB0sK&)2`Sja#%D{HkWY{>{@U+k;zZBcA*) zyT>Vg>l|+4A$;Qb`Lh?F>O7m}{+z|{s1q&G)~-f4k_yy(CCXN(n9B2ll!uRk_#MWb zJig|(*Ia&TZTwe4#$)QjKM(rn(_DIZ$NEFrVBC1So2cAzCU=Myq{`iO>1>mjVSp_G zcV98OIw+VOIF-uyWw8J5=;h#Z(cJ;*fv0C_HG*MiA}!Bzb2EOT)K(Ps-7+oZw{cJJ zabL`j&LIVLm(>TpXM&tHzbDs*3dVhDJw7f2do1Y`KXfOX(I0Ef;*88@UAP{R?m}Kr zO#Ag>Wu8Sxnaf?FU2w$rD_HlRN3*?y4|fHM3e%dy60~dfo_gw9?@umfN!}&BdaF*T zs@3`;ZuNnWrPYB;Eaao^UvOnz1MhwA$98j!mazk3$-6@nRR@*`eujR@)0FaLJ+9!U zo>7ekrLSznV`7@Jo3^iX#DiDhZ@M>fiQ;Z)`LFcu<<2AYs3k+S9PQJHh}iIiM0!LB zZQ~Xf8jZl>FaYM$1%!c)wl9V)6!17402k+iO~qx9=58#0{lfqo2NR1ye7dY7FkS}3 z!MNgJh)~=JnHR4?n#B{)HYOgDreR@{EC!Nf+F=1e2E!3RSgId@B@tvW9F{=*#AE*9 z8NlHIl5{Z+f~B(ocmO6y^YD1AOf8-uD-2?Be+kFj7#9e_GQ}W)AR`RnK{7-}V zhcJOCOC$n#nZ!g0FEcIT-%N|NzGP{GBuMJt+L%8HCdxP@5lPbH!U8x*+6;Dm{?duD k00EGx#pD01kw_2u_DBRBVQpQ!M8qqDIE1mWgZqBO@2XOoOaK4? delta 2327 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 M5T>ndVQ&fhAHRCa*Z=?k