使用自编码器进行数据的匿名化以保护数据隐私(下)

简介: 使用自编码器进行数据的匿名化以保护数据隐私

数据匿名化与自动编码器

现在,我们准备对数据集进行匿名化。首先,我们构建了一个瓶颈层只有输入层一半大小的自动编码器。

dim_layer_input=X.shape[1]
dim_layer_1=max((int(3*dim_layer_input/4), 1))
dim_layer_2=max((int(dim_layer_input/2), 1))
autoencoder, encoder=build_autoencoder(
dim_input=dim_layer_input,
dim_layer_1=dim_layer_1,
dim_layer_2=dim_layer_2)

训练

autoencoder.fit(
X, X,
epochs=100,
batch_size=256,
shuffle=True,
validation_split=0.3,
callbacks=callbacks)

并提取编码表示作为随机森林分类器的输入

encoded=array(encoder(X))
rf=RandomForestClassifier(
n_estimators=500,
max_depth=2,
n_jobs=8,
random_state=42)
dict_performance=cross_validate(
estimator=rf,
X=encoded, y=y,
cv=10,
n_jobs=4,
return_train_score=True,
scoring=[
"balanced_accuracy",
"f1_weighted",
"roc_auc",
"average_precision"  ]
)
df_performance["ENCODED"] = [
mean(dict_performance[k]) \forkindict_performance.keys()
]

640.png/

结果还不错。然而我们还不能绘制出特征的重要性,因为潜在的表示是原始的线性组合。当然,我们可以从自动编码器中提取权重,然后返回去了解哪些输入特征会影响更重要的潜在特征,但这只有当自动编码器有一个简单的结构时才可行,就像我们的例子一样。在其他情况下,我们可以对特征进行组编码。

Group-encode特性匿名化

为了在匿名化的数据中保留某种业务知识,我们可以将原始特征按区域分组,然后对每一组应用自动编码器的匿名化。例如,在我们的例子中,我们可以将特性划分为:

个人信息,财务状况,之前的竞选结果,以及总体经济形势。

feat_pers= ['age', 'marital_divorced', 'marital_married', 'marital_single', 'marital_unknown', 'education_basic.4y', 'education_basic.6y', 'education_basic.9y', 'education_high.school', 'education_illiterate', 'education_professional.course', 'education_university.degree', 'education_unknown','job_admin.', 'job_blue-collar', 'job_entrepreneur', 'job_housemaid', 'job_management', 'job_retired', 'job_self-employed', 'job_services', 'job_student', 'job_technician', 'job_unemployed', 'job_unknown']
feat_fina= ['default_no', 'default_unknown', 'default_yes', 'housing_no', 'housing_unknown', 'housing_yes', 'loan_no', 'loan_unknown', 'loan_yes']
feat_camp= ['campaign', 'pdays', 'previous', 'contact_cellular', 'contact_telephone', 'month_apr', 'month_aug', 'month_dec', 'month_jul', 'month_jun', 'month_mar', 'month_may', 'month_nov', 'month_oct', 'month_sep', 'day_of_week_fri', 'day_of_week_mon', 'day_of_week_thu', 'day_of_week_tue', 'day_of_week_wed', 'poutcome_failure', 'poutcome_nonexistent', 'poutcome_success']
feat_econ= ['emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed']

然后,我们应用一个独立的自动编码器来匿名化每一组特征。

feat_groups= [
feat_pers,
feat_fina,
feat_camp,
feat_econ]
encoded= []
forgintqdm(feat_groups):
dim_layer_input=len(g)
dim_layer_1=max((int(3*dim_layer_input/4), 1))
dim_layer_2=max((int(dim_layer_input/2), 1))
autoencoder, encoder=build_autoencoder(
dim_input=dim_layer_input,
dim_layer_1=dim_layer_1,
dim_layer_2=dim_layer_2  )
X_tmp=X[:, array_columns.isin(g)]
autoencoder.fit(
X_tmp, X_tmp,
epochs=100,
batch_size=256,
shuffle=True,
validation_split=0.3,
callbacks=callbacks,
verbose=0  )
encoded.append(array(encoder(X_tmp)))
X_encoded=hstack(encoded)

我们可以为每个匿名特征分配感兴趣的区域,因为我们之前已经对它们进行了分组。

array_encoded_features=array(
  ["pers_"+str(j) forjinrange(encoded[0].shape[1])] +\  ["fina_"+str(j) forjinrange(encoded[1].shape[1])] +\  ["camp_"+str(j) forjinrange(encoded[2].shape[1])] +\  ["econ_"+str(j) forjinrange(encoded[3].shape[1])]
)

这样,匿名数据集看起来是这样的:

640.png

让我们测试一下匿名化给后的预测能力。

rf=RandomForestClassifier(n_estimators=500, max_depth=2, n_jobs=8, random_state=42)
dict_performance=cross_validate(
estimator=rf,
X=X_encoded, y=y,
cv=10,
n_jobs=4,
return_train_score=True,
scoring=[
"balanced_accuracy",
"f1_weighted",
"roc_auc",
"average_precision"  ]
)
df_performance["GROUP_ENCODED"] = [mean(dict_performance[k]) forkindict_performance.keys()]

