首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一个完整的机器学习项目在Python中的演练(一)

一个完整的机器学习项目在Python中的演练(一)

作者头像
磐创AI
发布于 2018-07-03 08:04:47
发布于 2018-07-03 08:04:47
1.5K0
举报

编译 | 磐石

出品 | 磐创AI技术团队

【磐创AI导读】:本文是机器学习实战项目演连系列第一篇,主要介绍了数据清洗与EDA两个部分。欢迎大家点击上方蓝字关注我们的公众号:磐创AI

大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲他们拼起来应用在实际的项目中。如果你也遇见过同样的问题,那么这篇文章应该是你想要的。本系列文章将介绍一个针对真实世界实际数据集的完整机器学习解决方案,让您了解所有部分如何结合在一起。

本系列文章按照一般机器学习工作流程逐步进行:

1. 数据清洗与格式处理

2. 探索性数据分析

3. 特征工程和特征选取

4. 机器学习模型性能指标评估

5. 微调最佳模型(超参数)

6. 在测试集上评估最佳模型

7. 解释模型结果

8. 总结分析

通过完成所有流程,我们将看到每个步骤之间是怎么联系起来的,以及如何在Python中专门实现每个部分。该项目可在GitHub上可以找到,附实现过程。第一篇文章将涵盖步骤1-2,其余的内容将在后面的文章中介绍。

问题定义

编码之前的第一步是了解我们试图解决的问题和可用的数据。在这个项目中,我们将使用纽约市的公共可用建筑能源数据。

