Yang's blog Yang's blog
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

编程爱好者
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 现代密码学

    • Chapter 0:Introduction to Modern Cryptography
    • Chapter 1:Introduction and Classical Cryptography
    • Chapter 2:Perfectly Secret Encryption
    • PChapter 3:rivate-Key Encryption
    • Chapter 4:Message Authentication Codes
    • Chapter 5:CCA-Security and Authenticated Encryption
    • Chapter 6:Hash Functions and Applications
    • Chapter 9:Number Theory and Cryptographic Hardness Assumptions
    • Chapter 11:Key Management and the Public-Key Revolution
  • 对称加密

    • DES加密算法详解
  • 同态加密方案

    • RSA乘法同态
    • Paillier 加法同态
    • 可验证Paillier同态加密
    • CKKS EXPLAINED PART 1, VANILLA ENCODING AND DECODING
    • CKKS EXPLAINED, PART 2 FULL ENCODING AND DECODING
    • CKKS EXPLAINED, PART 3 ENCRYPTION AND DECRYPTION
    • CKKS EXPLAINED, PART 4 MULTIPLICATION AND RELINEARIZATION
    • CKKS EXPLAINED, PART 5 RESCALING
  • 隐私计算框架

    • pysyft

      • README
      • PySyfy介绍
      • 数据集与资产
        • 你将学到什么?
        • 1.1 启动本地开发环境的 Datasite
        • 1.2 下载示例数据集
        • 1.3 创建资产和数据集
          • 创建模拟数据(Mock)
          • 创建资产 (Assets)
          • 创建数据集 (Dataset)
        • 1.4 上传数据集到数据站点
        • 1.5 关闭数据站点
        • 恭喜完成第一部分 🎉
      • 客户端和 Datasite 访问
      • 提出研究问题
      • 审查代码请求
      • 检索结果
  • 安全知识

    • 信息安全四大顶会与分级
    • 数字签名与数字证书关系
    • 伪随机函数在密码学中的作用及其应用实例
    • 伪随机函数在与哈希函数的关系
  • 密码学
  • 隐私计算框架
  • pysyft
xiaoyang
2025-03-01
目录

数据集与资产

# 第1部分:数据集与资产

image-20241118151804809

如果你是 PySyft 的新用户,那么需要了解一个关键词:Datasite。Datasite 类似于网站,但主要是为了数据服务。传统的 Web 服务器允许下载文件(例如 .html 和 .css 文件)到浏览器,而 Datasite 不会这样做。相反,Datasite 帮助数据科学家从服务器中的数据中获取 问题的答案,而无需下载实际的数据本身。Datasite 中的数据以 数据集 的形式提供,每个数据集包含多个资产。在本教程的第一部分中,我们将学习如何创建和上传资产以及数据集到 Datasite。

image-20241118151858333

# 你将学到什么?

到第1部分结束时,你将掌握以下技能:

  • 如何使用 PySyft 快速启动本地 Datasite;
  • 如何创建和配置包含公共信息与非公共信息的资产;
  • 如何将数据集上传到 Datasite。

# 1.1 启动本地开发环境的 Datasite

你可以通过以下三种方式启动 Datasite 服务器:

  1. 使用 syft.orchestra.launch:适合本地开发;
  2. 使用单容器(Docker 或 Podman):适合轻量化部署;
  3. 使用 Kubernetes:适合生产环境。

在本教程中,我们将使用 syft.orchestra.launch。有关 Datasite 和部署选项的更多信息,请参阅文档中的相关章节。

首先导入 syft(在本教程中,我们将使用这种编码约定):

import syft as sy
1

syft.orchestra.launch 函数运行一个特殊的本地 Datasite 服务器,仅供开发使用。每个服务器通过其唯一名称标识,PySyft 使用该名称在重启时恢复其内部状态。我们将使用 reset=True 参数确保服务器实例是第一次初始化。

data_site = sy.orchestra.launch(name="cancer-research-centre", reset=True)
1

当服务器启动并运行后,我们可以登录到 Datasite:

client = data_site.login(email="info@openmined.org", password="changethis")
1

[!TIP]

管理用户账户

作为第一步,Owen 将使用默认管理员凭据登录 Datasite。在第2部分中,我们将学习如何更新和个性化这些凭据,以及如何管理用户账户。

# 1.2 下载示例数据集

我们将使用 ucimlrepo Python 包来下载示例数据集,可以通过以下命令安装:

$ pip install ucimlrepo
1

确保使用正确的 Python 环境
请确认在安装该包时,PySyft 也在同一个 Python 环境中。具体操作见快速安装指南。

安装完成后,使用以下代码下载数据集:

from ucimlrepo import fetch_ucirepo
  
# 获取数据集
breast_cancer_wisconsin_diagnostic = fetch_ucirepo(id=17)
  
# 数据(以 pandas dataframe 格式表示)
X = breast_cancer_wisconsin_diagnostic.data.features
y = breast_cancer_wisconsin_diagnostic.data.targets

# 元数据
metadata = breast_cancer_wisconsin_diagnostic.metadata
# 变量信息
variables = breast_cancer_wisconsin_diagnostic.variables
1
2
3
4
5
6
7
8
9
10
11
12
13

