机器学习技术确实非常出色,尽管有时候需要面对复杂的数学计算。目前,机器学习工具已经取得了显著的进步,使得训练模型变得更加简便。
我们将利用数据集的知识来开发能够洞察数据的模型,而不是依赖于对原始数学运算的理解。
本次课程,我们将使用一些实用的代码来训练一个简单的分类程序。该程序的相关代码可以在GitHub Gist上找到:AIA003tfestimators.ipynb。
我们将使用Google的开源机器学习库——TensorFlow来训练我们的分类模型。TensorFlow提供了丰富的API接口,但我们只需要使用其中的一些高层次API,即评估器(Estimator)。评估器封装了训练循环,使我们可以配置评估器来训练模型,而无需手动编写训练循环。这不仅减少了样板代码,还使我们能够更专注于模型的核心逻辑,享受机器学习的乐趣。
目前我们仅讨论了线性模型的设计,后续会进一步探讨并优化模型的性能。
本周的任务是构建一个模型来区分三种相似的花卉。虽然这次任务不如之前处理葡萄酒分类那么吸引人,但识别不同种类的鸢尾花更具挑战性。
我们需要区分山鸢尾、变色鸢尾和维吉尼亚鸢尾。尽管我自己可能难以从一片玫瑰中找出一枝鸢尾花,但我们的模型将能够准确识别这三种鸢尾花。
我们有一个包含花卉花瓣和萼片尺寸数据的数据集。这四列数据就是之前提到的“特征”。
在引入TensorFlow和NumPy之后,我们需要使用TensorFlow的load_csv_with_header函数来加载数据集。数据集中的特征以浮点数形式呈现,而每种花卉的类别则用0、1和2表示。
我已经将数据加载的结果展示出来,现在可以通过命名属性来获取训练数据和相应的标签。
接下来是构建模型。首先,我们需要定义特征列,这些列描述了进入模型的数据类型。我们使用四个维度的特征列来表示数据集中的特征,并将其称为“花卉特征”。
创建评估器很简单。我们通过传递特征列、模型预测的类别数(这里是3)以及指定用于存储模型训练过程和结果的目录来实例化模型。这些步骤让TensorFlow能够从上次中断的地方继续训练。
评估器对象会记录形状,现在我们几乎可以开始训练了。为了将数据输入模型,我们需要创建一个输入函数。这个函数的主要任务是生成可供模型使用的数据。
注意,我们使用与元数据相同的特征列名称作为特征值的标签,这样数据就能正确地映射到模型训练过程中。
接下来是训练阶段。我们只需将输入函数传递给classifier.train()方法即可。这就是将数据与模型连接起来的方式。
训练过程会在数据集上进行循环,每次迭代都会提升模型的性能。如预期所示,我们在1000次迭代后成功完成了训练。由于数据集不大,这个过程非常迅速。
现在是时候评估模型的表现了。由于之前的评估器对象已经保存了模型训练的状态,我们可以继续使用它来进行评估。通过调用classifier.evaluate()并传入测试数据,我们可以从返回的矩阵中提取出准确率数据。
最终,我们得到了96.88%的准确率,效果非常出色!
本周的课程就到这里,我们一起回顾了如何使用评估器API来获取元数据、创建输入函数、设置特征列和模型结构、执行训练过程以及进行预测。这个简洁的框架让我们可以专注于数据及其属性,而无需过多关注数学细节。