查看“Fidelius示例教程”的源代码
←
Fidelius示例教程
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
您可以通过本页面了解如何在 Fidelius 中运行一个示例程序。 = 基于 Iris 数据集的 K-Means 聚类算法 = 基于 Iris 数据集的 K-Means 聚类是机器学习中一个非常经典的学习示例,这里我们介绍一下如何在 Fidelius 中实现这个例子。 == Iris 鸢尾花数据集 == Iris 鸢尾花数据集内包含 3 类鸢尾花,分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica),共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。 *sepallength:萼片长度 *sepalwidth:萼片宽度 *petallength:花瓣长度 *petalwidth:花瓣宽度 以上四个特征的单位都是厘米(cm) [[文件:Iris pic.15.png|600px|center]] Iris数据集部分展示如下: {| class="wikitable" |+ |- ! !! sepal_length !! sepal_width !! petal_length !! petal_width !! species |- | 0 || 5.1 || 3.5 || 1.4 || 0.2 || Iris-setosa |- | 1 || 4.9 || 3.0 || 1.4 || 0.2 || Iris-setosa |- | 2 || 4.7 || 3.2 || 1.3 || 0.2 || Iris-setosa |- | 3 || 4.6 || 3.1 || 1.5 || 0.2 || Iris-setosa |- | 4 || 5.0 || 3.6 || 1.4 || 0.2 || Iris-setosa |- | 5 || 5.4 || 3.9 || 1.7 || 0.4 || Iris-setosa |- | 6 || 4.6 || 3.4 || 1.4 || 0.3 || Iris-setosa |- | 7 || 5.0 || 3.4 || 1.5 || 0.2 || Iris-setosa |- | 8 || 4.4 || 2.9 || 1.4 || 0.2 || Iris-setosa |- | 9 || 4.9 || 3.1 || 1.5 || 0.1 || Iris-setosa |} == K-Means 聚类算法 == K 均值聚类(K-Means)是最著名的划分聚类算法,简洁和高效使得他成为所有聚类算法中最广泛使用的。其认为两个目标的距离越近,其相似度越大。 算法步骤: # 选择初始化的 k 个样本作为初始聚类中心 a = a<sub>1</sub>, a<sub>2</sub>, ... a<sub>k</sub>; # 针对数据集中每个样本 x<sub>i</sub> 计算它 k 个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中; # 针对每个类别 a<sub>j</sub>,重新计算它的聚类中心,即属于该类的所有样本的质心; # 重复上面 2 3 两步操作,直到达到某个中止条件(迭代次数、最小误差变化等)。 K-Means算法通常使⽤肘部法则来选择 K 值。肘部法则考察聚类后全体样本的误差平⽅和 SSE,将 SSE 随 K 值的变化由快速下降转变为缓慢变化的拐点处的 K 值,作为最佳聚类簇数。 肘部法则选择 K 值的依据:随着聚类数 K 的增⼤,样本划分会更加精细,每个簇的聚合程度会逐渐提⾼,那么误差平⽅和 SSE ⾃然会逐渐变⼩。且当 K ⼩于真实聚类数时,K 的增⼤会⼤幅增加每个簇的聚合程度,故 SSE 的下降幅度会很⼤;当 K 达到真实聚类数时,再增加 K 所得到的聚合程度,回报就会迅速变⼩,所以 SSE 的下降幅度会骤减,然后随着K值的继续增⼤⽽趋于平缓。也就是说 SSE 与 K 之间的关系就像⼿肘的形状,这个肘部对应的K值就是数据的真实聚类数。 使⽤K-Means对数据集iris进⾏聚类分析:加载iris数据集,按照4个特征,使⽤肘部法则确定最佳的K值,然后使⽤KMeans类进⾏聚类,最后可视化聚类结果。 [[文件:kmeans.png|600px|center]] == 在 Fidelius 中运行 K-Means == 0. 确保Fidelius已经安装完成,可通过源码方式安装,或APT的方式安装,安装教程可参考[https://doc-dianshu.yeez.tech/index.php?title=Fidelius%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B#%E5%AE%89%E8%A3%85_Fidelius 安装Fidelius] 1. 下载示例代码 $ git clone https://github.com/YeeZTech/YPC-algo-example.git 2. 编译示例代码 $ cd YPC-algo-example && mkdir -p build $ cmake -DCMAKE_PREFIX_PATH=$YPC_INSTALL_DIR/lib/cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. 注意: $YPC_INSTALL_DIR 为 Fidelius 的安装路径,例如通过APT的方式安装后,其默认路径为 /usr/local $ keymgr_tool --create 3.数据提供方使用 Secp256k1 的私钥签名 iris 数据集的数据哈希 $ keymgr_tool --sign $DATA_HASH --sign.hex --sign.private-key $SEALED_PRIVATE_KEY 注意: $DATA_HASH 为步骤1中输出文件<nowiki>(iris.sealed.output)</nowiki>中的 data_id 字段,$SEALED_PRIVATE_KEY 为步骤2中密钥对文件的 private_key 字段。 4.为数据使用方生成 Secp256k1 密钥对,数据使用方可以不依赖于 SGX 环境生成密钥对 $ yterminus --gen-key --no-password --output iris.key.json 5.获取 K-Means 算法的算法哈希 $ ydump --enclave /usr/local/lib/iris_parser.signed.so --output info.json 6.加密 K-Means 算法的输入参数 $ yterminus --dhash $DATA_HASH --tee-pubkey $PROVIDER_PUBLIC_KEY --use-param 123 --param-format text --use-enclave-hash $ENCLAVE_HASH --output iris_param.json --use-privatekey-file iris.key.json 注意:$DATA_HASH 为步骤1中输出文件(iris.sealed.output)中的 data_id 字段, $PROVIDER_PUBLIC_KEY 为步骤2中密钥对文件的 public_key 字段,$ENCLAVE_HASH 为步骤5中输出文件 info.json 的 enclave-hash 字段。 7.在 iris 数据集上运行 K-Means 算法 $ GLOG_logtostderr=1 fid_analyzer --sealed-data-url iris.sealed --sealer-path /usr/local/lib/edatahub.signed.so --parser-path /usr/local/lib/iris_parser.signed.so --keymgr /usr/local/lib/keymgr.signed.so --source-type json --param-path iris_param.json --result-path iris.result.encrypted --check-data-hash $DATA_HASH 注意:$DATA_HASH为步骤1中输出文件(iris.sealed.output)中的data_id字段。 8.解密分析结果 $ yterminus --decrypt-hex $ENCRYPTED_RESULT --use-privatekey-file iris.key.json --output result.output 注意:$ENCRYPTED_RESULT为步骤7中输出文件 iris.result.encrypted 的 encrypted-result 字段。
返回至“
Fidelius示例教程
”。
导航菜单
个人工具
创建账户
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
数据集市
技术原理
历史版本
术语列表
隐私计算基础介绍
其他
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息