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

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

数据匿名化与自动编码器

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

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

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

总结

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


目录
相关文章
|
6月前
|
存储 机器学习/深度学习 自然语言处理
大语言模型隐私防泄漏:差分隐私、参数高效化
大语言模型隐私防泄漏:差分隐私、参数高效化
446 4
|
6月前
|
机器学习/深度学习 人工智能 安全
论文介绍:从黑盒生产语言模型中提取信息的模型窃取攻击
【2月更文挑战第22天】论文介绍:从黑盒生产语言模型中提取信息的模型窃取攻击
121 6
论文介绍:从黑盒生产语言模型中提取信息的模型窃取攻击
|
3月前
|
存储 安全 搜索推荐
网络安全密码的独特性和多样性
【8月更文挑战第13天】
86 1
|
3月前
|
监控 安全 网络安全
什么是零信任模型?
【8月更文挑战第24天】
78 0
|
5月前
|
存储 人工智能 安全
使用‘消除’技术绕过LLM的安全机制,不用训练就可以创建自己的nsfw模型
本文探讨了一种名为“abliteration”的技术,该技术能够在不重新训练大型语言模型(LLM)的情况下移除其内置的安全审查机制。通常,LLM在接收到潜在有害输入时会拒绝执行,但这一安全特性牺牲了模型的灵活性。通过对模型残差流的分析,研究人员发现可以识别并消除导致拒绝行为的特定方向,从而允许模型响应所有类型的提示。
424 1
|
机器学习/深度学习 人工智能 安全
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)(下)
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)
255 1
|
自然语言处理 安全 API
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)(上)
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)
363 0
|
存储 人工智能 分布式计算
大模型时代,一定要来讨论下数据与隐私
大模型时代,一定要来讨论下数据与隐私
175 0
|
机器学习/深度学习
开挖扩散模型小动作,生成图像几乎原版复制训练数据,隐私要暴露了
开挖扩散模型小动作,生成图像几乎原版复制训练数据,隐私要暴露了
|
机器学习/深度学习 人工智能 数据可视化
AAAI 2022 | 传统GAN修改后可解释,并保证卷积核可解释性和生成图像真实性
AAAI 2022 | 传统GAN修改后可解释,并保证卷积核可解释性和生成图像真实性
147 0