Bảo mật dữ liệu và Ẩn danh trong Python
Rebeca Gonzalez
Data engineer
$$ $$ 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.
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$$

$$
# 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
# 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
# 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)
# 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],
...,
# 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)
$$
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
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