完整走完一个机器学习项目(end-to-end machine learning project)下

Hands on Machine Learning with Scikit-learn and TensorFlow 读书笔记

Chapter 2 End-to-End Machine Learning Project

在这一章,你将会走完一个完整的机器学习项目。主要步骤如下:

  1. 对所需解决的问题有一个总体的思路
  2. 获取数据
  3. 通过数据可视化来得到对数据潜在规律的一些思考
  4. 在训练模型之前先对数据进行预处理
  5. 选择一个合适的模型进行训练
  6. 调整并找到最合适的模型参数
  7. 长期监督并维护你的学习系统

前两篇写了1-4,这篇写完剩下的吧。
5. 选择一个合适的模型进行训练:
我们需要选择一个回归模型来训练,本例中我们选用 DecisionTreeRegressor,首先用预处理过的训练数据进行训练,然后用训练好的模型来预测这些数据的房价(housing_predictions),最后用RMSE来计算模型的预测误差:
完整走完一个机器学习项目(end-to-end machine learning project)下_第1张图片
这时候我们会很惊讶的发现,预测误差竟然为零,可见模型把训练数据拟合得很好。但是这种情况通常我们会觉得他是过拟合了,这时候我们需要从训练集数据中分出一部分来验证模型。
我们可以用 train_test_split 函数把训练集切分成训练集和验证集;但是更好的方法是使用 sklearn 提供的 k 折交叉验证。在本例中我们实现的是10折交叉验证,把数据集分成十个小数据集,它会在训练集上训练和验证模型十次,每次都选择不同的一个集作为验证剩下的九个用来训练。输入参数包括训练好的模型、预处理过的训练数据、数据集的标签(即房价)、衡量误差的指标和选用k折交叉验证的k值:
完整走完一个机器学习项目(end-to-end machine learning project)下_第2张图片
我们可以看到十折交叉验证得出的 score 有十个数值,并且这个函数还给出了这十折验证的标准差用来衡量预测的精确度;这个方法给了更多信息,但很多时候它也有局限,因为要多次训练导致花费时间太长。
大家还可以自己尝试线性回归、随机森林等模型,这里不展开啦。

  1. 调整并找到最合适的模型参数:
    假设我们通过一系列的尝试,选择了几个我们觉得比较好的模型,那么下一步我们要做的就是调整他们的参数(原书中是fine-tune,我翻译成了调整)。一个方法是手动尝试各种不同组合的超参数(hyperparameters),但这很繁琐。sklearn 提供了网格搜索 GridSearchCV,你只需要把你想要尝试的各种超参数输入进去,它会自动为你进行各种组合并验证,我们以随机森林为例:
    完整走完一个机器学习项目(end-to-end machine learning project)下_第3张图片
    输入的参数 param_grid 中包含了两个 dict,第一个 dict 表示有 3 * 4 = 12 种组合,第二个 dict 表示有 2 * 3 = 6 种组合,因此一共是 12 + 6 = 18 种组合;在本例中我们用了5折交叉验证,表示我们每尝试一种组合都要训练5次,那么总共就要训练 18 * 5 = 90 次,这会花费一些时间,但一旦他完成我们就会直接得到最合适的参数组合或者也可以查看最合适的模型:
    完整走完一个机器学习项目(end-to-end machine learning project)下_第4张图片
    当我们的组合相对较少的时候用网格搜索是好的,但当我们有很多组合的时候,最好是用随机搜索 RandomizedSearchCV,随机搜索不会验证所有组合,它会在每次验证的时候都随机选择参数。还有一种调整学习系统的方法是集成学习算法(ensemble methods),即把不同模型组合起来使用。
    我们还可以通过观察表现最好的模型来获取一些视角,比如我们可以看随机森林模型的属性相关度:
    完整走完一个机器学习项目(end-to-end machine learning project)下_第5张图片
    调整完参数之后,你选择了一个最合适的模型,这时候你需要最后在测试集上测试你的模型;不过要记得对测试集做跟训练集一样的预处理,把你之前的 transfomer pipeline 应用在测试集上:
    完整走完一个机器学习项目(end-to-end machine learning project)下_第6张图片

  2. 长期监督并维护你的学习系统:
    你的学习系统运行以后你需要写监控代码来长期检查他,包括长期查看模型的表现以及输入模型的数据质量。如果你的系统是在线学习,你最好保存每次的训练状态,这样之后如果你想回到某个状态就可以很简单的回溯。

第二章终于结束啦~~ 下次就开始写常用的一些算法的理解和应用啦

你可能感兴趣的:(机器学习)