iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
AI/ ML & Data

菜就多練之我叫小賀逃離DS新手村系列 第 28

Day 28 海納百川-合成資料

  • 分享至 

  • xImage
  •  

合成資料(Synthetic Data)🐭

為了避免資料使用上有侵犯隱私的疑慮,在許多領域,如:金融、醫療等,常會使用合成資料來符合研究需求。合成資料是透過各種技術生成的數據,模擬真實資料的統計特徵。常見的技術包括:生成對抗網絡 (GANs)變分自編碼器 (VAE) 等。這樣可以在進行資料分析或模型訓練時,避免暴露真實的個人資訊。同時,合成資料也能用來解決資料稀缺或無法取得的問題,提供研究人員更大的靈活性。


Conditional Tabular GAN(CTGAN)🐮

CTGAN 是一套基於深度學習的合成資料生成器,用於表格資料。它們能夠從真實資料中學習,並生成具有高準確度的合成資料。

實戰演練

程式碼如下:

!pip install ctgan
from ctgan import CTGAN
from ctgan import load_demo
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import mutual_info_score
from sklearn.utils import resample

real_data = load_demo()

# 離散資料欄位
discrete_columns = [
    'workclass',
    'education',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'native-country',
    'income'
]

ctgan = CTGAN(epochs=10)
ctgan.fit(real_data, discrete_columns)

# 生成合成資料
synthetic_data = ctgan.sample(1000)

# 將合成資料轉換為 DataFrame
synthetic_df = pd.DataFrame(synthetic_data, columns=real_data.columns)

# 對真實資料進行重抽樣,以匹配合成資料的樣本數量
real_data_sampled = resample(real_data, n_samples=len(synthetic_df), random_state=42)

# 視覺化真實資料和合成資料的分佈
def visualize_column(column_name):
    plt.figure(figsize=(10, 5))
    sns.histplot(real_data_sampled[column_name], color='blue', label='Real Data', kde=True, stat="density", linewidth=0)
    sns.histplot(synthetic_df[column_name], color='red', label='Synthetic Data', kde=True, stat="density", linewidth=0)
    plt.legend()
    plt.title(f'Distribution of {column_name}')
    plt.show()
    
# 視覺化`age`欄位
visualize_column('age')

# 評估真實資料和合成資料之間的mutual_information
def evaluate_mutual_information(real_data, synthetic_data, columns):
    mi_scores = {}
    for column in columns:
        mi = mutual_info_score(real_data[column], synthetic_data[column])
        mi_scores[column] = mi
    return mi_scores

# 計算 mutual information scores
mi_scores = evaluate_mutual_information(real_data_sampled, synthetic_df, real_data.columns)
print("Mutual Information Scores:", mi_scores)

age 欄位於真實資料和合成資料的分佈:

https://ithelp.ithome.com.tw/upload/images/20240901/201557138zdNHrJqXe.png
從分布來看合成資料跟真實資料在age欄位生成的比例有高度相似。


題外話😂

最後兩天決定實作一個side project來收尾🔥


參考資料💯

CTGAN


上一篇
Day 27 引人入勝-MV生成
下一篇
Day 29 持之以恆-Side Project
系列文
菜就多練之我叫小賀逃離DS新手村30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言