一、Github项目地址

  • decision-tree-mpc:https://github.com/csiro-mlai/decision-tree-mpc

  • MP-SPDZ:https://github.com/data61/MP-SPDZ/

二、实现步骤(可以使用自己的数据集)

1. 环境:linux系统(ubuntu)

2. git clone “decision-tree-mpc”项目至本地

git clone https://github.com/csiro-mlai/decision-tree-mpc.git

注意:如果网络代理有问题的话,可以尝试取消代理,或者在github.com前面加gitclone.com/

3. 安装MP-SPDZ文件

  • 下载地址:https://github.com/data61/MP-SPDZ/releases
  • mp-spdz-0.3.4.tar.xyz解压到文件夹 decision-tree-mpc/下,并重命名为MP-SPDZ
  • 接着执行:
cd MP-SPDZ
Scripts/tldr.sh
make boost mpir
cd ..
./build-mp-spdz.sh

注意:这个过程中会报各种各样的错误,应该基本上都是缺少包,或者是网络代理的问题,可以从这个方向上解决。

3. 导入自己的数据 (二分类)

  • 注意:是可以用./download.sh来下载数据的(如果需要的话),这个是从UCI Machine Learning Repository上面下载数据
  • 提前把数据类别标签处理成0和1,并分好训练集、测试集
  • 将数据复制到文件夹decision-tree-mpc/.data.test格式,可以用编辑器打开csv, 在 , 后面加空格,然后复制训练数据到 .data文件中,复制测试数据到 .test文件中)
  • 修改prepare.py文件(下面是修改过的版本,另外根据自己的数据还需要进行修改的地方用注释标注)
#!/usr/bin/python3import sysbinary = 'binary' in sys.argv
mixed = 'mixed' in sys.argv
nocap = 'nocap' in sys.argvif binary:out = open('binary', 'w')
elif mixed:out = open('mixed', 'w')
elif nocap:out = open('nocap', 'w')
else:out = open('data', 'w')for start, suffix in (0, 'data'), (1, 'test'):data = [l.strip().split(', ') for l in open('bibtex.%s' % suffix)]    #修改此处,把文件名替换掉(比如这里的文件名是bibtex)print(' '.join(str(int(x[-1].startswith('1'))) for x in data), file=out)total = 0max_value = 0if not binary:if nocap:attrs = 0, 4, 12else:attrs = [i for i in range(1836)] #修改此处,range()里是属性列的数量(比如此处有1836列属性列for i in attrs:print(' '.join(str(int(float(x[i])*100)) for x in data), file=out)print(' '.join(str(int(float(x[i])*100)) for x in data))total += 1for x in data:max_value = 1print(len(data), 'items')print(total, 'attributes')print('max value', max_value)
  • 进入文件夹 MP-SPDZ/Programs/Source,修改文件adult.mpc(下面是修改过的版本,另外根据自己数据还需要修改的地方用注释标注)
m = 1836  #此处需要修改,改为属性列的数量
n_train = 5473  #此处需要修改,改为训练数据的行数
n_test = 200  #此处需要修改,改为测试数据的行数combo = 'combo' in program.args
binary = 'binary' in program.args
mixed = 'mixed' in program.args
nocap = 'nocap' in program.argstry:n_threads = int(program.args[2])
except:n_threads = Noneif combo:n_train += n_testif binary:m = 67attr_lengths = [1] * m
elif mixed or nocap:cont = 1836    #此处需要修改,改为属性列数量m = 1836  #此处需要修改,改为属性列数量attr_lengths = [0] * cont
else:attr_lengths = Noneprogram.set_bit_length(32)
program.options_from_args()train = sint.Array(n_train), sint.Matrix(m, n_train)
test = sint.Array(n_test), sint.Matrix(m, n_test)for x in train + test:x.input_from(0)import decision_tree, util#decision_tree.debug_layers = True
decision_tree.max_leaves = 3000if 'nearest' in program.args:sfix.round_nearest = Truesfix.set_precision_from_args(program, True)trainer = decision_tree.TreeTrainer(train[1], train[0], int(program.args[1]), attr_lengths=attr_lengths,n_threads=n_threads)
trainer.debug_selection = 'debug_selection' in program.args
trainer.debug_gini = True
layers = trainer.train_with_testing(*test)#decision_tree.output_decision_tree(layers)

4. 训练模型

  • 进入文件夹decision-tree-mpc/,运行:
./convert.sh
./run-local.sh emul 20 2

注意:如果报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录,
很可能是.sh文件中的空行有/r出现,可以运行sed 's/\r//' -i XXX.sh(XXX是文件名)来去掉/r

  • 关于./run-local.sh emul 20 2参数的解释见下图:

    目前只能做二分类问题,emul有结果(但是emul没有执行加密运算),sh2、sh3不一定有结果(非常非常慢)
  • 运行结果:

