47、云机器学习引擎:托管式机器学习交互指南

云机器学习引擎:托管式机器学习交互指南

在机器学习领域,云机器学习引擎为我们提供了强大的工具来训练和使用模型进行预测。下面将通过一个使用美国人口普查数据的实例,详细介绍如何与云机器学习引擎进行交互。

1. 美国人口普查数据概述

美国人口普查每 10 年进行一次全国性调查,收集人口的基本信息,如年龄、家庭成员数量等。这些数据是公开的,可用于进行有趣的预测。我们将使用其中包含基本个人信息(如教育程度、就业详情)的子集数据。

所有使用的美国人口普查数据都是匿名的,不会涉及具体个人。数据集中的每一行包含个人的年龄、就业情况、教育程度、婚姻状况、种族、收入类别等信息。以下是一些简化的示例行:
| 年龄 | 就业情况 | 教育程度 | 婚姻状况 | 种族 | 性别 | 收入 |
| — | — | — | — | — | — | — |
| 39 | State - gov | Bachelors | Never married | White | Male | <=50K |
| 50 | Self - emp | Bachelors | Married | White | Male | >50K |
| 38 | Private | HS - grad | Divorced | White | Male | <=50K |
| 53 | Private | 11th | Married | Black | Male | <=50K |

我们可以使用一行中的其他数据来训练一个模型,该模型可以根据这些信息预测收入类别。例如,训练一个模型来预测一个人一年的收入是否超过 50,000 美元。

2. 创建模型

模型可以看作是一个实现特定功能的预测函数容器。在这个例子中,模型接受缺少收入类别的美国人口普查数据行作为输入,并返回预测的收入类别作为输出。

创建模型的步骤如下:
1. 打开云控制台,从左侧导航栏选择“ML Engine”(位于“大数据”下),会出现创建新模型的提示界面。
2. 点击“创建模型”,会弹出一个简短的表单,在这里可以为模型命名并进行描述。我们将模型命名为“census”,之后将以此唯一标识该模型。

创建模型后,可以通过以下命令查看模型和版本信息:

$ gcloud ml-engine models list
NAME    DEFAULT_VERSION_NAME
census
$ gcloud ml-engine versions list --model=census
Listed 0 items.

可以看到,模型已创建,但还没有版本,也没有默认版本。接下来需要对模型进行训练,在此之前,需要设置好云存储,准备好训练所需的代码和数据。

3. 设置云存储

为了训练“census”模型,需要准备大量的美国人口普查数据,并确保这些数据存储在 Google 云存储的正确位置。可以使用 gsutil 工具从公共云存储桶下载示例数据:

$ mkdir data                                              
$ gsutil -m cp gs://cloudml-public/census/data/* data/    

这个数据集开始时较小(约 6MB),但仍能帮助我们做出合理准确的预测。有两个数据集: adult.data.csv 用于训练模型, adult.test.csv 用于评估模型。可以将训练数据集看作是学习时的示例问题,而测试数据集则类似于课程结束时的期末考试。

接下来,需要在云存储中创建一个新的存储桶来存放这些数据,同时该存储桶还将用于存放训练后的模型数据以及后续预测作业所需的数据。为了避免跨区域数据传输成本,将存储桶设置在 us - central1 区域:

$ gsutil mb -l us-central1 gs://your-ml-bucket-name-here

最后,将下载的数据上传到新创建的存储桶中:

$ gsutil -m cp -R data gs://your-ml-bucket-name-here/data
4. 训练模型

当所有数据都准备好后,就可以开始考虑模型的代码以及使用这些代码和数据进行训练的作业了。示例代码位于 GitHub 的 @GoogleCloudPlatform/cloudml - samples 仓库中,可以使用 git 克隆该仓库:

$ git clone https://github.com/GoogleCloudPlatform/cloudml-samples
$ cd cloudml-samples/census/tensorflowcore/

提交一个新的训练作业:

$ gcloud ml-engine jobs submit training census1 \  
  --stream-logs \
  --runtime-version 1.2 \                    
  --job-dir gs://your-ml-bucket-name-here/census \  
  --module-name trainer.task \                     
  --package-path trainer/ \
  --region us-central1 \                              
  -- \                                               
  --train-files gs://your-ml-bucket-name-here/data/adult.data.csv \                              
  --eval-files gs://your-ml-bucket-name-here/data/adult.test.csv \
  --train-steps 10000 \                
  --eval-steps 500

