美文网首页
适合练手的完整机器学习项目-Part 3

适合练手的完整机器学习项目-Part 3

作者: 博士伦2014 | 来源:发表于2018-09-27 11:05 被阅读0次

    禁止一切形式转载

    书接上文

    在这个项目中,我们正在研究处理现实世界数据集的完整机器学习问题。 使用建筑能源数据,我们正在尝试建立一个模型来预测建筑物的能源之星得分,使其成为监督回归,机器学习任务。

    在前两个part 中,我们实现了机器学习一般流程中的前6步:

    1.数据清理和格式化
    2.探索性数据分析
    3.特征工程和特征选择
    4.在性能指标上比较几种机器学习模型
    5.对最佳模型执行超参数调整
    6.在测试集合中评估最佳模型
    7.解释模型结果
    8.得出结论
    在Part 3 中,我们将专注于最后两个步骤,并尝试探究我们构建的模型。 它就像一个黑盒子,我们知道它是准确的,因为它可以预测能源之星得分在真实值的9.1分之内,但它究竟是如何做出预测的呢? 我们将研究一些尝试理解gradient boosting machine然后得出结论的方法(我将不再需要编写报告,而是链接到我为给我这个作业作为工作申请的公司完成的报告)

    导入工具包
    读取数据
    重新创建最终模型

    7. 解释模型

    机器学习经常被批评为一个黑盒子:我们把数据在这边放进去,它在另一边给了我们答案。 虽然这些答案通常都非常准确,但该模型并未告诉我们它实际上如何做出预测。 这在某种程度上是正确的,但我们可以通过多种方式尝试并发现模型如何“思考”,例如Locally Interpretable Model-agnostic Explainer (LIME)。这种方法试图通过学习围绕预测的线性回归来解释模型预测,这是一个易于解释的模型!
    我们将探索几种解释模型的方法:

    • 特征重要性
    • 本地可解释的模型不可知解释器(LIME)
    • 检查整体中的单个决策树。
    7.1 特征重要性

    我们可以解释决策树集合的基本方法之一是通过所谓的特征重要性。 这些可以解释为最能预测目标的变量。 虽然特征重要性的实际细节非常复杂(这里是Stack Overflow上关于这个主题的问题),我们可以使用相对值来比较特征并确定哪些与我们的问题最相关。

    在scikit-learn中,从训练有素的树中提取特征重要性非常容易。 我们将特征重要性存储在数据框中以分析和可视化它们。

    7.2 使用特征重要性进行特征选择

    鉴于并非每个特征对于找到分数都很重要,如果我们使用更简单的模型(如线性回归)和随机森林中最重要特征的子集,会发生什么? 线性回归确实优于基线,但与复杂模型相比表现不佳。 让我们尝试在线性回归中仅使用10个最重要的特征来查看性能是否得到改善。 我们还可以限制这些功能并重新评估随机森林。

    7.3 本地可解释的与模型无关的解释

    我们将使用LIME来解释模型所做的个别预测。 LIME是一项相对较新的工作,旨在通过使用线性模型近似预测周围的区域来展示机器学习模型的思考方式。

    我们将试图解释模型在两个例子上得到的预测结果,其中一个例子得到的预测结果非常差,另一个例子得到的预测结果非常好。 我们将仅仅使用减少的10个特征来帮助解释。 虽然在10个最重要的特征上训练的模型稍微不准确,但我们通常必须为了可解释性的准确性进行权衡!

    7.4 检查单个决策树

    关于基于树的集合最酷的部分之一是我们可以查看任何单个估计器(estimator)。虽然我们的最终模型由800个决策树组成,并且查看单个决策树并不表示整个模型,但它仍然允许我们看到决策树如何工作的一般概念。 从那里开始,想象出数百棵这些树木可以根据以前树木的错误进行最终预测(这是对梯度增强回归如何工作的显著简化)。
    我们将首先从森林中提取一棵树,然后使用sklearn.tree.export_graphviz保存它。 这将树保存为.dot文件,可以使用Notebook中的命令行指令将其转换为png:

    dot -Tpng images/tree.dot -o images/tree.png

    这是整棵决策树:


    Full Decision Tree in the Model

    这有点压倒性! 尽管这棵树的深度只有6(层数),但很难遵循。 我们可以修改对export_graphviz的调用,并将我们的树限制为更合理的深度为2:


    Decision Tree Limited to a Depth of 2

    树中的每个节点(框)都有四条信息:

    1. Question是关于数据点的一个特征的价值:这决定了我们是从右边还是左边走出节点

    2. mse是节点Error的度量

    3. samples是节点中的示例(数据点)的数量

    4. The value是节点中所有sample的目标估计值

    Individual Node in Decision Tree
    (叶节点只有2.-4。因为它们代表最终估计并且没有任何子节点)。
    决策树通过从称为的顶部节点开始并沿着树向下工作来对数据点进行预测。 在每个节点,询问数据点是或否。 例如,上述节点的问题是:建筑物的Site EUI是否小于或等于68.95? 如果答案为是,则将建筑物将转到右子节点,如果答案为否,则建筑物将转到左子节点。

    在树的每一层重复该过程,直到数据点被放置在树的底部的叶节点中(叶子节点从小树图像中裁剪)。 所有sample的预测值是叶节点中的value。 如果叶节点中存在多个数据点(样本),则它们都获得相同的预测。 随着树的深度增加,训练集上的误差将减少,因为有更多叶节点并且示例可以更精细地划分。 但是,太深的树overfit to the training data,并且无法推广到新的测试数据。

    在Part 2中,我们调整了许多模型超参数,它们控制每棵树的各个方面,例如树的最大深度和叶节点中所需的最小样本数。 这些都会对under fitting和over-fitting之间的平衡产生重大影响,并且可视化单个决策树使我们能够看到这些设置如何工作。

    虽然我们无法检查模型中的每一棵树,但查看一个树可以让我们了解每个learner如何进行预测。 这种基于流程图的方法看起来很像人类做出决策,一次回答一个关于单个值的问题。 基于决策树的集合组合了许多单个决策树的预测,以便创建具有较小方差的更准确的模型。 树的集合往往非常准确,也很容易解释。

    8. Make Conclusions and Document Findings

    任何技术项目经常被忽视的部分是文档和报告。 我们可以在世界上做最好的分析,但如果我们没有清楚地传达结果,那么它们就不会有任何影响!

    当我们记录数据科学项目时,我们会采用所有版本的数据和代码并对其进行打包,以便我们的项目可以被其他数据科学家复制或构建。 重要的是要记住代码被阅读的频率高于编写代码,并且我们希望确保我们的工作对于其他人和我们自己都是可以理解的,如果我们几个月后再回来的话。 这意味着在代码中添加有用的注释并解释您的推理。 我发现Jupyter笔记本是一个很好的文档工具,因为它们允许一个接一个地解释和编码。

    Jupyter笔记本也可以成为将结果传达给他人的良好平台。 使用笔记本扩展,我们可以隐藏最终报告中的代码,因为虽然很难相信,但并不是每个人都希望在文档中看到一堆Python代码!

    就个人而言,我很简洁地总结了我的工作,因为我想详细介绍所有细节。 但是,在您呈现和相应地定制消息时,了解您的受众非常重要。 考虑到这一点,这是我在项目中的30秒内容:

    1. 使用纽约市的能源数据,可以建立一个模型,可以预测建筑物的能源之星得分在9.1分以内。
    2. The Site EUI and Weather Normalized Electricity Intensity 是预测能源之星得分的最相关因素。

    最初,我被这个项目作为初创公司的工作筛选“任务”。 对于最终报告,他们希望看到我的工作和结论,所以我开发了一个Jupyter笔记本。但是,我没有直接转换为Jupyter中的PDF,而是将其转换为Latex .tex文件,然后我编辑了 在texStudio中渲染为最终版本的PDF。 Jupyter的默认PDF输出具有不错的外观,但只需几分钟的编辑就可以显着改善它。 此外,Latex是一个功能强大的文档准备系统,了解基础知识是很好的。

    在一天结束时,我们的工作只有它所能做出的决定一样有价值,并且能够呈现结果是一项至关重要的技能。 此外,通过正确记录工作,我们允许其他人重现我们的结果,给我们反馈,以便我们成为更好的数据科学家,并在我们未来的工作基础上继续发展。

    总结

    在这一系列帖子中,我们已经完成了一个完整的端到端机器学习项目。 我们首先清理数据,进入模型构建,最后研究如何解释机器学习模型。 提醒一下,机器学习项目的一般结构如下:

    1. 数据清理和格式化
    2. 探索性数据分析
    3. 特征工程和选择
    4. 比较性能指标上的几种机器学习模型
    5. 在最佳模型上执行超参数调整
    6. 评估测试集上的最佳模型
    7. 尽可能地解释模型结果
    8. 得出结论并撰写详尽记录的报告

    虽然确切的步骤因项目而异,并且机器学习通常是迭代而非线性过程,但本指南应该在您处理未来的机器学习项目时为您提供良好的服务。 我希望这个系列让你有信心能够实现自己的机器学习解决方案,但请记住,我们都不是自己在行动! 如果您需要任何帮助,有许多令人难以置信的支持性社区,您可以在那里寻求建议。

    A few resources I have found helpful throughout my learning process:

    作者按:这个项目的原始完成者在代码部分用了10个小时,又用了6个小时写这些分享博客。这是一个相对较小的机器学习项目,但是很适合练手,我们在实际中遇到的项目,对于一个熟悉各项机器学习技能(包括理论和实践)的数据科学家,大多需要超过20个小时去完成。

    相关文章

      网友评论

          本文标题:适合练手的完整机器学习项目-Part 3

          本文链接:https://www.haomeiwen.com/subject/lsvsoftx.html