PCA เพื่อการปกปิดตัวตน

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Rebeca Gonzalez

Data engineer

การวิเคราะห์องค์ประกอบหลัก (PCA)

$$ $$ วิธีลดมิติข้อมูลที่นิยมใช้กับชุดข้อมูลขนาดใหญ่

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA

  • PCA สร้าง "องค์ประกอบหลัก" ใหม่จากการแปลงเชิงเส้นของฟีเจอร์เดิม

  • ในชุดข้อมูลเบียร์ PCA จะสร้างฟีเจอร์ใหม่ ตัวอย่างเช่น:

$$ 2\times AlcoholicVolume - BitternessLevel$$

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA

การฉายภาพข้อมูลแบบใหม่

GIF แสดงวิธีต่าง ๆ ที่ PCA ฉายภาพข้อมูลด้วยการดำเนินการเชิงเส้น

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA

PCA โดยไม่ลดมิติข้อมูล

$$

  • เป็นเพียงการหมุนปริภูมิเดิมในชุดข้อมูล
  • ระยะทางระหว่างจุดข้อมูลยังคงเดิม
  • เป็นข้อได้เปรียบสำหรับงานพยากรณ์และอัลกอริทึมต่าง ๆ
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA

  • หากเผยแพร่ค่าผลลัพธ์เหล่านี้โดยไม่มีคำอธิบาย อัลกอริทึมยังสามารถฝึกจากข้อมูลเหล่านี้และทำนายได้อย่างแม่นยำ
  • ผู้ไม่ประสงค์ดีจะไม่สามารถตีความค่าที่ถูกปกปิดเหล่านั้นได้
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA

# Explore the 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
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA และ Scikit-learn

# Obtain the data without the target column
x_data = df.drop(['target'], axis = 1)

# Target column as array of values y = df.target.values
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA และ Scikit-learn

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

# Initialize PCA with number of components to be the same as the number of columns pca = PCA(n_components=len(x_data.columns))
# Apply PCA to the data x_data_pca = pca.fit_transform(x_data)
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA และ Scikit-learn

# See the 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],
       ...,
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลด้วย PCA และ Scikit-learn

# Create a DataFrame from the resulting PCA transformed data
df_x_data_pca = pd.DataFrame(x_data_pca)


# Inspect the shape of the dataset df_x_data_pca.shape
(1213, 13)
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

ประโยชน์ของข้อมูลหลังการปกปิดด้วย PCA

  • จำแนกประเภทด้วย Logistic Regression และตรวจสอบความสูญเสียความแม่นยำโดยเปรียบเทียบข้อมูลต้นฉบับกับข้อมูลผลลัพธ์

$$

  • Logistic Regression เป็นอัลกอริทึมการจำแนกประเภท ที่ใช้ทำนายผลลัพธ์แบบไบนารีจากชุดตัวแปรอิสระ
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

ประโยชน์ของข้อมูลหลังการปกปิดด้วย PCA

จำแนกประเภทด้วย Logistic Regression และตรวจสอบความสูญเสียความแม่นยำ

# Split the resulting dataset into training and test data
x_train, x_test, y_train, y_test = train_test_split(x_data_pca, y, test_size=0.2)


# Create the model lr = LogisticRegression(max_iter=200)
# Fit train the model lr.fit(x_train,y_train)
# Run the model and perform predictions to obtain accuracy score acc = lr.score(x_test, y_test) * 100 print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

ประโยชน์ของข้อมูลก่อนการปกปิดด้วย PCA

จำแนกประเภทด้วย Logistic Regression และดูคะแนนจากข้อมูลต้นฉบับ

# Split the resulting dataset into training and test data
x_train, x_test, y_train, y_test = train_test_split(x_data.to_numpy(),y,test_size = 0.2)

# Create the model
lr = LogisticRegression(max_iter=200)

# Fit train the model
lr.fit(x_train,y_train)

# Run the model and perform predictions to obtain accuracy score
acc = lr.score(x_test,y_test) * 100
print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

มาฝึกกันเถอะ!

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Preparing Video For Download...