运行该命令后,会看到大量关于训练进度的输出,整个过程通常不会花费太长时间(一般几分钟)。

如果遇到 ML 引擎无法从 GCS 路径读取数据的错误,错误信息中会包含尝试访问数据的服务账户名称。可以在云控制台中编辑存储桶权限,将该服务账户设置为“对象查看者”和“对象创建者”,以授予其只读访问权限。

训练完成后,可以使用 gsutil 查看输出:

$ gsutil ls gs://your-ml-bucket-name-here/census
$ gsutil ls gs://your-ml-bucket-name-here/census/export

最后,需要根据训练作业的输出创建一个新的模型版本。在云控制台的 ML 引擎部分选择“census”模型,点击创建版本的链接,将版本命名为“v1”,并指向 census/export/saved_model.pb 文件。点击“创建”,会加载模型版本并将其自动设置为“census”模型的默认版本。

以下是整个流程的 mermaid 流程图:

graph LR
    A[创建模型] --> B[设置云存储]
    B --> C[下载数据]
    C --> D[创建存储桶]
    D --> E[上传数据]
    E --> F[克隆代码仓库]
    F --> G[提交训练作业]
    G --> H[训练模型]
    H --> I[创建模型版本]
5. 进行预测

模型训练完成后,就可以使用它进行预测了。预测方式取决于需要同时进行的预测数量。

单个行的预测

如果只需要对单个行进行预测,可以直接将数据发送给模型。例如,使用 GitHub 仓库中 census/test.json 文件中的数据,这是一个代表 25 岁人的数据行,部分字段摘要如下:
| 年龄 | 就业情况 | 教育程度 | 婚姻状况 | 种族 | 性别 |
| — | — | — | — | — | — |
| 25 | Private | 11th grade | Never married | Black | Male |

使用以下命令进行预测:

$ gcloud ml-engine predict \
  --model census --version v1 \   
  --json-instances test.json        

输出结果如下:

CONFIDENCE  PREDICTIONS
0.78945      <=50K      

可以看到,预测该人年收入可能低于 50,000 美元,但预测的置信度不是很高。如果将此人的年龄改为 20 岁,置信度会提高:

$ gcloud ml-engine predict --model census --version v1 --json-instances ../test2.json

输出结果:

CONFIDENCE  PREDICTIONS
0.825162     <=50K
多行数据的预测

如果需要对大量实例进行预测,使用预测作业会更合适。预测作业的处理方式与训练模型类似,先将需要预测的数据上传到云存储,然后提交预测作业,让 ML 引擎拉取数据并将预测结果存储到云存储的另一个位置。

可以使用之前的 test.json 文件,修改它添加更多行。例如,将每行的年龄增加 5 岁,从 25 岁到 65 岁,共 10 行数据。

首先,将修改后的数据上传到云存储:

$ gsutil cp data.json gs://your-ml-bucket-name-here/data.json

然后,提交预测作业:

$ gcloud ml-engine jobs submit prediction prediction1 \
  --model census --version v1 \
  --data-format TEXT \
  --region us-central1 \
  --input-paths gs://your-ml-bucket-name-here/data.json \
  --output-path gs://your-ml-bucket-name-here/prediction1-output

作业完成后,可以查看云存储中 prediction1 - output 目录下的输出结果:

$ gsutil ls gs://your-ml-bucket-name-here/prediction1-output   
$ gsutil cat gs://your-ml-bucket-name-here/prediction1-output/prediction.results-00000-of-00001        

从预测结果可以看出,在其他条件不变的情况下,年龄增加不会改变预测结果,但会降低置信度,即模型对年轻人的预测更有信心。

综上所述,通过以上步骤,我们可以使用云机器学习引擎,利用美国人口普查数据训练模型并进行预测。无论是单个行的预测还是大量数据的预测,都可以通过云机器学习引擎高效地完成。

云机器学习引擎:托管式机器学习交互指南

6. 预测结果分析

