From dd1f5beec83cd70f61cbedfbc814170fabd2f939 Mon Sep 17 00:00:00 2001 From: Manos Date: Tue, 12 Oct 2021 11:00:50 +0200 Subject: [PATCH 1/3] problem: Reviewed lmdk-set-opts --- text/bibliography.bib | 9 +++ text/problem/theotherthing/main.tex | 9 +++ text/problem/theotherthing/solution.tex | 75 ++++++++++++++++++++++--- 3 files changed, 85 insertions(+), 8 deletions(-) diff --git a/text/bibliography.bib b/text/bibliography.bib index 896bf6d..0eb4fca 100644 --- a/text/bibliography.bib +++ b/text/bibliography.bib @@ -1761,6 +1761,15 @@ year = {2017} } +@inproceedings{meshgi2015expanding, + title={Expanding histogram of colors with gridding to improve tracking accuracy}, + author={Meshgi, Kourosh and Ishii, Shin}, + booktitle={2015 14th IAPR International Conference on Machine Vision Applications (MVA)}, + pages={475--479}, + year={2015}, + organization={IEEE} +} + @inproceedings{wang2017privacy, title = {Privacy Preserving Anonymity for Periodical SRS Data Publishing}, author = {Wang, Jie-Teng and Lin, Wen-Yang}, diff --git a/text/problem/theotherthing/main.tex b/text/problem/theotherthing/main.tex index 3bd7eb0..4dcab94 100644 --- a/text/problem/theotherthing/main.tex +++ b/text/problem/theotherthing/main.tex @@ -39,10 +39,16 @@ In Example~\ref{ex:lmdk-risk}, we demonstrate the extreme case of the applicatio \SetKwData{evalCur}{evalCur} \SetKwData{evalOrig}{evalOrig} \SetKwData{evalSum}{evalSum} +\SetKwData{h}{h} +\SetKwData{hi}{h$_i$} +\SetKwData{hist}{hist} +\SetKwData{histCur}{histCur} +\SetKwData{histTmp}{histTmp} \SetKwData{metricCur}{metricCur} \SetKwData{metricOrig}{metricOrig} \SetKwData{opt}{opt} \SetKwData{opti}{opt$_i$} +\SetKwData{opts}{opts} \SetKwData{optim}{optim} \SetKwData{optimi}{optim$_i$} \SetKwData{opts}{opts} @@ -51,7 +57,10 @@ In Example~\ref{ex:lmdk-risk}, we demonstrate the extreme case of the applicatio \SetKwFunction{calcMetric}{calcMetric} \SetKwFunction{evalSeq}{evalSeq} \SetKwFunction{getCombs}{getCombs} +\SetKwFunction{getDiff}{getDiff} +\SetKwFunction{getHist}{getHist} \SetKwFunction{getOpts}{getOpts} +\SetKwFunction{getNorm}{getNorm} \input{problem/theotherthing/contribution} \input{problem/theotherthing/problem} diff --git a/text/problem/theotherthing/solution.tex b/text/problem/theotherthing/solution.tex index bc970db..dfa9185 100644 --- a/text/problem/theotherthing/solution.tex +++ b/text/problem/theotherthing/solution.tex @@ -73,7 +73,7 @@ Next, we present a heuristic solution with improved time and space requirements. \paragraph{Heuristic} Algorithm~\ref{algo:lmdk-sel-heur}, follows an incremental methodology. -At each step it selects a new timestamp that corresponds to a regular ({non-\thething}) event from $T \setminus L$. +At each step it selects a new timestamp, that corresponds to a regular ({non-\thething}) event from $T \setminus L$, to create an option. \begin{algorithm} \caption{Heuristic dummy {\thething} set options selection} @@ -89,7 +89,7 @@ At each step it selects a new timestamp that corresponds to a regular ({non-\the \evalOrig $\leftarrow$ \evalSeq{$T, \emptyset, L$}\; % Get all possible option combinations - \optim $\leftarrow$ $[]$\; + \opts $\leftarrow$ $[]$\; $L' \leftarrow L$\; @@ -110,28 +110,87 @@ At each step it selects a new timestamp that corresponds to a regular ({non-\the \If{\diffCur $<$ \diffMin}{ \diffMin $\leftarrow$ \diffCur\; \optimi $\leftarrow$ \reg\; - }\label{algo:lmdk-sel-heur-comparison-end} + }\label{algo:lmdk-sel-heur-cmp-end} } % Save new point to landmarks $L'$.add(\optimi)\; % Add new option - \optim.append($L' \setminus L$)\; + \opts.append($L' \setminus L$)\; }\label{algo:lmdk-sel-heur-end} - \Return{\optim} + \Return{\opts} \end{algorithm} -Similar to Algorithm~\ref{algo:lmdk-sel-opt}, the selection is done based on a predefined metric (Lines~{\ref{algo:lmdk-sel-heur-comparison}-\ref{algo:lmdk-sel-heur-comparison-end}}). +Similar to Algorithm~\ref{algo:lmdk-sel-opt}, it selects new options based on a predefined metric (Lines~{\ref{algo:lmdk-sel-heur-comparison}-\ref{algo:lmdk-sel-heur-cmp-end}}). This process (Lines~{\ref{algo:lmdk-sel-heur-while}-\ref{algo:lmdk-sel-heur-end}}) goes on until we select a set that is equal to the size of the series of events, i.e.,~$L' = T$. -In terms of complexity: given $n$ regular events it requires $\mathcal{O}(n^2)$ time and space. +In terms of complexity, given $n$ regular events it requires $\mathcal{O}(n^2)$ time and space. Note that the reverse heuristic approach, i.e.,~starting with $T$ {\thethings} and removing until $L$, performs similarly with Algorithm~\ref{algo:lmdk-sel-heur}. +\paragraph{Partitioned} +We improve the complexity of Algorithm~\ref{algo:lmdk-sel-opt} by partitioning the {\thething} timestamp sequence $L$. +Algorithm~\ref{algo:lmdk-sel-hist}, \getHist generates a histogram from $L$ with bins of size \h. +We find \h by using the Freedman–Diaconis rule which is resilient to outliers and takes into account the data variability and data size~\cite{meshgi2015expanding}. +For every possible histogram version, the \getDiff function finds the difference between two histograms; for this operation we utilize the Euclidean distance~(see Section~\ref{subsec:sel-utl} for more details). -\mk{WIP: Histograms} +\begin{algorithm} + \caption{Partitioned dummy {\thething} set options selection} + \label{algo:lmdk-sel-hist} + + \DontPrintSemicolon + + \KwData{$T, L$} + \KwResult{\opts} + \BlankLine + + \hist, \h $\leftarrow$ \getHist{$T, L$}\; + + \histCur $\leftarrow$ hist\; + + \opts $\leftarrow$ $[]$\; + + \While{sum($L'$) $\neq$ len($T$)}{ \label{algo:lmdk-sel-hist-while} + % Track the minimum (best) evaluation + \diffMin $\leftarrow$ $\infty$\; + + % The candidate option + \opt $\leftarrow$ \histCur\; + + % Check every possibility + \ForEach{\hi \reg $L'$}{ \label{algo:lmdk-sel-hist-cmp-start} + + % Can we add one more point? + \If{\hi $+$ $1$ $\leq$ \h}{ + \histTmp $\leftarrow$ \histCur\; + \histTmp$[i]$ $\leftarrow$ \histTmp$[i]$ $+$ $1$\; + % Find difference from original + \diffCur $\leftarrow$ \getDiff{\hist, \histTmp}\; + + % Remember if it is the best that you've seen + \If{\diffCur $<$ \diffMin}{ \label{algo:lmdk-sel-hist-cmp} + \diffMin $\leftarrow$ \diffCur\; + \opt $\leftarrow$ \histTmp\; + } + + } + + } \label{algo:lmdk-sel-hist-cmp-end} + + % Update current histogram + \histCur $\leftarrow$ \opt\; + % Add current best to options + \opts $\leftarrow$ \opt\; + + } \label{algo:lmdk-sel-hist-end} + + \Return{\opts} +\end{algorithm} + +Between Lines~{\ref{algo:lmdk-sel-hist-cmp-start}-\ref{algo:lmdk-sel-hist-cmp-end}} we check every possible histogram version by incrementing each bin by $1$ and comparing it to the original (Line~\ref{algo:lmdk-sel-hist-cmp}). +In the end of the process, we return \opts which contains all the versions of \hist that are closest to \hist for all possible sizes of \hist. \subsubsection{Privacy-preserving option selection} From 0b1ce3cbbc44cd064beb885ed96e85ce523b6a0a Mon Sep 17 00:00:00 2001 From: Manos Date: Tue, 12 Oct 2021 12:01:20 +0200 Subject: [PATCH 2/3] problem: Wrote lmdk-opt-sel --- text/problem/theotherthing/solution.tex | 30 ++++++++++++++----------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/text/problem/theotherthing/solution.tex b/text/problem/theotherthing/solution.tex index dfa9185..fe37676 100644 --- a/text/problem/theotherthing/solution.tex +++ b/text/problem/theotherthing/solution.tex @@ -42,16 +42,13 @@ It finds the option that is the most \emph{similar} to the original (Lines~{\ref % Evaluate the original \evalOrig $\leftarrow$ \evalSeq{$T, \emptyset, L$}\; - % Get all possible option combinations - \opts $\leftarrow$ \getOpts{$T, L$}\; - % Track the minimum (best) evaluation \diffMin $\leftarrow$ $\infty$\; % Track the optimal sequence (the one with the best evaluation) - \optim $\leftarrow$ $[]$\; + \opts $\leftarrow$ $[]$\; - \ForEach{\opt $\in$ \opts}{ \label{algo:lmdk-sel-opt-for-each} + \ForEach{\opt $\in$ \getOpts{$T, L$}}{ \label{algo:lmdk-sel-opt-for-each} \evalCur $\leftarrow 0$\; \ForEach{\opti $\in$ \opt}{ \evalCur $\leftarrow$ \evalCur $+$ \evalSeq{$T, \opti, L$}/\#\opt\; \label{algo:lmdk-sel-opt-comparison} @@ -60,10 +57,10 @@ It finds the option that is the most \emph{similar} to the original (Lines~{\ref \diffCur $\leftarrow \left|\evalCur - \evalOrig\right|$\; \If{\diffCur $<$ \diffMin}{ \diffMin $\leftarrow$ \diffCur\; - \optim $\leftarrow$ \opt\; + \opts $\leftarrow$ \opt\; } } \label{algo:lmdk-sel-opt-end} - \Return{\optim} + \Return{\opts} \end{algorithm} Algorithm~\ref{algo:lmdk-sel-opt} guarantees to return the optimal set of dummy {\thethings} with regard to the original set $L$. @@ -82,7 +79,7 @@ At each step it selects a new timestamp, that corresponds to a regular ({non-\th \DontPrintSemicolon \KwData{$T, L$} - \KwResult{\optim} + \KwResult{\opts} \BlankLine % Evaluate the original @@ -196,18 +193,25 @@ In the end of the process, we return \opts which contains all the versions of \h \subsubsection{Privacy-preserving option selection} \label{subsec:lmdk-opt-sel} -\mk{WIP} +The Algorithms of Section~\ref{subsec:lmdk-set-opts} return a set of possible versions of the original {\thething} set $L$ by adding extra timestamps in it from the series of events at timestamps $T \supseteq L$. +In the next step of the process, we randomly select a set by utilizing the exponential mechanism (Section~\ref{subsec:prv-mech}). +Prior to selecting a set, the exponential mechanism evaluates each set using a score function. +One way evaluate each set is by taking into account the temporal position the events in the sequence. % Nearby events Events that occur at recent timestamps are more likely to reveal sensitive information regarding the users involved~\cite{kellaris2014differentially}. Thus, taking into account more recent events with respect to {\thethings} can result in less privacy loss and better privacy protection overall. This leads to worse data utility. - % Depending on the {\thething} discovery technique The values of events near a {\thething} are usually similar to that of the latter. Therefore, privacy-preserving mechanisms are likely to approximate their values based on the nearest {\thething} instead of investing extra privacy budget to perturb their actual values; thus, spending less privacy budget. Saving privacy budget for releasing perturbed versions of actual event values can bring about better data utility. - % Distant events -However, indicating the existence of randomized/dummy {\thethings} nearby actual {\thethings} can increase the adversarial confidence regarding the location of the latter within a series of events. -Hence, choosing randomized/dummy {\thethings} far from the actual {\thethings} (and thus less relevant) can limit the final privacy loss. +However, indicating the existence of dummy {\thethings} nearby actual {\thethings} can increase the adversarial confidence regarding the location of the latter within a series of events. +Hence, choosing dummy {\thethings} far from the actual {\thethings} (and thus less relevant) can limit the final privacy loss. + +Another approach for the score function is to consider the number of events in each set. +On the one hand, sets with more dummy {\thethings} may render actual {\thethings} more indistinguishable probabilistically. +That is due to the fact that, it is harder for an adversary to pick a {\thething} when the ratio of {\thethings} to the size of the set gets lower. +On the other hand, more dummy {\thethings} lead to distributing the privacy budget to more events, and therefore investing less at each timestamp. +Thus, providing a better level of privacy protection. From 5b81702d3709dc8097d957c22b01b2b24125238f Mon Sep 17 00:00:00 2001 From: Manos Date: Tue, 12 Oct 2021 12:04:00 +0200 Subject: [PATCH 3/3] lmdk_sel: Tested the Eucl distance in exp_mech --- code/lib/exp_mech.py | 45 ++++++++++++++++---------------- rslt/bgt_cmp/Copenhagen-sel.pdf | Bin 14642 -> 14649 bytes rslt/bgt_cmp/HUE-sel.pdf | Bin 17126 -> 17126 bytes rslt/bgt_cmp/T-drive-sel.pdf | Bin 0 -> 16335 bytes 4 files changed, 23 insertions(+), 22 deletions(-) create mode 100644 rslt/bgt_cmp/T-drive-sel.pdf diff --git a/code/lib/exp_mech.py b/code/lib/exp_mech.py index cd298fb..60bab2b 100644 --- a/code/lib/exp_mech.py +++ b/code/lib/exp_mech.py @@ -11,33 +11,34 @@ from matplotlib import pyplot as plt import time -''' - The scoring function. - - Parameters: - data - The data. - option - The option to evaluate. - Returns: - The score for the option. -''' def score(data, option): + ''' + The scoring function. + + Parameters: + data - The data. + option - The option to evaluate. + Returns: + The score for the option. + ''' return (option.sum() - data.sum()) + # return lmdk_lib.get_norm(data, option) -''' - The exponential mechanism. - - Parameters: - x - The data. - R - The possible outputs. - u - The scoring function. - delta - The sensitivity of the scoring function. - epsilon - The privacy budget. - Returns: - res - A randomly sampled output. - pr - The PDF of all possible outputs. -''' def exponential(x, R, u, delta, epsilon): + ''' + The exponential mechanism. + + Parameters: + x - The data. + R - The possible outputs. + u - The scoring function. + delta - The sensitivity of the scoring function. + epsilon - The privacy budget. + Returns: + res - A randomly sampled output. + pr - The PDF of all possible outputs. + ''' # Calculate the score for each element of R scores = [u(x, r) for r in R] # Normalize the scores between 0 and 1 diff --git a/rslt/bgt_cmp/Copenhagen-sel.pdf b/rslt/bgt_cmp/Copenhagen-sel.pdf index b81c1c1b597b86ac4cc801d28cbd18eee487d5a7..9736b4d4188430ca31d5bcf9787c1abd60a40a27 100644 GIT binary patch delta 2418 zcmZuvc|4T)A8+IwXR#=;+KdwEnP-k?W>9VxV-!k6n{rHy)u1G66iK-aQ5rHLH)#w) zwVJV*B3D>h_JJD@?-aR>~EfZ{(4^T@8|t_AKz~ky^dblfncaXGBNXOx}j5c zbV+jLu$AAhVcOjqUA5h2T~U65a&?AQ74ysbbzLfgjygs639@dEsNy{ny_LZe?;%S} z+w2N4V?5J!*uOMUj9D6VS9#;Brs+j_{#)A_bypgF$vol9_;7jsOk$!AZ=Wo2%CqZd z(WQf`?Y zGtzdSs-?|mun0j1&_wBUr(5;MhM09=IA_>NidQ$%Nj!kIhH*1JyJNUb;YT>?&Qv4?ARTeg$nJeQ(jfj3#3`lEH|z zSibZ0epbHC6(8bMVnjBh{z%ToMbL2~>0NAEs=SUv!bzj}7d7syUpJ-{vg@3!bWR38 zqvmJI9ptH<@XO^!pFYg1onkxC>Mzw4x#vx+Onw@3EXf^Y?>bKNRWTV(_Xvs1zT}g} zl4o*|M->BOJ6hgX-loVG&kw159xP-)F&?JtV*CaCokyHUZadb4Bl=$3_jXnoyT_6m zXAJ()9XA&h=H*fHymxAFE~9(S-KuqVQoGC%sOmf0w5Te#s5+aP!Co=ms7)g5Dajjc zIlte=ULiLivNXWhpy#YHY1ZzYElaKFiALLy{T|Qjm86&`lBGe* z?CQSe|3l_~j))JQicL4I9LunrZa`c}YAhvbmnQDb7>c}9WV__>3bCpy4Wt{_S+uPW z)#azK#a)wFDG>(s&ub0b!o!@tJ+r>_u{u8N!O!Kdm(2!{O3j6FUtPkQk=$o^h3)@oIwT@ik0 z(fjh^J9#^en8MEJ&vG132~^T{+15XIjX5U;*lHYK-aX9_kt19wAZH)Sh{!1(D;qFr z9W^#vG`~L(vjAS{%^OVhv86fQ-!9ioWv;&BhYa_~o{f2RF>QdreU%kn**HU(T{H0S z`pq!NKHmPr&JnWI4JFj!pLoes*9+ExCm#+^_^eLP4W4EKS;I$-)MUQDT)9mHaanZjGvQ2&%ZH6Gt}E-0!v(Vwe$=^f zX$sZhWtgD6zwG>2!aBX>vESR(f~;rhH91RD1zso4Q7ghGD_qBS-h~zhZ#xG4(095y zCA{cd_1@g!g16}Ji^8?wu)tvI90xf(F;&s6tuG8Iumy0MLL-PA&tkICq7UfGa zb@3{f@~LC(gWx9L-KcvSBhkV6XQY;r=|z^TbX!AqQNEa@nzGZPnRna#z>)6JxF;Qy zzTx-jDVH`7q0XA;m?;t(2L5D3R`AZ!yFz`!sNf-piZ01yD+7zp70 zm}C4eDga_Ico-Q+5RShoOT-G#VK7)27ejyxW6}R#F=MM`ES3l(V<93;7zaYai2>Z- zaB&bI+#rA>VE;_~m%w-cUaz!UO--VEp%` zZBpTb1ON|9Ou*q`Z4v&aEh318T@w*6^tQJ8CqihLLn09rt_ux-1Yt910EZV&j0PYK gjElkkRU?>wmg?_CM;aP3R|r^1A`*qNpjaaR1+ulJ`~Uy| delta 2377 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 JJ{un9|1bAY=D7d> diff --git a/rslt/bgt_cmp/T-drive-sel.pdf b/rslt/bgt_cmp/T-drive-sel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1832b876f8ba72080b355f70e10d1b5d586f08ac GIT binary patch literal 16335 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

0lVp-dFvYSu#|!DPD;_ePlBT+DZg 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 literal 0 HcmV?d00001