Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一个完整的机器学习项目在Python中的演练(二)

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

作者头像
磐创AI
发布于 2018-07-03 08:10:23
发布于 2018-07-03 08:10:23
1.1K0
举报

编译 | 磐石

出品 | 磐创AI技术团队

【磐创AI导读】:本文主要介绍了本系列的第三项特征工程与特征选择。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。(本系列第一篇:点击查看

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

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

1. 数据清洗与格式处理

2. 探索性数据分析

3. 特征工程和特征选取

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

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

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

7. 解释模型结果

8. 总结分析

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

特征工程和特征选择

特征工程和特征选择虽然是完成机器学习项目中很小的一个环节,但它模型最终的表现至关重要。在特征工程与特征选择阶段做的工作都会准时在模型的表现上得以体现。首先,让我们来了解一下这两项任务是什么:

  • 特征工程:特征工程是一项获取原始数据并提取或创建新特征的过程。也就是说可能需要对变量进行转换。例如通过取自然对数、取平方根或者对分类变量进行独热(one-hot)编码的方式以便它们可以在模型中更好的得以利用。通常来说,特征工程就是通过对原始数据的一些操作构建额外有效特征的过程。(详细介绍可参考:https://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/)
  • 特征选择:特征选择是一项选择数据中与任务最相关的特征的过程。在特征选择的过程中,我们通过删除无效或重复的数据特征以帮助模型更好地学习和总结数据特征并创建更具可解释性的模型。通常来说,特征选择更多的是对特征做减法,只留下那些相对重要的特征。(详细介绍可参考:https://machinelearningmastery.com/an-introduction-to-feature-selection/)

因为机器学习模型只能从我们提供的数据中学习特征,所以确保数据包含我们任务的所有相关信息至关重要。如果我们没有给模型提供正确的数据,那么机器学习模型将不会达到我们所期望的表现。

在本项目中,我们将按照以下步骤完成特征工程

  • 独热(one-hot)编码分类变量(borough和 property use type)
  • 对数值变量做自然对数转换并作为新特征添加到原始数据中

独热(one-hot)编码对于在模型训练中包含分类变量是必要的。例如:机器学习算法无法理解“办公室”这种建筑类型,因此如果建筑物是办公室,则必须对其进行将其记录为1,否则将其记录为0。

添加转换的特征可以使我们的模型学习到数据中的非线性关系。取平方根、取自然对数或各种各样的数值转换是数据科学中特征转换的常见做法,并通过领域知识或在多次实践中发现最有效的方法。这里我们将对所有数值特征取自然对数并添加到原始数据中。

下面的代码实现了数值特征选择并对这些特征进行了取对数操作,选择两个分类变量并对这些特征进行独热(one-hot)编码、然后将两列特征连接在一起。这一系列操作可以通过pandas库很快捷的实现。

完成上述操作之后,我们有110列(features)、总共超过11,000个对象(buildings)。但是,这些特征并非所有都能够对预测能源之星得分(ENERGY STAR Score)有用,所以接下来我们将通过特征选择去除一些变量。

特征选择

在上面做特征工程的过程之后得到的数据中的110列特征,许多都是多余或重复的,因为它们彼此高度相关。

例如,下图是Site EUI与Weather Norm EUI相关系数为0.997的情况。

那些相互之间有很强关联性的特征被称为共线(collinear)https://en.wikipedia.org/wiki/Multicollinearity,而且消除这些“特征对”中的一个变量通常可以使机器学习模型更鲁棒并且具有更强的可解释性。(需要注意的一点是,现在是在讨论特征与其他特征的相关性,而不是与目标的相关性。)

有许多方法可以计算特征之间的共线性(collinearity),其中最常见的是方差膨胀因子(VIF)。在本项目中,我们将使用相关系数来识别和删除共线特征。如果它们之间的相关系数大于0.6,我们将放弃一对特征中的一个。

也许你会认为这个值(0.6)是随便定义的,其实并不是,而是通过多次尝试不同的阈值比较后得到的。使用0.6这个值可以产生了最好的模型。机器学习是一个经验性领域,通常是通过试验发现性能最好参数组合。选择特征后,我们剩下64列特征和1列目标特征(能源之星得分)。

建立基线

我们现在已经完成了数据清洗,探索性数据分析和特征工程,开始建立模型之前还需要做最后一步:建立一个初步的基线(baseline)。这实际上是设置一项可以用来核对我们最终模型的实际表现的预估表现。我们可以通过拿最终模型表现与预估模型表现做比较反过来评测此次项目的整体思路。如果机器学习模型的最终表现没有超越我们的预估表现,那么我们可能不得不得出如下结论:

  • 使用机器学习的方法无法解决此问题。
  • 或者我们可能需要尝试其它不同的方法。

对于回归问题,一个合理的基线是通过预估测试集中所有示例的运行结果为训练集中目标结果的中值。这种方式建立的基线为对比模型表现结果设定了一个相对较低的门槛。

我们将使用的度量标准是平均绝对误差(mae)--计算出预测的平均绝对误差。其实存在很多种回归问题的度量指标,但我喜欢Andrew Ng的建议去选择一个指标然后一直在以后模型评估中使用它。平均绝对误差(mae)是一个不错的选择,它不仅容易计算并且可解释性强。

在计算基线之前,我们需要将我们的数据分成一个训练集和一个测试集:

1. 训练集的作用就是通过给模型提供有标签的数据来训练模型能力,换句话说就是训练集既能“提供问题”又能“提供答案”。旨在让模型学习特征与目标之间的映射。

2. 测试集的作用是用来评估训练好模型。评估过程中不允许模型查看测试集的标签,只能使用特征进行预测。我们可以通过对比测试集的预测值与标签真实值来评估模型的表现。换句话说就是测试集只“提供问题”给模型不“提供答案”。

我们将使用70%的数据进行训练,30%用于测试:

计算基线并得出预估表现值(mae):

通过计算得出预估模型表现为66,在测试集中的误差约为25左右(分值:1-100)。这是一个很容易达到的性能。

结论

在前两篇的分析中,我们走过了一个完整机器学习项目的前三个步骤。在明确定义问题之后,我们:

1. 清洗并格式化了原始数据

2. 执行探索性数据分析以了解数据集

3. 转换出了一系列我们将用于模型的特征

4. 建立了可以判断整个机器学习算法的基线。

接下来将展示如何使用Scikit-Learn评估机器学习模型,选择最佳模型和微调超参数来优化模型。

你也许还想看:

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

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

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


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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-28,如有侵权请联系 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机器学习项目实战(附代码 + 可下载)【一】
一个完整的机器学习项目在Python中的演练(三)
来源 | Towards Data Science 编译 | 磐石 出品 | 磐创AI技术团队 【磐创AI导读】:本文为“一个完整的机器学习项目在python中的演练”系列第三篇。主要介绍了机器学习模型性能指标评估与超参数选取两部分。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲
磐创AI
2018/07/03
1.1K0
一个完整的机器学习项目在Python中的演练(一)
编译 | 磐石 出品 | 磐创AI技术团队 【磐创AI导读】:本文是机器学习实战项目演连系列第一篇,主要介绍了数据清洗与EDA两个部分。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲他们拼起来应用在实际的项目中。如果你也遇见过同样的问题,那么这篇文章应该是你想要的。本系列文章将
磐创AI
2018/07/03
1.5K0
算法工程师-机器学习面试题总结(1)
损失函数是在机器学习和优化算法中使用的一种衡量模型预测结果与真实值之间差异的函数。其目标是最小化模型的预测误差,从而提高模型的性能。
机器学习AI算法工程
2023/09/04
6970
算法工程师-机器学习面试题总结(1)
一个完整的机器学习项目在Python中演练(四)
【磐创AI导读】:本文是一个完整的机器学习项目在python中的演练系列第第四篇。详细介绍了超参数调整与模型在测试集上的评估两个步骤。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲他们拼起来应用在实际的项目中。如果你也遇见过同样的问题,那么这篇文章应该是你想要的。本系列文章将介绍
磐创AI
2018/07/03
7790
独家 | 经验&教训分享:我的第一个机器学习项目
在这片博客中,我将介绍队友(Aron,Ashish,Gabriel)和我如何完成我们的第一个机器学习项目。写这篇博客的目的是为了记录——记录下我作为一名有抱负的数据科学家的旅程。同时,这篇博客也是为了写下逐步完善预测模型背后的思维和推理过程。由于我的目的是建立一个可以快速使用的通用工作流程,所以我将尽可能的简化推理过程。我的最终目标是当某一天再次回顾这个数据集时,可以应用更好的预测模型,看到自己原本可以做出哪些改进,并且能看到自己作为一个数据科学家的成长。
数据派THU
2020/02/12
6190
独家 | 经验&教训分享:我的第一个机器学习项目
《C++解锁机器学习特征工程:构建智能数据基石》
在当今机器学习蓬勃发展的浪潮中,特征工程犹如一座坚实的基石,奠定了模型成功的基础。而 C++以其卓越的性能和强大的底层控制能力,在实现机器学习特征工程方面发挥着独特且关键的作用。
程序员阿伟
2024/12/18
1590
算法金 | A - Z,115 个数据科学 机器学习 江湖黑话(全面)
A/B Testing (A/B 测试) A/B测试是一种在线实验,通过对比测试两个版本的不同效果,来找出哪个更符合我们的需求。
算法金
2024/06/10
1450
算法金 | A - Z,115 个数据科学 机器学习 江湖黑话(全面)
数据科学的面试的一些基本问题总结
来源:Deephub Imba本文约5000字,建议阅读10分钟本文将介绍如何为成功的面试做准备的,以及可以帮助我们面试的一些资源。 在这篇文章中,将介绍如何为成功的面试做准备的,以及可以帮助我们面试的一些资源。 代码开发基础 如果你是数据科学家或软件开发人员,那么应该已经知道一些 Python 和 SQL 的基本知识,这对数据科学家的面试已经足够了,因为大多数的公司基本上是这样的——但是,在你的简历中加入 Spark 是一个很好的加分项。 对于 SQL,你应该知道一些最简单的操作,例如: 从表中选择
数据派THU
2022/06/29
7530
数据科学的面试的一些基本问题总结
机器学习——自动机器学习(AutoML)
随着机器学习的广泛应用,传统的机器学习方法在应用时往往需要大量的领域知识以及繁琐的参数调整,这使得模型构建的过程变得复杂而耗时。而自动机器学习(AutoML)技术的诞生,旨在简化这些过程,让机器学习能够以更高效、更便捷的方式被利用。本文将深入探讨AutoML的工作原理、核心技术、常见工具以及在实际应用中的案例,并通过代码示例展示其具体的实现方法。
hope kc
2024/10/17
7390
一个完整机器学习项目流程总结
现在机器学习应用越来越流行,了解机器学习项目的流程,能帮助我们更好的使用机器学习工具来处理实际问题。
Ai学习的老章
2019/07/30
2K0
极简演示,机器学习建模全流程:从数据到模型部署的全面指南
机器学习已经成为现代技术领域不可或缺的一部分。无论是推荐系统、图像识别还是自然语言处理,机器学习都在发挥着重要作用。但是,如何从原始数据到最终的机器学习模型呢?让我们一起探索机器学习建模的完整流程。
Ai学习的老章
2024/09/02
2860
极简演示,机器学习建模全流程:从数据到模型部署的全面指南
【机器学习数据预处理】特征工程
  上篇文章介绍了机器学习数据预处理的数据准备这一部分的内容,本文介绍数据预处理的特征工程部分。
Francek Chen
2025/01/22
3700
【机器学习数据预处理】特征工程
用GPT和机器学习炒股?附代码
在机器学习领域,监督学习是一种很重要的学习模式。它指的是我们在数据有正确标签的情况下建立模型,并通过这一正确标签让模型进行自我修正,使其预测结果不断地朝着正确的方向迈进。
Ai学习的老章
2023/11/28
6910
用GPT和机器学习炒股?附代码
机器学习知识点归纳 第1篇
哈喽,大家好,今天分享的内容是我长期学习Machine Learning过程中的一些学习笔记和心得,今天拿出来与大家分享。
唐国梁Tommy
2021/07/08
5300
机器学习知识点归纳 第1篇
资源 | 一个Python特征选择工具,助力实现高效机器学习
项目地址:https://github.com/WillKoehrsen/feature-selector
机器之心
2018/07/26
8000
资源 | 一个Python特征选择工具,助力实现高效机器学习
【机器学习】机器学习项目流程
这是一个机器学习的完整流程,附代码非常全,几乎适合任何监督学习的分类问题,本文提供代码和数据下载。
黄博的机器学习圈子
2021/12/13
7570
【机器学习】机器学习项目流程
机器学习| 第三周:数据表示与特征工程
到目前为止,表示分类变量最常用的方法就是使用 one-hot 编码(one-hot-encoding)或 N 取一编码(one-out-of-N encoding), 也叫虚拟变量(dummy variable)。虚拟变量背后的思想是将一个分类变量替换为一个或多个新特征,新特征取值为 0 和 1 。 如下图,是用来预测某个人的收入是大于 50K 还是小于 50K 的部分数据集。其中,只有 age 和 hour-per-week 特征是数值数据,其他则为非数值数据,编码就是要对这些非数值数据进行数值编码。将数据转换为分类变量的 one-hot 编码有两种方法:一种是使用 pandas,一种是使用 scikit-learn 。 pandas 使用起来会简单一点,故本文使用的是 pandas 方法。
机器视觉CV
2019/07/15
1.7K0
机器学习| 第三周:数据表示与特征工程
机器学习实战 | 机器学习特征工程最全解读
教程地址:http://www.showmeai.tech/tutorials/41
ShowMeAI
2022/03/22
2.1K0
机器学习实战 | 机器学习特征工程最全解读
推荐阅读
相关推荐
一个真实数据集的完整机器学习解决方案(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档