Confidentialité des données et anonymisation en Python
Rebeca Gonzalez
Data engineer
$$ $$ Méthode de réduction de dimension souvent utilisée pour réduire la dimensionnalité de grands ensembles de données.
L'ACP crée de nouvelles « composantes principales » à partir de transformations linéaires des variables d'origine.
Dans un ensemble de données sur les bières, l'ACP construit de nouvelles variables. Par exemple :
$$ 2\times AlcoholicVolume - BitternessLevel$$

$$
# Explorer l'ensemble de données
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
# Obtenir les données sans la colonne cible x_data = df.drop(['target'], axis = 1)# Colonne cible sous forme de tableau de valeurs y = df.target.values
# Importer PCA de Scikit-learn from sklearn.decomposition import PCA# Initialiser l'ACP avec un nombre de composantes égal au nombre de colonnes pca = PCA(n_components=len(x_data.columns))# Appliquer l'ACP aux données x_data_pca = pca.fit_transform(x_data)
# Voir les données
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],
...,
# Créer un DataFrame à partir des données transformées par l'ACP df_x_data_pca = pd.DataFrame(x_data_pca)# Examiner la dimension de l'ensemble de données df_x_data_pca.shape
(1213, 13)
$$
Effectuer une classification par régression logistique et vérifier la perte de justesse.
# Diviser l'ensemble obtenu en données d'entraînement et de test x_train, x_test, y_train, y_test = train_test_split(x_data_pca, y, test_size=0.2)# Créer le modèle lr = LogisticRegression(max_iter=200)# Entraîner le modèle lr.fit(x_train,y_train)# Exécuter le modèle et prédire pour obtenir le score de justesse acc = lr.score(x_test, y_test) * 100 print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Effectuer une classification par régression logistique et consulter le score avec les données originales
# Diviser l'ensemble obtenu en données d'entraînement et de test
x_train, x_test, y_train, y_test = train_test_split(x_data.to_numpy(),y,test_size = 0.2)
# Créer le modèle
lr = LogisticRegression(max_iter=200)
# Entraîner le modèle
lr.fit(x_train,y_train)
# Exécuter le modèle et prédire pour obtenir le score de justesse
acc = lr.score(x_test,y_test) * 100
print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Confidentialité des données et anonymisation en Python