MPC多方安全计算DT(决策树)实现相关推荐

  1. 从这 5 个场景 , 看 MPC 多方安全计算的行业应用

    在我们之前的"多方安全计算"系列文章中,我们首先通过姚期智教授的"百万富翁问题"引出了数据安全计算这个密码学话题,并介绍了多方安全计算在数据隐私中的应用场景.第 ...

  2. 章磊回答: 姚期智提出的百万富翁难题被破解? 多方安全计算MPC到底是个什么鬼?

    姚期智提出的"百万富翁"难题被破解? 多方安全计算MPC到底是个什么鬼? 作者 | 章磊 责编 | Aholiab 出品 | CSDN.ARPA 在越来越多对数据隐私的担忧声中,政 ...

  3. 多方安全计算(MPC)发展脉络及应用实践

    隐私计算技术中,多方安全计算(MPC).联邦学习(FL)与可信执行环境(TEE)是三大主流技术派系,此前洞见君为大家介绍过联邦学习的前世今生,解读过可信执行环境,今天为大家带来多方安全计算的相关简介及 ...

  4. 姚期智提出的百万富翁难题被破解? 多方安全计算MPC到底是个什么鬼?

    作者 | 章磊 责编 | Aholiab 出品 | CSDN.ARPA 在越来越多对数据隐私的担忧声中,政府开始行动制定数据使用合规法案.而另一方面,对数据的保护,却产生了一个矛盾:大量的数据因为需要 ...

  5. 浅谈最近发布的金融行业多方安全计算的技术标准

    央行在2020-11-24号发布了多方安全计算金融应用技术规范,在对数据安全要求最高的金融行业出台有关多方安全计算的规范,也是国家释放了一种信号,数据资产在安全前提下是可以使用的.目前关于安全计算有非 ...

  6. dt决策树_决策树:构建DT的分步方法

    dt决策树 介绍 (Introduction) Decision Trees (DTs) are a non-parametric supervised learning method used fo ...

  7. ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略

    ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树&RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻 ...

  8. 隐私计算-多方安全计算

    一.多方安全计算简介 多方安全计算(MPC:Secure Muti-Party Computation)理论是姚期智先生为解决一组互不信任的参与方之间在保护隐私信息以及没有可信第三方的前提下协同计算问 ...

  9. 【密码学】【多方安全计算】Secret Sharing秘密共享浅析

    Secret Sharing秘密共享浅析 什么是秘密共享 加解密过程 验证加解密 参考文献 秘密共享(Secret Sharing)是实现多方安全计算的一种常用方式,MPC当然也可以用混淆电路(Gar ...

最新文章

  1. 汇编程序设计与计算机体系结构软件工程师教程笔记:内联汇编与宏
  2. hiho 1318 非法二进制数 dp
  3. 攻防世界easyJava(re Moble)
  4. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
  5. 使用缓冲字节流:BufferedInputStream与BufferedOutputStream读写数据
  6. xxljob默认登录_xxl-job安装部署整理
  7. 【Android进阶】Junit单元測试环境搭建以及简单有用
  8. ssm框架中前台html如何接受后台的数据_计算机毕业设计中实现java后台的微信小程序...
  9. c语言t0中断方式编程,PIC C语言编程_PICC中断函数的实现
  10. 安卓recovery流程分析【第一篇】
  11. Windows Phone开发(14):数据模板 转:http://blog.csdn.net/tcjiaan/article/details/7350849...
  12. java jquery分页_如何最简单的实现java分页
  13. 优化大中型企业Internet连接
  14. 复杂网络研究及其前沿概述
  15. vmware输入序列号老是不能注册问题
  16. dota2自走棋 服务器没响应,dota2自走棋国服务器
  17. 编程之美-中国象棋将帅问题
  18. 学校计算机的使用英语作文180字,计算机(Computer)
  19. Unity中实现动态天空盒
  20. 如何让div靠右_一个DIV里,一边靠左,一边靠右,怎么实现?

热门文章

  1. Flutter 启动白屏
  2. 第四章第四题(几何:六边形面积)(Geometry: area of a hexagon)
  3. webpack出现CssSyntaxError
  4. 猿创征文| 我的开发者工具箱之数据分析师装备库
  5. 服务器共享cad修改不了,CAD图纸打开后无法编辑无法修改怎么办
  6. 结构方程模型的建立、拟合、评估、筛选和结果展示全过程
  7. Linux发行版之间有什么区别?
  8. 小程序制作宋词欣赏海报
  9. 用Meta标签代码让360双核浏览器默认极速模式
  10. 蓝牙遥控器连接流程分析