Privacidade de Dados e Anonimização em Python
Rebeca Gonzalez
Data Engineer


$$
$$

# Import the scikit-learn naive Bayes classifier from sklearn.naive_bayes import GaussianNB# Import the differentially private naive Bayes classifier from diffprivlib.models import GaussianNB
from sklearn.naive_bayes import GaussianNB# Construa o classificador não privado nonprivate_clf = GaussianNB()# Treine o modelo nos dados nonprivate_clf.fit(X_train, y_train)print("The accuracy of the non-private model is ", nonprivate_clf.score(X_test, y_test))
The accuracy of the non-private model is 0.8333333333333334
from diffprivlib.models import GaussianNB as dp_GaussianNB# Construa o classificador privado com construtor vazio private_clf = dp_GaussianNB()# Treine o modelo nos dados e veja a pontuação private_clf.fit(X_train, y_train)print("The accuracy of the private model is ", private_clf.score(X_test, y_test))
The accuracy of the private model is 0.7
PrivacyLeakWarning: Bounds have not been specified and will be calculated
on the data provided. This will result in additional privacy leakage.
To ensure differential privacy and no additional privacy leakage, specify bounds for each dimension.
"privacy leakage, specify bounds for each dimension.", PrivacyLeakWarning)
Para evitar vazamento de dados, podemos definir os valores mín. e máx. passando o argumento bounds. Pode ser:
(0,100)
([0,1,0,2],[10,80,5,70])
# Defina bounds para cobrir pelo menos os valores mín. e máx. bounds = (X_train.min(axis=0) - 1, X_train.max(axis=0) + 1)# Construa o classificador com epsilon de 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)# Treine o modelo nos dados e veja a pontuação dp_clf.fit(X_train, y_train) print("The accuracy of the private model is ", private_clf.score(X_test, y_test))
The accuracy of the private model is 0.807000
# Importe o módulo random import random # Defina os mín. e máx. de bounds nos dados com um pouco de ruído bounds = (X_train.min(axis=0) - random.sample(range(0, 30), 12), X_train.max(axis=0) + random.sample(range(0, 30), 12))# Construa o classificador com epsilon de 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)# Treine o modelo nos dados e veja a pontuação dp_clf.fit(X_train, y_train) print("The accuracy of private classifier with bounds is ", dp_clf.score(X_test, y_test))
The accuracy of private classifier with bounds is 0.7544444444

Privacidade de Dados e Anonimização em Python