PCA để ẩn danh

Bảo mật dữ liệu và Ẩn danh trong Python

Rebeca Gonzalez

Data engineer

Phân tích thành phần chính (PCA)

$$ $$ Phương pháp giảm chiều thường dùng để giảm số chiều của tập dữ liệu lớn.

Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu bằng PCA

  • PCA tạo các "thành phần chính" mới từ các biến đổi tuyến tính của đặc trưng gốc.

  • Với dữ liệu bia, PCA sẽ tạo đặc trưng mới. Ví dụ:

$$ 2\times AlcoholicVolume - BitternessLevel$$

Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu bằng PCA

Phép chiếu mới của dữ liệu

Ảnh động minh họa các cách PCA chiếu dữ liệu bằng các phép toán tuyến tính

Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu bằng PCA

PCA không giảm số chiều

$$

  • Chỉ là phép quay của không gian gốc trong tập dữ liệu.
  • Khoảng cách được giữ nguyên.
  • Có lợi cho các tác vụ và thuật toán dự đoán.
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu bằng PCA

  • Nếu công bố các giá trị này mà không giải thích, vẫn có thể huấn luyện mô hình và dự đoán chính xác.
  • Đối thủ sẽ không biết diễn giải các giá trị đã che giấu đó.
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu bằng PCA

# Khám phá dữ liệu
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
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu với PCA và Scikit-learn

# Lấy dữ liệu không có cột target
x_data = df.drop(['target'], axis = 1)

# Cột target dưới dạng mảng giá trị y = df.target.values
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu với PCA và Scikit-learn

# Import PCA từ Scikit-learn
from sklearn.decomposition import PCA

# Khởi tạo PCA với số thành phần bằng số cột pca = PCA(n_components=len(x_data.columns))
# Áp dụng PCA lên dữ liệu x_data_pca = pca.fit_transform(x_data)
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu với PCA và Scikit-learn

# Xem dữ liệu
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],
       ...,
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu với PCA và Scikit-learn

# Tạo DataFrame từ dữ liệu sau khi biến đổi PCA
df_x_data_pca = pd.DataFrame(x_data_pca)


# Kiểm tra kích thước tập dữ liệu df_x_data_pca.shape
(1213, 13)
Bảo mật dữ liệu và Ẩn danh trong Python

Tính hữu dụng dữ liệu sau khi che giấu bằng PCA

  • Phân loại bằng hồi quy logistic và kiểm tra mất độ chính xác khi so sánh dữ liệu gốc và dữ liệu biến đổi.

$$

  • Hồi quy logistic là thuật toán phân loại dự đoán đầu ra nhị phân từ các biến độc lập.
Bảo mật dữ liệu và Ẩn danh trong Python

Tính hữu dụng dữ liệu sau khi che giấu bằng PCA

Phân loại bằng hồi quy logistic và kiểm tra suy giảm độ chính xác.

# Chia dữ liệu đã biến đổi thành train/test
x_train, x_test, y_train, y_test = train_test_split(x_data_pca, y, test_size=0.2)


# Tạo mô hình lr = LogisticRegression(max_iter=200)
# Huấn luyện mô hình lr.fit(x_train,y_train)
# Dự đoán và tính độ chính xác acc = lr.score(x_test, y_test) * 100 print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Bảo mật dữ liệu và Ẩn danh trong Python

Tính hữu dụng dữ liệu trước khi che giấu bằng PCA

Phân loại bằng hồi quy logistic và xem điểm với dữ liệu gốc

# Chia dữ liệu thành train/test
x_train, x_test, y_train, y_test = train_test_split(x_data.to_numpy(),y,test_size = 0.2)

# Tạo mô hình
lr = LogisticRegression(max_iter=200)

# Huấn luyện mô hình
lr.fit(x_train,y_train)

# Dự đoán và tính độ chính xác
acc = lr.score(x_test,y_test) * 100
print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Bảo mật dữ liệu và Ẩn danh trong Python

Ayo berlatih!

Bảo mật dữ liệu và Ẩn danh trong Python

Preparing Video For Download...