在云端实践数据科学:微软 Data Science for Beginners 云章节全解析
【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners
本文档是微软开源课程 Data Science for Beginners 中第 5 大章(第 17~19 课)的保加利亚语章节导览文档(translations/bg/5-Data-Science-In-Cloud/README.md),对应英文原版 5-Data-Science-In-Cloud/README.md。该章节面向初学数据科学的读者,讲解「为什么要在云端做数据科学」,并以心力衰竭预测项目为实战载体,演示「Low code/No code」与「Azure ML SDK」两种从训练、部署到消费模型的完整路径。读完本篇文章,你将掌握云计算的三种部署形态与三种服务模型、AutoML 的界面化训练流程,以及如何用 Python SDK 以代码方式端到端自动化完成机器学习工作流。
上图为本章节的整体项目示意图(英文原图位于 5-Data-Science-In-Cloud/19-Azure/images/project-schema.PNG):左侧是纯图形界面(GUI)驱动的 Low code/No code 路线,右侧是基于 Azure ML SDK 的代码路线,两条路线都指向「训练 → 部署 → 消费」的同一目标。
为什么数据科学要上云
当面对大数据时,云端计算常常能带来根本性的改变。本章节三节课会带你搞清楚:什么是云,以及它为什么有用。概括来说,云端可以解决数据科学从业者的几类核心痛点:
- 海量数据存储:无需自购、维护和加固大型服务器,可直接使用 Azure Cosmos DB、Azure SQL Database、Azure Data Lake Storage 等托管存储服务存放数据;
- 数据集成:借助 Data Factory 等云集成服务,把来自多个来源的数据收集、转换并整合进统一的数据仓库,实现从「数据采集」到「采取行动」的跨越;
- 数据计算:海量数据加工需要极强的算力,云端的弹性计算能力让没有超级计算机的团队也能按需获得 GPU/CPU 资源;
- 数据分析服务:Azure Synapse Analytics、Azure Stream Analytics、Azure Databricks 等可以将原始数据转化为可行动的洞察;
- 机器学习与智能服务:不必从零实现算法,直接使用 AzureML 等托管 ML 服务,还可调用语音转文字、文字转语音、计算机视觉等认知服务。
从更宏观的视角看,云计算的常见价值还包括:创新(把云厂商的创新服务直接集成进应用)、灵活性(按需付费、按需选用)、预算友好(免去自建数据中心的初期投入)、可扩展(资源随项目需求伸缩)、生产力(把数据中心运维交给云厂商)、可靠性(持续备份与容灾计划)与安全性(云厂商提供的策略、技术与控制手段)。
云的三种形态与三种服务模型
在 17-Introduction/README.md 中,课程把云的基本概念拆解为两个维度:
按部署形态划分:
- 公有云(Public cloud):由第三方云服务商拥有并运营,通过互联网向公众交付计算资源;
- 私有云(Private cloud):仅由单一企业或组织独占使用的云计算资源,服务和基础设施维护在私有网络上;
- 混合云(Hybrid cloud):结合公有云与私有云的系统,用户保留本地数据中心,同时允许数据和应用运行在一个或多个公有云上。
按服务层级划分:
- IaaS(基础设施即服务):租用 IT 基础设施,如服务器、虚拟机(VM)、存储、网络、操作系统;
- PaaS(平台即服务):租用开发、测试、交付和管理软件应用的整套环境,无需操心底层服务器、存储、网络和数据库的搭建与运维;
- SaaS(软件即服务):按需(通常按订阅)通过互联网访问软件应用,无需关心托管、维护、升级与安全补丁。
课程中还提到,几个主要的云提供商包括 Amazon Web Services、Google Cloud Platform 和 Microsoft Azure——这正是本仓库实战部分选择 Azure 作为落地平台的原因。
实战项目:心力衰竭预测(Heart Failure Prediction)
为了把云的能力落到具体场景,整个章节围绕一个真实的医疗数据科学项目展开:心血管疾病(CVD)是全球第一大死因,约占全球死亡人数的 31%;烟草使用、不健康饮食与肥胖、缺乏运动、有害饮酒等环境和行为风险因素都可以作为估计模型的输入特征。若能提前评估某人患 CVD 的概率,对高风险人群的预防将有极大帮助。
数据集结构
项目使用 Kaggle 公开的心力衰竭数据集(Heart Failure Clinical Data,作者 Larxel,CC BY 4.0 许可),这是一个包含13 列(12 个特征 + 1 个目标变量)和 299 行的表格数据集。各字段定义如下:
| # | 变量名 | 类型 | 说明 | 示例 |
|---|---|---|---|---|
| 1 | age | 数值 | 患者年龄 | 25 |
| 2 | anaemia | 布尔 | 红细胞或血红蛋白减少(贫血) | 0 或 1 |
| 3 | creatinine_phosphokinase | 数值 | 血液中 CPK 酶的水平 | 542 |
| 4 | diabetes | 布尔 | 患者是否患糖尿病 | 0 或 1 |
| 5 | ejection_fraction | 数值 | 每次收缩时离开心脏的血液百分比 | 45 |
| 6 | high_blood_pressure | 布尔 | 患者是否有高血压 | 0 或 1 |
| 7 | platelets | 数值 | 血液中的血小板 | 149000 |
| 8 | serum_creatinine | 数值 | 血液中血清肌酐水平 | 0.5 |
| 9 | serum_sodium | 数值 | 血液中血清钠水平 | jun* |
| 10 | sex | 布尔 | 女或男 | 0 或 1 |
| 11 | smoking | 布尔 | 患者是否吸烟 | 0 或 1 |
| 12 | time | 数值 | 随访期(天) | 4 |
| 21 | DEATH_EVENT(目标) | 布尔 | 随访期内患者是否死亡 | 0 或 1 |
*注:
serum_sodium一行示例中的 "jun" 为原文档笔误,实际应为数值(如 137)。目标变量DEATH_EVENT的编号在原表中延续自特征编号,写作 21。
两条路线:Low code/No code 与 Azure ML SDK
18-Low-Code/README.md 和 19-Azure/README.md 分别讲授两条实现路径。课程给出了非常直观的对比表:
| 维度 | Low code/No code | Azure ML SDK |
|---|---|---|
| 编程能力要求 | 不需要 | 需要 |
| 开发时间 | 快速、简单 | 取决于编程熟练度 |
| 生产就绪 | 否 | 是 |
Low code/No code路线适合快速验证项目可行性和搭建 POC(概念验证):全程通过 Azure ML Studio 的图形界面完成,无需任何编码背景。Azure ML SDK路线则面向项目成长与生产化:当资源创建、模型部署都需要程序化自动化时,GUI 方式不再可行,此时掌握 SDK 就变得至关重要。
路线一:Azure ML Studio 的 Low code/No code 全流程
认识 Azure Machine Learning
Azure 云平台包含 200 多个产品和云服务。其中Azure ML是基于云的机器学习解决方案构建与运营平台,通过自动化大量耗时任务来提升数据科学家效率,并使用可有效扩展的云端计算资源按需计费。Azure ML 提供的工具包括:
- Azure Machine Learning Studio:Web 门户,提供模型训练、部署、自动化、追踪和资产管理所需的低代码/无代码选项,并与 Azure ML SDK 无缝集成;
- Jupyter Notebooks:快速原型化和测试 ML 模型;
- Azure Machine Learning Designer:拖拽式模块构建实验并部署管道;
- AutoML(自动化机器学习):自动化模型开发的迭代任务,以高扩展性、高效率和生产力构建模型,同时保持模型质量;
- 数据标注(Data Labelling):自动标注数据的辅助 ML 工具;
- VS Code 机器学习扩展:构建和管理 ML 项目的完整开发环境;
- 机器学习 CLI:命令行管理 Azure ML 资源;
- 开源框架集成:PyTorch、TensorFlow、Scikit-learn 等,覆盖端到端训练、部署与管理;
- MLflow:管理机器学习实验生命周期的开源库,其中 MLflow Tracking 组件负责记录和追踪训练运行的指标与模型工件。
创建 Azure ML 工作区(Workspace)
工作区是 Azure Machine Learning 的顶层资源,集中存放所有训练运行的历史记录(日志、指标、输出、脚本快照),供你判断哪次运行产出了最佳模型。创建步骤:
- 使用与 Azure 订阅关联的 Microsoft 凭据登录 Azure 门户;
- 选择+ 创建资源,搜索 Machine Learning 并选择 Machine Learning 磁贴,点击创建;
- 填写设置:订阅、资源组、唯一的工作区名称、就近的地理区域,并记录自动创建的存储账户(Storage account)、Key vault、Application insights;容器注册表(Container registry)暂选 None(首次向容器部署模型时会自动创建);
- 等待数分钟创建工作完成,在门户中找到工作区;
- 在工作区「概述」页启动 Azure Machine Learning studio(或访问 https://ml.azure.com),用 Microsoft 账户登录并选择目录、订阅和工作区;
- 点击界面左上角 ☰ 图标浏览各页面,管理工作区资源。
注意:只要工作区存在于订阅中,就会产生少量数据存储费用,建议不再使用时删除工作区。另外建议使用与操作系统兼容的最新版浏览器(新版 Microsoft Edge、Safari 最新版(仅 Mac)、Chrome 最新版、Firefox 最新版)。
计算资源选型
计算资源是运行模型训练与数据探索的云端资源,共四种:
- 计算实例(Compute Instances):数据科学家的开发工作站,创建 VM 并启动 notebook 实例,可从 notebook 调用计算集群训练模型;
- 计算集群(Compute Clusters):按需处理实验代码的可扩展 VM 集群,训练模型时需要;可使用专用 GPU 或 CPU 资源;
- 推理集群(Inference Clusters):部署使用已训练模型的预测服务的部署目标;
- 附加计算(Attached Compute):关联现有 Azure 计算资源,如 VM 或 Azure Databricks 集群。
选型时需权衡以下关键因素:
- CPU 还是 GPU:CPU 能快速处理广泛任务,但并发能力有限;GPU 专为并行计算设计,更适合深度学习。
- 集群大小:更大的集群更贵但响应更好;时间多预算少则从小集群起步,反之从大集群起步。
- VM 大小:可调整 RAM、磁盘、核心数与主频,参数越高越贵但性能越好。
- 专用还是低优先级实例:低优先级实例可被 Azure 回收并中断任务(更便宜),专用实例(不可中断)任务不会被未经许可终止。
创建计算集群的实操路径为:Studio → "Compute" 菜单 → "Compute cluster" 标签页 → "+ New",选择 Dedicated/Low priority、CPU/GPU、VM 大小与核心数 → 命名 → 设置最小/最大节点数、缩容空闲秒数与 SSH 访问 → Create。最小节点数为 0 时集群空闲即可省钱;最大节点数越多训练越快,推荐上限为 3。
上传数据集
在 Studio 左菜单点击 "Datasets" → "+ Create dataset" → 选择 "From local files" 并选择下载好的 Kaggle 数据集 → 命名、选类型、写描述后上传 → 在 Schema 中,将 anaemia、diabetes、high_blood_pressure、sex、smoking、DEATH_EVENT 的数据类型改为Boolean→ 点击 Next 和 Create。
AutoML 一键训练
AutoML 把「产出并比较几十个模型」这一资源密集型过程自动化。操作路径:Studio 左菜单 "Automated ML" → 选择刚上传的数据集 → 输入实验名、目标列(DEATH_EVENT)和之前创建的计算集群 → 任务类型选择Classification并点击 Finish。该步骤视集群大小约需30 分钟到 1 小时。运行结束后,在 "Automated ML" 标签页打开运行记录,点击 "Best model summary" 卡片中的算法即可查看最佳模型的详细描述,也可在 "Models" 标签页探索其他模型,并利用 "Explanations" 功能深入理解模型。
部署模型并消费端点
- 在最佳模型描述页点击Deploy;
- 填写名称、描述,计算类型选Azure Container Instance(ACI),启用认证后点击 Deploy(约需 20 分钟,期间可通过 "Deploy status" 刷新状态,变为"Healthy"即部署成功);
- 进入 "Endpoint" 标签页查看端点详情,再到 "Consume" 标签页获取REST 端点 URL与API 密钥。
Studio 会自动生成一个可本地运行的消费脚本,核心就是两行:
url = 'http://98e3715f-xxxx-xxxx-xxxx-9ec22d57b796.centralus.azurecontainer.io/score' api_key = '' # Replace this with the API key for the web serviceurl是 Consume 页中的 REST 端点,api_key是 Consume 页中的主密钥(仅当启用认证时提供)。运行脚本会得到默认输出b'"{\"result\": [true]}"'——因为脚本自动生成的示例数据全为 0/false(年龄 0、各项指标为 0),模型自然判断为「有风险」。若把输入替换为更真实的两个样本:
data = { "data": [ { 'age': "0", 'anaemia': "false", 'creatinine_phosphokinase': "0", 'diabetes': "false", 'ejection_fraction': "0", 'high_blood_pressure': "false", 'platelets': "0", 'serum_creatinine': "0", 'serum_sodium': "0", 'sex': "false", 'smoking': "false", 'time': "0", }, { 'age': "60", 'anaemia': "false", 'creatinine_phosphokinase': "500", 'diabetes': "false", 'ejection_fraction': "38", 'high_blood_pressure': "false", 'platelets': "260000", 'serum_creatinine': "1.40", 'serum_sodium': "137", 'sex': "false", 'smoking': "false", 'time': "130", }, ], }脚本将返回b'"{\"result\": [true, false]}"'——第一个全 0 样本预测为 true(有风险),第二个接近正常的样本预测为 false。这就是一次完整的云端模型消费闭环。
路线二:用 Azure ML SDK 以代码驱动全流程
Azure ML SDK 让你在任何 Python 环境中(Jupyter Notebook、VS Code 或任意 IDE)与 Azure Machine Learning 服务交互,核心能力包括:数据集生命周期管理、云端资源与实验的组织/监控/日志、本地或云端(含 GPU 加速)训练、AutoML 自动迭代算法与超参、以及把模型部署为 RESTful 服务。
环境准备
SDK 路线需要工作区和计算实例。工作区创建方法同路线一;计算实例在 Studio 的 Compute 菜单 → "+ New" 创建(命名、选 CPU/GPU、VM 大小与核心数)。数据集若尚未上传,参照路线一的「上传数据集」一节。仓库已附带可直接上传的完整 notebook 示例:5-Data-Science-In-Cloud/19-Azure/notebook.ipynb(在 Studio 的 "Notebook" 菜单中上传即可)。创建 notebook 后,通过 Compute instances 列表中的 Jupyter 入口启动实例,点击 "New" 新建 notebook。
工作区、实验、计算集群与数据集
从配置文件加载工作区,并创建实验:
from azureml.core import Workspace ws = Workspace.from_config() from azureml.core import Experiment experiment_name = 'aml-experiment' experiment = Experiment(ws, experiment_name)实验名须为 3-36 个字符,以字母或数字开头,只能包含字母、数字、下划线和连字符;若工作区中不存在该名称的实验,会自动新建。
创建训练用的计算集群(此步骤可能耗时数分钟):
from azureml.core.compute import AmlCompute aml_name = "heart-f-cluster" try: aml_compute = AmlCompute(ws, aml_name) print('Found existing AML compute context.') except: print('Creating new AML compute context.') aml_config = AmlCompute.provisioning_configuration(vm_size = "Standard_D2_v2", min_nodes=1, max_nodes=3) aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config) aml_compute.wait_for_completion(show_output = True) cts = ws.compute_targets compute_target = cts[aml_name]按名称从工作区取回数据集,并转为 pandas DataFrame 查看统计:
dataset = ws.datasets['heart-failure-records'] df = dataset.to_pandas_dataframe() df.describe()AutoMLConfig 配置与提交训练
使用AutoMLConfig类配置实验。本项目的关键参数及含义如下:
| 参数 | 含义 |
|---|---|
experiment_timeout_minutes | 实验允许运行的最大分钟数,超时自动停止并产出结果 |
max_concurrent_iterations | 允许的最大并发训练迭代数 |
primary_metric | 判断实验状态的主指标 |
compute_target | 运行 AutoML 实验的 Azure ML 计算目标 |
task | 任务类型:classification、regression或forecasting |
training_data | 训练数据,需包含特征与标签列(可选样本权重列) |
label_column_name | 标签列名称 |
path | Azure ML 项目文件夹的完整路径 |
enable_early_stopping | 评分短期无提升时是否提前终止 |
featurization | 是否自动进行特征工程(auto/ 关闭 / 自定义) |
debug_log | 调试信息写入的日志文件 |
from azureml.train.automl import AutoMLConfig project_folder = './aml-project' automl_settings = { "experiment_timeout_minutes": 20, "max_concurrent_iterations": 3, "primary_metric" : 'AUC_weighted' } automl_config = AutoMLConfig(compute_target=compute_target, task = "classification", training_data=dataset, label_column_name="DEATH_EVENT", path = project_folder, enable_early_stopping= True, featurization= 'auto', debug_log = "automl_errors.log", **automl_settings ) remote_run = experiment.submit(automl_config)提交后可用RunDetails组件可视化各实验:
from azureml.widgets import RunDetails RunDetails(remote_run).show()保存、部署与消费
remote_run是AutoMLRun对象,其get_output()返回最佳运行及对应的拟合模型:
best_run, fitted_model = remote_run.get_output() best_run.get_properties()随后下载 AutoML 自动生成的评分脚本并注册模型:
model_name = best_run.properties['model_name'] script_file_name = 'inference/score.py' best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py') description = "aml heart failure project sdk" model = best_run.register_model(model_name = model_name, model_path = './outputs/', description = description, tags = None)使用InferenceConfig(自定义部署环境的配置)与AciWebservice(部署到 Azure Container Instances 的 Web 服务端点类)完成部署:
from azureml.core.model import InferenceConfig, Model from azureml.core.webservice import AciWebservice inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment()) aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1, tags = {'type': "automl-heart-failure-prediction"}, description = 'Sample service for AutoML Heart Failure Prediction') aci_service_name = 'automl-hf-sdk' aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig) aci_service.wait_for_deployment(True) print(aci_service.state)部署完成后构造样本输入并调用端点:
data = { "data": [ { 'age': "60", 'anaemia': "false", 'creatinine_phosphokinase': "500", 'diabetes': "false", 'ejection_fraction': "38", 'high_blood_pressure': "false", 'platelets': "260000", 'serum_creatinine': "1.40", 'serum_sodium': "137", 'sex': "false", 'smoking': "false", 'time': "130", }, ], } test_sample = str.encode(json.dumps(data)) response = aci_service.run(input_data=test_sample) response预期输出'{"result": [false]}',表示该输入样本不太可能发生心力衰竭。
进阶挑战与配套资源
- 模型解释:仔细观察 AutoML 为最优模型生成的解释与细节,思考最佳模型为何优于其他模型——比较了哪些算法?差异在哪?为什么在当前数据上表现更好?
- SDK Pipeline:在 Azure ML SDK 文档中检索
Pipeline类,azureml.pipeline.core.Pipeline可将多个步骤编排为可执行的工作流。 - 课后实践:第 17 课的作业要求调研三家及以上云提供商的数据科学服务并撰写对比报告(见 5-Data-Science-In-Cloud/17-Introduction/assignment.md);第 18、19 课的作业则要求分别在 Studio 界面和 SDK 中独立完成一次心力衰竭预测项目(见 18-Low-Code/assignment.md 与 19-Azure/assignment.md)。
- 运行提醒:两节课都特别提醒——项目结束后务必删除全部云资源,避免产生持续费用。
小结
本章节的价值在于让初学者用同一个心力衰竭数据集、同一条「训练 → 部署 → 消费」链路,亲身体验云端数据科学的两种范式:零代码的 Studio 界面路线适合快速验证想法与搭建 POC;代码化的 Azure ML SDK 路线则是项目走向生产环境时资源自动化、流程可复现的关键。结合仓库中的 17-Introduction/README.md、18-Low-Code/README.md、19-Azure/README.md 三篇课程正文及其对应的保加利亚语译本(translations/bg/5-Data-Science-In-Cloud/),你可以按步骤完整复现整个项目,把「云端数据科学」从概念变为可运行的现实。
【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考