Skip to content

Commit

Permalink
Copy Files From Source Repo (2023-10-20 17:33)
Browse files Browse the repository at this point in the history
  • Loading branch information
olprod committed Oct 21, 2023
1 parent 8329ac6 commit 29d680b
Show file tree
Hide file tree
Showing 10 changed files with 339 additions and 9 deletions.
3 changes: 1 addition & 2 deletions Instructions/Labs/08a-data-science-explore-data.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,7 @@ lab:
1. 使用单元格输出下方的“ **+ 代码**”图标将新代码单元格添加到笔记本中,然后输入以下代码。
```python
desc_stats = df.describe()
print(desc_stats)
df.describe()
```
平均年龄约为 48.5 年,标准偏差为 13.1 年。 年龄最小的是 19 岁,年龄最大的是 79 岁。 平均 `BMI` 约为 26.4,根据 [WHO 标准](https://www.who.int/health-topics/obesity#tab=tab_1),属于**超重**类别。 最小值 `BMI` 为 18,最大值为 42.2。
Expand Down
14 changes: 7 additions & 7 deletions Instructions/Labs/08b-data-science-preprocess-data-wrangler.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ lab:
>注意:代码会自动复制到笔记本单元格,并可供使用。
1. 将第 10 行和第 11 行替换为代码 `df = clean_data(df)`,因为数据整理器中生成的代码不会覆盖原始数据帧。 最终块应如下所示
1. 将第 10 行和第 11 行替换为代码 `df = clean_data(df)`,因为数据整理器中生成的代码不会覆盖原始数据帧。 最终代码块应如下所示
```python
def clean_data(df):
Expand Down Expand Up @@ -171,7 +171,7 @@ lab:
1. 在 `df` 数据帧的顶部菜单中启动数据整理程序。
1. 选择网格上的 `Brand` 特征。
1. 选择网格上的 `Brand` 特征。
1. 在“操作”面板上,展开“公式”,然后选择“独热编码” 。
Expand All @@ -183,7 +183,7 @@ lab:
## 排序和筛选操作
假设我们需要查看特定商店的收入数据,然后对产品价格进行排序。 在以下步骤中,我们使用数据整理器筛选和分析 `df` 数据帧。
假设我们需要查看特定商店的收入数据,然后对产品价格进行排序。 在以下步骤中,我们使用数据整理器筛选和分析 `df` 数据帧。
1. 针对 `df` 数据帧启动据整理器。
Expand Down Expand Up @@ -250,11 +250,11 @@ lab:
1. 为“聚合类型”属性选择“平均值” 。
1. 选择**应用**。
1. 选择**应用**。
1. 选择“将代码添加到笔记本”。
1. 选择“将代码添加到笔记本”。
1. 将 `Brand` 变量转换中的代码与 `clean_data(df)` 函数中的聚合步骤生成的代码组合在一起。 最终块应如下所示
1. 将 `Brand` 变量转换中的代码与 `clean_data(df)` 函数中的聚合步骤生成的代码组合在一起。 最终代码块应如下所示
```python
def clean_data(df):
Expand All @@ -277,7 +277,7 @@ lab:
```python
print(df)
```
```
结果:
```
Expand Down
264 changes: 264 additions & 0 deletions Instructions/Labs/08c-data-science-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
---
lab:
title: 在 Microsoft Fabric 中训练和跟踪模型
module: Train and track machine learning models with MLflow in Microsoft Fabric
---

# 在 Microsoft Fabric 中使用 MLflow 训练和跟踪机器学习模型

在此实验中,你将训练机器学习模型来预测糖尿病的定量度量。 将使用 scikit-learn 训练回归模型,并使用 MLflow 跟踪和比较模型。

完成此实验后,你将获得机器学习和模型跟踪的实践经验,并了解如何在 Microsoft Fabric 中使用笔记本、试验和模型 。

完成本实验室大约需要 45 分钟。

> 注意:完成本练习需要 Microsoft Fabric 许可证。 有关如何启用免费 Fabric 试用版许可证的详细信息,请参阅 [Fabric 入门](https://learn.microsoft.com/fabric/get-started/fabric-trial)。 执行此操作需要 Microsoft 学校或工作帐户 。 如果没有,可以[注册 Microsoft Office 365 E3 或更高版本的试用版](https://www.microsoft.com/microsoft-365/business/compare-more-office-365-for-business-plans)
## 创建工作区

在 Fabric 中使用模型之前,在已启用的 Fabric 试用版中创建工作区。

1. 登录到 [Microsoft Fabric](https://app.fabric.microsoft.com) (`https://app.fabric.microsoft.com`),然后选择 Power BI。
2. 在左侧菜单栏中,选择“工作区”(图标类似于 🗇)。
3. 新建一个工作区并为其指定名称,并选择包含 Fabric 容量(试用版、高级版或 Fabric)的许可模式 。
4. 打开新工作区时,它应为空,如下所示:

![Power BI 中空工作区的屏幕截图。](./Images/new-workspace.png)

## 创建笔记本

若要训练模型,可以创建笔记本。 笔记本提供了一个交互式环境,可在其中编写和运行(多种语言的)代码。

1. 在 Fabric 门户左下角,选择“数据工程”图标并切换到“数据科学”体验 。

1. 在“数据科学”主页中,创建新的笔记本 。

几秒钟后,一个包含单个单元格的新笔记本将会打开。 笔记本由一个或多个单元格组成,这些单元格可以包含代码或 markdown(格式化文本) 。

1. 选择第一个单元格(当前是代码单元格),然后在其右上角的动态工具栏中,使用 M↓ 按钮将单元格转换为 markdown 单元格。

当单元格更改为 markdown 单元格时,它包含的文本将会呈现。

1. 使用 🖉(“编辑”)按钮将单元格切换到编辑模式,然后删除内容并输入以下文本:

```text
# Train a machine learning model and track with MLflow
```
## 将数据加载到数据帧中
现在,你已准备好运行代码来获取数据和训练模型。 将使用 Azure 开放数据集中的[糖尿病数据集](https://learn.microsoft.com/azure/open-datasets/dataset-diabetes?tabs=azureml-opendatasets?azure-portal=true)。 加载数据后,将数据转换为 Pandas 数据帧:处理行和列中数据的常见结构。
1. 在笔记本中,使用最新单元格输出下方的“+ 代码”图标将新的代码单元格添加到笔记本,并在其中输入以下代码:
```python
# Azure storage access info for open dataset diabetes
blob_account_name = "azureopendatastorage"
blob_container_name = "mlsamples"
blob_relative_path = "diabetes"
blob_sas_token = r"" # Blank since container is Anonymous access
# Set Spark config to access blob storage
wasbs_path = f"wasbs://%s@%s.blob.core.windows.net/%s" % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set("fs.azure.sas.%s.%s.blob.core.windows.net" % (blob_container_name, blob_account_name), blob_sas_token)
print("Remote blob path: " + wasbs_path)
# Spark read parquet, note that it won't load any data yet by now
df = spark.read.parquet(wasbs_path)
```
1. 使用单元格左侧的“▷ 运行单元格”按钮运行单元格。 或者,可以按键盘上的 `SHIFT` + `ENTER` 来运行单元格。
> 注意:由于这是你第一次在此会话中运行 Spark 代码,因此必须启动 Spark 池。 这意味着会话中的第一次运行可能需要一分钟左右才能完成。 后续运行速度会更快。
1. 使用单元格输出下方的“+ 代码”图标将新的代码单元格添加到笔记本,并在其中输入以下代码:
```python
display(df)
```
1. 单元格命令完成后,查看单元格下方的输出,该输出应如下所示:
|年龄|SEX|BMI|BP|S1|S2|S3|S4|S5|S6|Y|
|---|---|---|--|--|--|--|--|--|--|--|
|59|2|32.1|101.0|157|93.2|38.0|4.0|4.8598|87|151|
|48|1|21.6|87.0|183|103.2|70.0|3.0|3.8918|69|75|
|72|2|30.5|93.0|156|93.6|41.0|4.0|4.6728|85|141|
|24|1|25.3|84.0|198|131.4|40.0|5.0|4.8903|89|206|
|50|1|23.0|101.0|192|125.4|52.0|4.0|4.2905|80|135|
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
输出显示糖尿病数据集的行和列。
1. 数据作为 Spark 数据帧加载。 Scikit-learn 将期望输入数据集是 Pandas 数据帧。 运行以下代码将数据集转换为 Pandas 数据帧:
```python
import pandas as pd
df = df.toPandas()
df.head()
```
## 训练机器学习模型
现在,你已加载数据,可以使用它来训练机器学习模型并预测糖尿病的定量度量。 我们将使用 scikit-learn 库训练模型,并使用 MLflow 跟踪模型。
1. 运行以下代码,将数据拆分为训练数据集和测试数据集,并将特征与要预测的标签分开:
```python
from sklearn.model_selection import train_test_split
print("Splitting data...")
X, y = df[['AGE','SEX','BMI','BP','S1','S2','S3','S4','S5','S6']].values, df['Y'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=0)
```
1. 在笔记本中添加另一个新代码单元格,在其中输入以下代码并运行它:
```python
import mlflow
experiment_name = "experiment-diabetes"
mlflow.set_experiment(experiment_name)
```
该代码创建名为 `experiment-diabetes` 的 MLflow 试验。 在此试验中跟踪模型。
1. 在笔记本中添加另一个新代码单元格,在其中输入以下代码并运行它:
```python
from sklearn.linear_model import LinearRegression
with mlflow.start_run():
mlflow.autolog()
model = LinearRegression()
model.fit(X_train, y_train)
mlflow.log_param("estimator", "LinearRegression")
```
代码使用线性回归训练回归模型。 使用 MLflow 自动记录参数、指标和项目。 此外,还需要记录一个名为 `estimator` 的参数,其值为 `LinearRegression`。
1. 在笔记本中添加另一个新代码单元格,在其中输入以下代码并运行它:
```python
from sklearn.tree import DecisionTreeRegressor
with mlflow.start_run():
mlflow.autolog()
model = DecisionTreeRegressor(max_depth=5)
model.fit(X_train, y_train)
mlflow.log_param("estimator", "DecisionTreeRegressor")
```
代码使用决策树回归量训练回归模型。 使用 MLflow 自动记录参数、指标和项目。 此外,还需要记录一个名为 `estimator` 的参数,其值为 `DecisionTreeRegressor`。
## 使用 MLflow 搜索和查看试验
使用 MLflow 训练和跟踪模型后,可以使用 MLflow 库检索试验及其详细信息。
1. 若要列出所有试验,请使用以下代码:
```python
import mlflow
experiments = mlflow.search_experiments()
for exp in experiments:
print(exp.name)
```
1. 若要检索特定试验,可按名称获取试验:
```python
experiment_name = "experiment-diabetes"
exp = mlflow.get_experiment_by_name(experiment_name)
print(exp)
```
1. 使用试验名称,可以检索该试验的所有作业:
```python
mlflow.search_runs(exp.experiment_id)
```
1. 若要更轻松地比较作业运行和输出,可以配置搜索以对结果进行排序。 例如,以下单元格按 `start_time` 对结果进行排序,且仅显示最多 `2` 个结果:
```python
mlflow.search_runs(exp.experiment_id, order_by=["start_time DESC"], max_results=2)
```
1. 最后,可以绘制多个模型的评估指标,以便轻松比较模型:
```python
import matplotlib.pyplot as plt
df_results = mlflow.search_runs(exp.experiment_id, order_by=["start_time DESC"], max_results=2)[["metrics.training_r2_score", "params.estimator"]]
fig, ax = plt.subplots()
ax.bar(df_results["params.estimator"], df_results["metrics.training_r2_score"])
ax.set_xlabel("Estimator")
ax.set_ylabel("R2 score")
ax.set_title("R2 score by Estimator")
for i, v in enumerate(df_results["metrics.training_r2_score"]):
ax.text(i, v, str(round(v, 2)), ha='center', va='bottom', fontweight='bold')
plt.show()
```
输出应如下图所示:
![绘制的评估指标的屏幕截图。](./Images/plotted-metrics.png)
## 探索试验
Microsoft Fabric 将跟踪所有试验,并支持直观地探索它们。
1. 导航到“数据科学”主页。
1. 选择 `experiment-diabetes` 试验将其打开。
> 提示:如果看不到任何记录的试验运行,请刷新页面。
1. 选择“视图”选项卡。
1. 选择“运行列表”。
1. 通过选中每个框来选择两个最新运行。
因此,最后两个运行将在“指标比较”窗格中相互比较。 默认情况下,指标按运行名称绘制。
1. 选择图形的 🖉(“编辑”)按钮,以可视化每个运行的平均绝对误差。
1. 将可视化效果类型更改为 `bar`。
1. 将 X 轴更改为 `estimator`。
1. 选择“替换”并浏览新图形。
1. (可选)可以对“指标比较”窗格中的其他图形重复这些步骤。
通过绘制每个记录的估算器的性能指标,可以查看哪种算法可生成更好的模型。
## 保存模型
比较了在试验运行中训练的机器学习模型后,可以选择性能最佳的模型。 若要使用性能最佳的模型,请保存模型并使用它生成预测。
1. 在试验概述中,确保已选择“视图”选项卡。
1. 选择“运行详细信息”。
1. 选择 R2 分数最高的运行。
1. 在“另存为模型”框中选择“保存” 。
1. 在新打开的弹出窗口中选择“创建新模型”。
1. 选择 `model` 文件夹。
1. 将模型命名为 `model-diabetes`,然后选择“保存”。
1. 在创建模型时屏幕右上角显示的通知中选择“查看模型”。 还可刷新窗口。 已保存的模型在“模型版本”下链接。
请注意,模型、试验和试验运行是链接的,以便你查看模型的训练方式。
## 保存笔记本并结束 Spark 会话
完成模型训练和评估后,可以使用有意义的名称保存笔记本并结束 Spark 会话。
1. 在笔记本菜单栏中,使用 ⚙️“设置”图标查看笔记本设置。
2. 将笔记本的“名称”设置为“训练和比较模型”,然后关闭设置窗格 。
3. 在笔记本菜单上,选择“停止会话”以结束 Spark 会话。
## 清理资源
在本练习中,你已创建笔记本并训练了机器学习模型。 你已使用 scikit-learn 来训练模型,并使用 MLflow 来跟踪其性能。
如果已完成模型和试验,可以删除为本练习创建的工作区。
1. 在左侧栏中,选择工作区的图标以查看其包含的所有项。
2. 在工具栏上的“...”菜单中,选择“工作区设置” 。
3. 在“其他”部分中,选择“删除此工作区” 。
67 changes: 67 additions & 0 deletions Instructions/Labs/12-query-data-in-kql-database.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
lab:
title: 在 KQL 数据库中查询数据
module: Query data from a Kusto Query database in Microsoft Fabric
---
# 在 Microsoft Fabric 中查询 Kusto 数据库入门
KQL 查询集是一种工具,可用于查询 KQL 数据库、修改和显示来自其中的查询结果。 可以将 KQL 查询集中的每个选项卡链接到不同的 KQL 数据库,并保存查询以供将来使用或与他人共享进行数据分析。 还可以更换任何选项卡的 KQL 数据库,以比较来自不同数据源的查询结果。

KQL 查询集使用 Kusto 查询语言(与许多 SQL 函数兼容)来创建查询。 为深入了解 [kusto 查询 (KQL) 语言](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/?context=%2Ffabric%2Fcontext%2Fcontext)

完成本实验室大约需要 25 分钟。

## 创建工作区

在 Fabric 中处理数据之前,在已启用的 Fabric 试用版中创建工作区。

1. 登录到 [Microsoft Fabric](https://app.fabric.microsoft.com) (`https://app.fabric.microsoft.com`),然后选择 Power BI。
2. 在左侧菜单栏中,选择“工作区”(图标类似于 🗇)。
3. 新建一个工作区并为其指定名称,并选择包含 Fabric 容量(试用版、高级版或 Fabric)的许可模式 。
4. 打开新工作区时,它应为空,如下所示:

![Power BI 中空工作区的屏幕截图。](./Images/new-workspace.png)

在本实验室中,你将在 Fabric 中使用实时分析 (RTA),通过示例事件流创建 KQL 数据库。 实时分析 (RTA) 可以方便地提供一个示例数据集,供你用来探索 RTA 的功能。 你将使用此示例数据创建 KQL | SQL 查询和查询集,用于分析一些实时数据,还可以在下游进程中使用。

## 创建 KQL 数据库

1. 在“实时分析”中,选择“KQL 数据库”框 。

![选择 kqldatabase 的图像](./Images/select-kqldatabase.png)

2. 系统会提示为 KQL 数据库命名

![名称 kqldatabase 的图像](./Images/name-kqldatabase.png)

3. 为 KQL 数据库指定一个你能记住的名称(如 MyStockData),然后按“创建” 。

4. 在“数据库详细信息”面板中,选择铅笔图标以在 OneLake 中打开可用性。

![“启用 onelake”的图像](./Images/enable-onelake-availability.png)

5. 从“开始获取数据”的选项中选择“示例数据”框。

![图像显示了一系列选择选项,并突出显示了示例数据](./Images/load-sample-data.png)

6. 从示例数据的选项中选择“指标分析”框。

![“选择实验室分析数据”的图像](./Images/create-sample-data.png)

7. 加载数据后,数据加载到 KQL 数据库中。 为此,可以选择表右侧的省略号,导航到“查询表”,然后选择“显示任意 100 条记录”。

<div><video controls src="./Images/check-kql-sample-dataset.mp4" muted="false" autoplay loop></video></div>

> 注:首次运行此功能时,可能需要几秒钟来分配计算资源。
## 方案
在此方案中,你是一名分析师,负责查询一个要从 Fabric 环境实现的示例数据集。



Kusto 查询是读取数据、处理数据和显示结果的一种方法。 查询以易于使用的纯文本编写。 Kusto 查询可以有一个或多个以表或图的形式显示数据的语句。

Table 语句包含一些处理表数据的运算符。 每个运算符采用表作为输入,并输出一个表。 运算符之间由竖线 (|) 联接。 数据从一个运算符转移到另一个运算符。 每个运算符都以某种方式更改并传递数据。

可以将其想象成漏斗,一开始是整个数据表。 各个运算符筛选、排序或汇总数据。 运算符的顺序会产生影响,因为它们是一个接一个地按顺序工作。 在漏斗末尾,会获得最终输出。

这些运算符特定于 KQL,但可能与 SQL 或其他语言中的情况类似。
Binary file not shown.
Binary file added Instructions/Labs/Images/create-sample-data.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Instructions/Labs/Images/data-wrangler-delete.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Instructions/Labs/Images/data-wrangler-summary.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Instructions/Labs/Images/load-sample-data.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Instructions/Labs/Images/select-kqldatabase.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 29d680b

Please sign in to comment.