Dataprivacy en anonimisering in Python
Rebeca Gonzalez
Data engineer
$$ $$ Methode voor dimensionaliteitsreductie, vaak gebruikt om grote datasets te verkleinen.
PCA maakt nieuwe "hoofcomponenten" via lineaire transformaties van de originele features.
In een dataset met bieren construeert PCA nieuwe features. Bijvoorbeeld:
$$ 2\times AlcoholicVolume - BitternessLevel$$

$$
# Verken de dataset
heart_df.head()
age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal target
0 63 1 3 145 233 1 0 150 0 2.3 0 0 1 1
1 37 1 2 130 250 0 1 187 0 3.5 0 0 2 1
2 41 0 1 130 204 0 0 172 0 1.4 2 0 2 1
3 56 1 1 120 236 0 1 178 0 0.8 2 0 2 1
4 57 0 0 120 354 0 1 163 1 0.6 2 0 2 1
# Verkrijg de data zonder de target-kolom x_data = df.drop(['target'], axis = 1)# Target-kolom als array met waarden y = df.target.values
# Importeer PCA uit Scikit-learn from sklearn.decomposition import PCA# Initialiseer PCA met evenveel componenten als kolommen pca = PCA(n_components=len(x_data.columns))# Pas PCA toe op de data x_data_pca = pca.fit_transform(x_data)
# Bekijk de data
x_data_pca
array([[-1.22673448e+01, 2.87383781e+00, 1.49698788e+01, ...,
7.31102828e-01, -2.90393586e-01, 5.12575925e-01],
[ 2.69013712e+00, -3.98713736e+01, 8.77882303e-01, ...,
4.04206943e-01, -4.25920179e-01, -1.48124511e-01],
[-4.29502141e+01, -2.36368199e+01, 1.75944589e+00, ...,
-9.15397287e-01, 2.17828257e-01, 7.97593843e-02],
...,
# Maak een DataFrame van de PCA-uitvoer df_x_data_pca = pd.DataFrame(x_data_pca)# Controleer de vorm van de dataset df_x_data_pca.shape
(1213, 13)
$$
Voer classificatie uit met logistieke regressie en kijk naar nauwkeurigheidsverlies.
# Splits de resulterende dataset in train- en testdata x_train, x_test, y_train, y_test = train_test_split(x_data_pca, y, test_size=0.2)# Maak het model lr = LogisticRegression(max_iter=200)# Train het model lr.fit(x_train,y_train)# Voer het model uit en voorspel om de accuracy te krijgen acc = lr.score(x_test, y_test) * 100 print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Voer classificatie uit met logistieke regressie en bekijk de score met de originele data
# Splits de resulterende dataset in train- en testdata
x_train, x_test, y_train, y_test = train_test_split(x_data.to_numpy(),y,test_size = 0.2)
# Maak het model
lr = LogisticRegression(max_iter=200)
# Train het model
lr.fit(x_train,y_train)
# Voer het model uit en voorspel om de accuracy te krijgen
acc = lr.score(x_test,y_test) * 100
print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Dataprivacy en anonimisering in Python