在完成预测后,对预测结果进行分析有助于我们深入了解模型的性能和特点。以下是对前面预测结果的进一步分析:

  • 置信度变化趋势 :从前面的预测结果可以看出,随着年龄的增加,模型预测的置信度逐渐降低。这可能是因为在数据集中,年轻人的收入模式相对较为集中和规律,而随着年龄的增长,收入受到更多因素的影响,如职业发展、行业变化等,导致收入分布更加分散,模型难以准确预测。
  • 预测稳定性 :尽管置信度有所变化,但预测结果本身在年龄增加的过程中保持不变。这表明模型在一定程度上具有稳定性,能够根据其他特征(如就业情况、教育程度等)做出相对稳定的预测。

为了更直观地展示置信度随年龄的变化情况,我们可以绘制一个表格:
| 年龄 | 置信度 |
| — | — |
| 20 | 0.825162 |
| 25 | 0.78945 |
| 30 | 0.749710738658905 |
| 35 | 0.7241880893707275 |
| 40 | 0.7074624300003052 |
| 45 | 0.7138040065765381 |
| 50 | 0.7246076464653015 |
| 55 | 0.7297274470329285 |
| 60 | 0.7511150240898132 |
| 65 | 0.784980833530426 |

通过这个表格,我们可以更清晰地观察到置信度的变化趋势。

7. 模型优化建议

基于前面的分析,我们可以提出一些模型优化的建议,以提高模型的性能和预测准确性。

  • 增加数据量 :目前使用的数据集较小,只有约 6MB。增加更多的美国人口普查数据可以让模型学习到更丰富的特征和模式,从而提高预测的准确性。可以从其他公共数据源或自行收集相关数据,并将其添加到训练数据集中。
  • 特征工程 :除了现有的特征(如年龄、就业情况、教育程度等),可以考虑添加更多有意义的特征。例如,工作年限、所在地区的经济发展水平等,这些特征可能对收入预测有重要影响。同时,对现有特征进行处理和转换,如对连续特征进行离散化、对分类特征进行编码等,也有助于提高模型的性能。
  • 调整模型参数 :在训练模型时,可以尝试调整一些参数,如训练步数、评估步数等。增加训练步数可以让模型更充分地学习数据中的模式,但也可能导致过拟合。因此,需要通过交叉验证等方法找到合适的参数值。

以下是一个简单的调整训练步数的示例代码:

$ gcloud ml-engine jobs submit training census1 \  
  --stream-logs \
  --runtime-version 1.2 \                    
  --job-dir gs://your-ml-bucket-name-here/census \  
  --module-name trainer.task \                     
  --package-path trainer/ \
  --region us-central1 \                              
  -- \                                               
  --train-files gs://your-ml-bucket-name-here/data/adult.data.csv \                              
  --eval-files gs://your-ml-bucket-name-here/data/adult.test.csv \
  --train-steps 20000 \  # 增加训练步数                
  --eval-steps 1000
8. 总结与展望

通过本文的介绍,我们详细了解了如何使用云机器学习引擎,利用美国人口普查数据训练模型并进行预测。整个过程包括创建模型、设置云存储、训练模型和进行预测等步骤,每个步骤都有明确的操作方法和代码示例。

在实际应用中,我们可以根据具体需求对模型进行优化和扩展,以提高模型的性能和实用性。例如,将模型应用于其他领域的收入预测,或者与其他模型进行集成,以获得更准确的预测结果。

未来,随着机器学习技术的不断发展和数据量的不断增加,云机器学习引擎将在更多领域发挥重要作用。我们可以期待更强大的模型和更高效的训练方法的出现,为我们解决各种复杂的问题提供有力支持。

以下是整个模型使用流程的总结 mermaid 流程图:

graph LR
    A[数据准备] --> B[创建模型]
    B --> C[设置云存储]
    C --> D[训练模型]
    D --> E[创建模型版本]
    E --> F[进行预测]
    F --> G[结果分析]
    G --> H[模型优化]
    H --> D[训练模型]

通过这个流程图,我们可以清晰看到整个模型使用的循环过程,从数据准备到模型训练,再到预测和优化,不断迭代以提高模型性能。

总之,云机器学习引擎为我们提供了一个强大而便捷的平台,让我们能够轻松地进行模型训练和预测。希望本文的内容对大家有所帮助,让大家能够更好地利用云机器学习引擎解决实际问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值