我们将使用广受欢迎的乳腺癌数据集模拟 Owen 的“乳腺癌生物标志物”数据集。

X.head(n=5)  # n 指定预览的行数
1

该数据集包含 596 个样本,组织为 30 个临床特征(即 X)。

X.shape
1

每个样本对应一个分类目标,表示肿瘤的结果:B 表示良性,M 表示恶性:

y.sample(n=5, random_state=10)
1

# 1.3 创建资产和数据集

在本教程开头,我们提到 PySyft 允许在不下载数据或查看数据副本的情况下使用数据。不过你可能会疑惑:

  • 数据科学家在没有数据的情况下如何编写代码?
  • 他们甚至如何开始?🤔

PySyft 通过托管两类数据解决这个问题:

  1. 真实数据(稍后会详细介绍);
  2. 模拟数据,即真实数据的虚拟版本,数据科学家可以下载并查看。

# 创建模拟数据(Mock)

在将数据集上传到数据站点 (Datasite) 之前,Owen 需要为其数据创建一个模拟版本。以下是具体操作:

import numpy as np

# 设置随机种子以保证可重复性
SEED = 12345
np.random.seed(SEED)

X_mock = X.apply(lambda s: s + np.mean(s) + np.random.uniform(size=len(s)))
y_mock = y.sample(frac=1, random_state=SEED).reset_index(drop=True)
1
2
3
4
5
6
7
8
  • 临床特征 X_mock 是通过对原始特征 X 的每一列加上其算术平均值和正态分布中的一些随机噪声生成的。
  • 类别目标 y_mock 则通过对原始目标值进行简单的随机重排生成。

这样处理后,数据类型和类别分布保持不变,同时消除了样本中的任何可能模式。

[!TIP]

生成模拟数据的注意事项

决定何种模拟数据方案是否合适取决于具体的使用场景和数据集。最终,这种选择应由数据所有者决定,以确保满足预期的数据使用需求。在我们的示例中,Owen 决定上述生成方法足以避免从真实数据中泄露任何私人信息。


# 创建资产 (Assets)

在拥有真实数据和模拟数据后,我们可以在 PySyft 中创建相应的资产 (Assets),每个资产都由其在数据站点中的唯一名称标识:

features_asset = sy.Asset(
    name="Breast Cancer Data: Features",
    data = X,      # 真实数据
    mock = X_mock  # 模拟数据
)

targets_asset = sy.Asset(
    name="Breast Cancer Data: Targets",
    data = y,      # 真实数据
    mock = y_mock  # 模拟数据
)
1
2
3
4
5
6
7
8
9
10
11

每个资产都包含了对 data 和 mock 的引用,这两者是 syft.Asset 对象的属性,我们可以查看它们的内容:

features_asset.data.head(n=3)
features_asset.mock.head(n=3)
1
2

# 创建数据集 (Dataset)

我们已经有了两个资产:features_asset 和 targets_asset。那么,现在是否可以直接将它们上传到数据站点呢?不完全是。

如果我们直接上传这些资产而没有任何额外的信息,外部数据科学家将无法发现或正确使用这些数据。

因此,PySyft 要求每个资产必须作为 syft.Dataset 对象的一部分存储。每个数据集在 PySyft 中都有唯一名称,并包含额外的元数据(如描述、引用、贡献者),以进一步说明核心数据及其资产。

收集元数据并创建数据集对象

# 收集元数据
description = f'{metadata["abstract"]}\n{metadata["additional_info"]["summary"]}'

paper = metadata["intro_paper"]
citation = f'{paper["authors"]} - {paper["title"]}, {paper["published_in"]}, {paper["year"]}'

summary = "The Breast Cancer Wisconsin dataset can be used to predict whether the cancer is benign or malignant."

# 创建数据集
breast_cancer_dataset = sy.Dataset(
    name="Breast Cancer Biomarker",
    description=description,
    summary=summary,
    citation=citation,
    url=metadata["dataset_doi"],
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

然后,将两个资产添加到数据集:

breast_cancer_dataset.add_asset(features_asset)
breast_cancer_dataset.add_asset(targets_asset)
1
2

最后,我们可以通过 PySyft 提供的默认富表示功能查看新创建的数据集对象:

breast_cancer_dataset
1

# 1.4 上传数据集到数据站点

通过客户端的 upload_dataset 函数,将新数据集上传到数据站点:

client.upload_dataset(dataset=breast_cancer_dataset)
1

上传成功后,可以通过客户端对象查看所有可访问的数据集:

client.datasets
1

# 1.5 关闭数据站点

完成数据集上传后,可以使用 land 函数关闭运行中的服务器:

data_site.land()
1

# 恭喜完成第一部分 🎉

在第一部分中,我们学习了如何为“癌症研究中心”设置数据站点。为了简化操作,我们使用 PySyft 提供的本地开发服务器快速在本地机器上托管数据站点。随后,我们创建并上传了一个新的 syft.Dataset,其中包括“乳腺癌生物标志物”数据的特征和目标资产。

在第二部分中,我们将学习如何管理用户凭据以及设置数据站点的访问权限。

编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12

← PySyfy介绍 客户端和 Datasite 访问→

最近更新
01
操作系统
03-18
02
Nginx
03-17
03
后端服务端主动推送消息的常见方式
03-11
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式