(http://www.nyc.gov/html/gbee/html/plan/ll84_scores.shtml)

目标:使用能源数据建立一个模型,可以预测建筑物的能源之星评分(ENERGY STAR Score),并剖析结果以找出影响评分的因素。

我们可以拿到的数据中包括能源之星得分这一项,这使得这是一个监督回归机器学习任务:

· 监督:由于我们可以访问特征和目标,我们的目标是培养可以学习两者之间映射的模型

· 回归:能源之星得分是一个连续变量

我们想要开发的是一个准确 (它可以预测能量之星得分并接近真实值)且可解释的模型(我们可以理解模型这种预测)。那么,当我们明确这两点之后,在我们深入挖掘数据并构建模型的过程中我们就有个更明确的标准来指引我们的决策。

数据清洗

与大多数数据科学课程所使用的数据不同,真实数据很混乱,并非每个数据集都是没有缺失值或异常值的。这意味着在我们开始分析之前,我们需要清洗数据并将其转换为可读取的格式。数据清洗是大多数数据科学问题中必不可少的一部分。

首先,使用pandas(Dataframe)读取数据并查看:

实际数据

这是一个含60列数据的完整数据的子集。我们可以看出几个问题:首先,虽然我们知道我们想要预测的是能源之星得分(ENERGY STAR Score),但我们不清楚每一列的含义。尽管这也许不是个很必要问题,我们通常可以在不了解其他变量含义的情况下创建一个可能准确的模型,但我们希望更关注于模型的可解释性,并且至少了解到某些列可能很重要。

当最初得到这个任务时,我先是关注到数据文件的名称:

并开始搜索“Local_Law_84”相关资料,了解到这是一项纽约市要求所有具有一定规模的建筑物报告其能源使用的法律。然后还查询到了数据中对应每一列的含义。在这个过程中,耐心是很有必要的。

我们并不需要去研究所有的列的准确含义,但能源之星得分(ENERGY STAR Score)是我们必须精确了解·的。它被描述为:

来自每个报告年度所提交的能源使用情况报告,1~100的百分制排名(分数越高越好)。能源之星得分(ENERGY STAR Score)是对建筑物能源效率的相对度量。

到这里我们已经解决了第一个问题,接下来再分析下第二个问题--那些被填充”Not Available“的缺失值。我们可以使用以下dataframe.info()方法来查看列的数据类型:

可以看到,其中有一些明确包含数字(例如ft²)的列被存储为objects。我们不能对字符串进行数值分析,所以这些数据需要转换为数值数据类型。

这里使用下面一小段Python代码,将所有“Not Available”条目替换为”不是数字”(np.nan),然后将相关列转换为float数据类型:

一旦相应列都转换成了数字,我们就可以开始进行数据分析。

缺失数据和异常值

除了异常的数据类型外,处理真实数据时的另一个常见问题是数据缺失。这些数据缺失往往是由很多因素造成,在我们训练机器学习模型之前必须填写或删除。首先,让我们了解每列中有多少缺失值。(代码参见github)

尽管删除信息需要格外小心,但对于那些缺失值的比例很高的列,它们对于模型的训练很有可能是没有意义的。删除这些列的具体阈值取决于具体问题,对于本项目来说,我们选择删除缺失值超过50%的列。

然后,我们还需要对异常值做处理。那些异常值可能是由于数据输入中的拼写错误或者错误统计等等原因造成的,或者一些不是上述两个原因但是对模型训练没有好处的极端值。对于这个项目,我们将根据极端异常值(extreme outliers)的定义(https://www.itl.nist.gov/div898/handbook/prc/section1/prc16.htm)来处理异常值:

· 低于第一四分位数(Q1) - 3 *四分位差

· 高于第三四分位数(Q3) + 3 *四分位差

(有关删除列值和异常值的代码,请参阅github)。在数据清洗和异处理异常值之后,我们剩下11,000多个buildings和49个features。

探索性数据分析(EDA)

现在,我们已经完成了数据清洗这个略微乏味的步骤。接下来就可以对我们的数据进行探索性分析了。探索性数据分析(EDA)是分析数据集以总结其主要特征的方法,通常使用可视化的方法。

简而言之,EDA的目标是了解我们的数据可以告诉我们什么,以帮助我们合理选择和使用数据特征。

单变量图(EDA中使用的典型图形技术之一)

我们的目标是预测能源之星得分ENERGY STAR Score(在我们的数据集中被重命名为score),所以我们可以从检查这个单变量(ENERGY STAR Score)的分布开始。直方图是一种可视化单个变量分布的简单而有效的方法,使用matplotlib很容易就可以实现。

从上图可以看出能源之星得分(ENERGY STAR Score)分布是不均匀的,最高分100分和最低分1分有占很大一部分。然而,能源之星得分是一个百分位数,我们希望看到一个统一的分布,每个得分分配给相同数量的建筑物。

如果我们回到能源之星得分的定义,我们会看到它是基于“自我报告的能量使用”,这可能就解释了为什么会有这么多非常高的分数。要求建筑物所有者报告自己的能源使用情况就像要求学生在测试中报告自己的分数一样,高分往往会居多。因此,这可能不是衡量建筑物能效的最客观标准。

如果我们有无限空闲时间,我们可也许能想要调查为什么这么多建筑物有非常高或非常低的分数,甚至可以通过选择这些建筑物并分析它们的共同点。但是,我们的目标只是预测分数,而不是设计更好的建筑物评分方法。所以,我们可以在我们的报告中记下分数具有可疑分布,但我们主要关注的还是分数预测

寻找关系

剖析功能和目标之间的关系是EDA的主要步骤之一。与目标相关的变量对模型很有用。检查目标上的分类变量(仅采用有限的一组值)的效果的一种方法是通过使用该seaborn库的密度图。

密度图可视化了单个变量的分布,它也可以被看作是一个平滑的直方图。我们可以按类别对密度图进行着色,以查看变量对分布影响。下面的代码创建了一个可视化不同建筑物类型(仅限于具有超过100个数据点的建筑物类型)的能源之星得分密度图:

我们可以看到建筑类型对能源之星评分有重大影响。办公楼往往有较高的分数,而酒店的分数较低。这告诉我们,我们应该在建模中包含建筑类型这一类,因为它确实对目标有影响。作为一类变量,我们将不得不对建筑物类型进行独热编码。

一个类似的绘制可以用来可视化自治市镇的能源之星得分如下:

自治市镇对建筑类型的评分似乎没有太大的影响。尽管如此,我们也希望将其纳入我们的模型中,因为各区之间存在细微的差异。

我们可以使用皮尔逊(Pearson)相关系数量化变量之间的关系。皮尔逊(Pearson)相关系数是衡量两个变量之间的线性关系的强度和方向的一种方法。+1分是表示完美的线性正相关关系,-1分是表示完美的负线性关系。相关系数的几个值如下所示:

虽然相关系数无法捕捉非线性关系,但它是开始分析变量之间如何取得相关性的好方法。在Pandas中,我们可以轻松计算出数据列之间的相关性:

与目标的最正相关(上)和最负相关(下):

从上图可以看出成最负相关的几项类别变量几乎都与能源使用强度(EUI)有关。能源使用强度(EUI)是表示建筑物的能源使用量是其规模或其他特性的函数(越低越好)。直观地说,这些相关性是有意义的:随着EUI的增加,能源之星评分趋于下降。

双变量图

我们使用散点图来表现两个连续变量之间的关系,这样可以在点的颜色中包含分类变量等附加信息。例如,下面的图表就体现了建筑物类型的能源之星评分对比Site EUI:

通过这个图,我们可以看出-0.7的相关系数变化。随着Site EUI减少,能源之星得分增加,这种关系在建筑类型中保持稳定。

我们最后讨论一下成对图(Pairs Plot)。这是一种很好的探索性分析工具,它可以让我们看到多个变量对之间的关系以及单个变量的分布。在这里,我们使用seaborn可视化库和PairGrid函数来创建Pais Plot--上三角部分使用散点图,对角线使用直方图以及下三角形使用二维核密度图和相关系数。

我们通过查找一行与列相交的位置,查看变量之间的交互关系。除了看起来很酷之外,这些图可以帮助我们决定在建模中包含哪些变量。

本次主要介绍了流程中的前两部分,敬请期待后边的剖析。(编译自:https://towardsdatascience.com/a-complete-machine-learning-walk-through-in-python-part-one-c62152f39420)

你也许还想看:

● 一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)

● TensorFlow + Keras 实战 YOLO v3 目标检测图文并茂教程(文末有惊喜)

● 入门 | Tensorflow实战讲解神经网络搭建详细过程


Tips:欢迎大家点击最下方二维码关注我们的公众号,点击干货资源专栏或发送关键字“资源”获取更多资源推荐。关注我们的历史文章,一起畅游在深度学习的世界中。我们期待你的留言和投稿,共建交流平台。来稿请寄:voice1235@163.com

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一个真实数据集的完整机器学习解决方案(上)
我们到底应该怎么学会、灵活使用机器学习的方法?技术宅做过小小的调研,许多同学会选择一本机器学习的书籍,或是一门机器学习的课程来系统性地学习。而在学完书本、课程后,并不清楚如何将这些理论、技术应用到实际的项目流程中。
guichen1013
2020/12/22
1.5K0
一个真实数据集的完整机器学习解决方案(上)
推荐 | Python机器学习项目实战(附代码 + 可下载)【一】
Putting the machine learning pieces together
昱良
2018/08/20
7.1K0
推荐 | Python机器学习项目实战(附代码 + 可下载)【一】
【机器学习】机器学习项目流程
这是一个机器学习的完整流程,附代码非常全,几乎适合任何监督学习的分类问题,本文提供代码和数据下载。
黄博的机器学习圈子
2021/12/13
7570
【机器学习】机器学习项目流程
一个完整的机器学习项目在Python中的演练(三)
来源 | Towards Data Science 编译 | 磐石 出品 | 磐创AI技术团队 【磐创AI导读】:本文为“一个完整的机器学习项目在python中的演练”系列第三篇。主要介绍了机器学习模型性能指标评估与超参数选取两部分。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲
磐创AI
2018/07/03
1.1K0
一个完整的机器学习项目在Python中的演练(二)
编译 | 磐石 出品 | 磐创AI技术团队 【磐创AI导读】:本文主要介绍了本系列的第三项特征工程与特征选择。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。(本系列第一篇:点击查看) 大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲他们拼起来应用在实际的项目中。如果你也遇见过同样的问题,那么这篇文章应该是你想要的。本系列文章将介
磐创AI
2018/07/03
1.1K0
[机器学习|理论&实践]​ 机器学习在财务欺诈检测中的应用
财务欺诈是企业和金融机构面临的重要挑战之一。为了有效应对这一问题,越来越多的机构开始采用机器学习技术来进行财务欺诈检测。本文将深入探讨财务欺诈检测项目的部署过程,通过结合实例来详细阐述。
二一年冬末
2024/02/13
8510
一文全览机器学习建模流程(Python代码)
随着人工智能时代的到来,机器学习已成为解决问题的关键工具,如识别交易是否欺诈、预测降雨量、新闻分类、产品营销推荐。我们接下来会详细介绍机器学习如何应用到实际问题,并概括机器学习应用的一般流程。
算法进阶
2022/06/01
1.1K0
一文全览机器学习建模流程(Python代码)
完整的端到端的机器学习流程(附代码和数据)|比赛、工程都可以用!
这是2018年夏天,一位美国数据科学家在申请工作时的“作业”,完整的英文版作业在:
黄博的机器学习圈子
2020/04/17
1.1K0
数据采集与数据分析代码实操
数据采集是指识别数据源、收集原始数据并将其传输或存储到可以处理的地方的过程。它是整个数据价值链的起点。
华科云商小徐
2025/07/02
1300
大数据ETL实践探索(8)---- 数据清洗的目的,方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接和本声明。
流川疯
2019/10/22
4.9K0
大数据ETL实践探索(8)---- 数据清洗的目的,方法
基于Python的信用评分模型开发-附数据和代码
文章链接 | https://zhuanlan.zhihu.com/p/35284849
Python数据科学
2019/08/19
5.3K0
基于Python的信用评分模型开发-附数据和代码
算法金 | 选择最佳机器学习模型的 10 步指南
机器学习和数据科学领域的工作充满挑战和乐趣,在我踏上人工智能探索之路的初期,我对能够参与项目感到无比兴奋。
算法金
2024/06/15
2110
算法金 | 选择最佳机器学习模型的 10 步指南
数据清洗最基础的10个问题,基本涵盖目前常见的数分场景!
很多时候,数据预处理和数据清洗、特征工程等混为一谈,以至于大家分不清到底哪一步用谁。
小小詹同学
2021/04/19
1.9K0
数据竞赛专题 | 数据探索-从数据中发现隐藏价值
为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力。DataFountain 和 Datawhale 联合邀请了数据挖掘,CV,NLP领域多位竞赛大咖,将从赛题理解、数据探索、数据预处理、特征工程、模型建立与参数调优、模型融合六个方面完整解析数据竞赛知识体系,帮助竞赛选手从0到1入门和进阶竞赛。
Datawhale
2019/08/08
1.5K0
数据竞赛专题 | 数据探索-从数据中发现隐藏价值
一个完整的机器学习项目在Python中演练(四)
【磐创AI导读】:本文是一个完整的机器学习项目在python中的演练系列第第四篇。详细介绍了超参数调整与模型在测试集上的评估两个步骤。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲他们拼起来应用在实际的项目中。如果你也遇见过同样的问题,那么这篇文章应该是你想要的。本系列文章将介绍
磐创AI
2018/07/03
7780
机器学习与人工智能在未来建筑行业的应用:项目案例与分析
随着人工智能(AI)和机器学习(ML)的发展,建筑行业正在经历一场深刻的变革。这些技术正在从设计、施工到运营的各个环节为建筑行业提供新的解决方案。本文将详细探讨机器学习和人工智能在未来建筑行业的应用,包括具体的项目内容和案例分析,以展示这些技术如何提升效率、降低成本、提高安全性,并创造更具可持续性的建筑环境。
知孤云出岫
2024/08/31
7690
机器学习与人工智能在未来建筑行业的应用:项目案例与分析
在Python中进行探索式数据分析(EDA)
探索性数据分析(Exploratory Data Analysis ,EDA)是对数据进行分析并得出规律的一种数据分析方法。它是一个数据试图讲述的故事。EDA是一种利用各种工具和图形技术(如柱状图、直方图等)分析数据的方法。
deephub
2020/05/09
3.4K0
在Python中进行探索式数据分析(EDA)
机器学习的第一个难点,是数据探索性分析
当我们在进行机器学习领域的学习和研究时,遇到的第一个难点就是数据探索性分析(Exploratory Data Analysis)。虽然从各种文献中不难了解到数据探索性分析的重要性和一般的步骤流程,但是在面对实际问题时,往往会有不知道从哪儿下手以及不知道怎么根据分析结果来优化算法的困境。
AI科技大本营
2021/03/12
6860
机器学习的第一个难点,是数据探索性分析
机器学习实战 | 机器学习特征工程最全解读
教程地址:http://www.showmeai.tech/tutorials/41
ShowMeAI
2022/03/22
2.1K0
机器学习实战 | 机器学习特征工程最全解读
【应用】信用评分:第3部分 - 数据准备和探索性数据分析
因此,**数据准备是任何数据挖掘项目的关键方面,包括信用评分卡的开发。 **这是CRISP-DM周期中最具挑战性和耗时的阶段。 项目总时间中至少70%,有时多于90%专门用于此项活动。 它涉及数据收集,结合多个数据源,聚合,转换,数据清理,“切片和切块”,并查看数据的广度和深度,以获得清晰的理解并将数据量转换为数据质量,从而使我们 可以自信地准备下一阶段 - 模型建设。
陆勤_数据人网
2018/07/30
5460
【应用】信用评分:第3部分 - 数据准备和探索性数据分析
推荐阅读
相关推荐
一个真实数据集的完整机器学习解决方案(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档