Privasi Data dan Anonimisasi di 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# Bangun classifier non-pribadi nonprivate_clf = GaussianNB()# Latih model pada data nonprivate_clf.fit(X_train, y_train)print("Akurasi model non-pribadi adalah ", nonprivate_clf.score(X_test, y_test))
Akurasi model non-pribadi adalah 0.8333333333333334
from diffprivlib.models import GaussianNB as dp_GaussianNB# Bangun classifier privat dengan konstruktor kosong private_clf = dp_GaussianNB()# Latih model pada data dan lihat skornya private_clf.fit(X_train, y_train)print("Akurasi model privat adalah ", private_clf.score(X_test, y_test))
Akurasi model privat adalah 0.7
PrivacyLeakWarning: Batas (bounds) belum ditentukan dan akan dihitung
dari data yang diberikan. Ini dapat menimbulkan kebocoran privasi tambahan.
Untuk memastikan privasi diferensial tanpa kebocoran tambahan, tentukan bounds untuk tiap dimensi.
"privacy leakage, specify bounds for each dimension.", PrivacyLeakWarning)
Untuk mencegah kebocoran data, ganti nilai min dan max dengan argumen bounds. Dapat berupa:
(0,100)
([0,1,0,2],[10,80,5,70])
# Tetapkan bounds untuk minimal mencakup nilai min dan max bounds = (X_train.min(axis=0) - 1, X_train.max(axis=0) + 1)# Bangun classifier dengan epsilon 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)# Latih model pada data dan lihat skornya dp_clf.fit(X_train, y_train) print("Akurasi model privat adalah ", private_clf.score(X_test, y_test))
Akurasi model privat adalah 0.807000
# Import modul random import random # Tetapkan min dan max bounds pada data ditambah sedikit noise bounds = (X_train.min(axis=0) - random.sample(range(0, 30), 12), X_train.max(axis=0) + random.sample(range(0, 30), 12))# Bangun classifier dengan epsilon 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)# Latih model pada data dan lihat skornya dp_clf.fit(X_train, y_train) print("Akurasi classifier privat dengan bounds adalah ", dp_clf.score(X_test, y_test))
Akurasi classifier privat dengan bounds adalah 0.7544444444

Privasi Data dan Anonimisasi di Python