640.png

在这种情况下,我们能够绘制特征的重要性,因为我们知道每个匿名特征是从哪个兴趣区域创建的。

rf=RandomForestClassifier(
n_estimators=500,
max_depth=2,
n_jobs=8,
random_state=42)
rf.fit(X_encoded, y)
fi=permutation_importance(
estimator=rf,
X=X_encoded,
y=y,
n_repeats=10,
n_jobs=8,
random_state=42).importances_meanfigure(figsize=(16,8))
barh(
y=range(10, 0, -1),
width=sorted(fi, reverse=True)[:10],
alpha=0.9)
ylabel("Feature")
yticks(
range(10, 0, -1),
array_encoded_features[fi.argsort()[::-1][:10]]
)
xlabel("Importance")
title("Group-encoded features importance")
show()

640.png

跟我们的常识差不多,来自竞选和经济形势的编码特征是最重要的,这与对非匿名数据的分析是一致的。为了获得更多的细节,我们可以创建具有更细粒度划分的特性组。

总结

在本教程中,我们看到了如何应用自动编码器来匿名化数据集,以便将编码的数据传递给下游的机器学习任务。在数据应该传递到外部以在其他预测机器学习平台上进行测试的情况下,这可能非常有用(想象一下在云上测试模型)。一个受过良好训练的自动编码器保留了原始数据的预测能力。


目录
相关文章
|
10月前
|
存储 机器学习/深度学习 自然语言处理
大语言模型隐私防泄漏:差分隐私、参数高效化
大语言模型隐私防泄漏:差分隐私、参数高效化
589 4
|
10月前
|
机器学习/深度学习 人工智能 安全
论文介绍:从黑盒生产语言模型中提取信息的模型窃取攻击
【2月更文挑战第22天】论文介绍:从黑盒生产语言模型中提取信息的模型窃取攻击
156 6
论文介绍:从黑盒生产语言模型中提取信息的模型窃取攻击
|
10月前
|
编译器 Linux C++
揭示预处理中的秘密!(二)
揭示预处理中的秘密!(二)
|
10月前
|
机器学习/深度学习 编解码 并行计算
【FasterVIT】试图从FasterVIT网络结构中窥探出一些有用的信息
【FasterVIT】试图从FasterVIT网络结构中窥探出一些有用的信息
105 0
【FasterVIT】试图从FasterVIT网络结构中窥探出一些有用的信息
|
2月前
|
机器学习/深度学习 存储 算法
《匿名化技术:数据隐私与价值挖掘的平衡探索》
在数据驱动的时代,数据成为企业和组织的核心资产,匿名化技术作为保护数据隐私的重要手段备受关注。它通过去除或混淆个人身份信息,如数据脱敏、泛化和加密等方法,有效保护隐私。然而,匿名化可能影响数据的完整性和准确性,进而影响价值挖掘。为平衡隐私保护与数据利用,需明确使用目的、加强数据治理、创新技术应用,确保数据安全合规,推动数字经济健康发展。
115 30
|
4月前
|
机器学习/深度学习 人工智能 算法
从数据增强的隐藏作用出发,揭示视觉强化学习可塑性损失的独特机制
【10月更文挑战第22天】视觉强化学习(VRL)通过智能体与环境的交互学习最优策略,但可塑性损失是其关键挑战。近期一篇论文《Revisiting Plasticity in Visual Reinforcement Learning: Data, Modules and Training Stages》通过实证研究,揭示了数据增强、评论家可塑性损失及早期干预在维持智能体可塑性方面的作用,并提出了一种动态调整重放率的方法,为解决高重放率困境提供了新思路。
75 2
|
9月前
|
存储 人工智能 安全
使用‘消除’技术绕过LLM的安全机制,不用训练就可以创建自己的nsfw模型
本文探讨了一种名为“abliteration”的技术,该技术能够在不重新训练大型语言模型(LLM)的情况下移除其内置的安全审查机制。通常,LLM在接收到潜在有害输入时会拒绝执行,但这一安全特性牺牲了模型的灵活性。通过对模型残差流的分析,研究人员发现可以识别并消除导致拒绝行为的特定方向,从而允许模型响应所有类型的提示。
977 1
|
10月前
|
存储 供应链 安全
区块链技术:解码未来的信任网络
在信息时代的浪潮中,区块链技术崭露头角,成为了一种全新的分布式记账和信任机制。本文将深入探讨区块链技术的概念,解析其核心原理,并探讨其在金融、物联网和供应链管理等领域的应用前景。
|
10月前
|
编译器 C语言
揭示预处理中的秘密!(一)
揭示预处理中的秘密!(一)
|
存储 人工智能 分布式计算
大模型时代,一定要来讨论下数据与隐私
大模型时代,一定要来讨论下数据与隐私
209 0