热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python全栈开发必备技能:全面解析与快速上手指南,五天速成全栈工程师!

本章节从商业数据分析与挖掘的角度,深入探讨了特征工程的关键技术和应用方法,包括数据预处理、特征构建、特征提取及特征选择。详细阐述了如何系统地构建用于分析的结构化数据,为全栈开发提供了坚实的基础。

本章从商业数据分析和挖掘的角度详细地介绍了特征工程及其使用的响应方法:数据预处理、特征构造、特征抽取以及特征选择。系统性地说明了用于构建分析用的结构化数据的过程。

特征工程分为数据预处理(Data Preprocessing)、特征构造(Feature Construction)、特征抽取(Feature Extraction)和特征选择(Feature Selection)等几个步骤,每个步骤间没有明显的顺序之分,往往需要根据需求反复执行,甚至也没有严格区分的概念边界,例如特征构造可能会与数据预处理使用同样的数据变换技术等等。

其中"display.max_columns"设置了在notebook中显示的最大列数,当显示的数据超过10列时中间的部分数据会使用省略号表示,这仅仅是为了展示方便而已,如果该值被设置为"none",则会显示所有列,超出页面宽度时会出现相应滚动条。

(1)修正

补充正确信息:例如重新导入原始的正确数据。

对照其他信息源:例如使用CRM系统中正确的用户年龄替换手工填报的错误年龄。

视为空值:将数据清空,等待下一步处理。

(2)删除

删除记录。

删除特征。

如果通过删除来处理错误值,那么要保证该处理不会对后续工作造成重要影响,删除的记录过多会影响数据的分布,删除的特征也不能是那些重要的字段。

以下是一个通过业务规则发现错误值的例子。

新的数据集“data”将不包含流量消费大于5000MB的用户。

对于分类变量,可以采用一定的技术手段去识别错误值,因为错误值通常极少出现,因此可以通过对比分类变量各分类水平之间的数量差异去识别。比如对用户状态“state”进行汇总,代码如下。

通过汇总,发现用户状态为“2”和“4”的记录非常少,则这两类数据很有可能是错误的。为了更直观地展现数量差异,可以使用饼图来描述数据:

异常值有时意味着错误,有时不是。无论是否代表错误,异常值都应当被处理。通常可以根据对业务的理解来设置异常值的边界,也可以使用一定的技术手段辅助识别异常值。常用的识别方法包括以下两种。

(1)平均值法:对于正态分布来说,三倍标准差之外的样本仅占所有样本的1%,因此,设置平均值±3×标准差之外的数据为离群值,极端值被定义为平均值±5×标准差之外数据。

(2)四分位数法:设置1.5倍四分位距以外的数据为异常值,即IQR = Q3–Q1,IQR为四分位距,Q3和Q1分别为第三和第一四分位点,定义正常数据在Q1–1.5 ´ IQR ~ Q3 + 1.5 ´ IQR 之间。

例如:绘制月消费额箱线图。

使用盖帽法进行异常值处理的示例如下。

这类数据也可以通过对数转换使其更接近于正态分布,同时消除异常值,由于对数函数的定义域为(0,+∞),而消费额这样的数据往往包括0,因此可以对数据进行加1操作,再进行对数转换,这样的转换可以保证原来为0的数据转换后依然为0,新数据都是非负的,示例代码如下。

可以看到使用scikit-learn中的函数转换可以一次性对多个字段进行处理。

为了更加准确的判断缺失值的数量,可以使用isnull函数,如果数值为空返回True,否则为False,再进行求和(True被作为1,False被作为0),就可以统计每个字段缺失值的数量。同样可以使用notnull函数进行类似分析,其返回结果与isnull相反。示例如下:

缺失值的处理可以非常灵活,比如对“营销次数”的填补可以使用众数填补,也可以填为0(如果缺失是因为在营销数据库中没有该记录造成的则填0)。此外,营销活动通常是对满足一定条件的用户开展的,因此也可以通过建模“预测”该用户“被营销”的次数。

以下是对之前的data数据集按照缺失值数量进行记录删除的一个例子。

这种方法可以指定用于表示缺失的值,strategy参数则指定了填补策略,比如示例中使用的众数,其它策略包括均值、中位数等,具体可参考帮助或文档。

对于示例数据集当中的"IMEI"字段是手机串码(原本为15位),一部移动设备对应一个,是全球唯一的,这样的字段与ID字段一样无法进入模型。通过观察,发现有大量的记录IMEI为空值(现已填补为0),因此可以将有IMEI的设置为1,没有的设置为0。在scikit-learn的preprocessing中,使用Binarizer可以将字段二值化,示例如下:

需要注意的是传入的阈值列表是包含了上下界的,切割的区间为左开右闭,即切割后的两个区间为(-∞,0]和(0,+∞)。如果要切割成多个区域,只需把所有阈值以列表形式传入"bins"参数即可。

为了演示离散化,我们将示例数据集中的“入网时间”转化为“在网时长”:

至此,我们“在网时长”属于连续型特征,我们可以对其进行离散化。

1. 等宽离散

使用Pandas进行等宽离散的例子如下:

该函数使用分位数确定某一列特征的划分区间,再使用pandas.cut将数据按照划分区间进行离散,这里的pandas.cut函数因为指定了区间,将不再按照默认的等宽方式离散了。

使用自定义的函数可以方便地对数据进行等分离散:

从图中,离散化后的离网率规律一目了然。

3. 人工离散

仅需要人工指定区间划分的阈值就可以很容易地使用pandas.cut进行人工离散化,如下例:

图18-1

一般有m个分类水平的变量经过哑编码之后,会生成m个哑变量,各个哑变量之间两两互斥,应用中一般仅保留其中m-1个进入模型,留下1个作为对照组,对照组可以通过其他m-1个哑变量完全还原出来。在使用哑变量建模时,一般需要保证由这m-1个哑变量都能进入模型,或者都不进入模型。

在pandas中可以使用get_dummies函数来对分类变量进行哑编码,新生成的哑变量与原变量的分类水平数相等,对照组可自行选择,get_dummies使用方法如下所示:

另外,scikit-learn的preprocessing当中,可以使用OneHotEncoder对数据进行哑编码,同样会生成与原变量水平数相等的哑变量,代码如下:

同样的样本点,如果流量采用MB为单位,则AB为一个簇,CD为一个簇;如果使用GB为单位,则AC一个簇,BD一个簇。可见因为单位不同对模型的结果会产生颠覆性的影响。

为了消除字段间因为单位差异而导致模型不稳定的情况,需要将变量的单位消除,使得它们都是在一个“标准”的尺度上进行比较分析。因此需要采用标准化的技术,常用的方法包括极值标准化与学生标准化:

极差标准化

学生标准化

使用preprocessing.StandardScaler可以对多个字段一次性进行学生标准化,而且fit之后的转换器std_scaler可以重复使用。比如,使用训练集数据fit的转换器可以对测试集进行相同的转换(使用训练集的均值和标准差进行学生标准化)。

将标准化后的数据添加到数据集当中:

极值标准化的方法也类似:

scikit-learn当中可以使用preprocessing.Normalizer对每一行进行规范化,仅仅是为了演示代码,我们将通信账单数据集的后三列提取出来,使用规范化方法进行转换如下:

可以发现转换后每个行向量都是单位长度,只是具有不同的角度。需要再次强调的是,本例仅为演示代码,因为对行执行规范化后,每列的分布形态会发生改变,因此不适用于本数据集。

欢迎大家关注我的博客:https://home.cnblogs.com/u/sm123456

欢迎大家加入千人交流学习,资源共享群:125240963

希望与广大网友互动??

点此进行留言吧!



推荐阅读
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解
    PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • 利用ViewComponents在Asp.Net Core中构建高效分页组件
    通过运用 ViewComponents 技术,在 Asp.Net Core 中实现了高效的分页组件开发。本文详细介绍了如何通过创建 `PaginationViewComponent` 类并利用 `HelloWorld.DataContext` 上下文,实现对分页参数的定义与管理,从而提升 Web 应用程序的性能和用户体验。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 在软件开发领域,“池”技术被广泛应用,如数据库连接池、线程池等。本文重点探讨Java中的线程池ThreadPoolExecutor,通过详细解析其内部机制,帮助开发者理解如何高效利用线程池管理任务执行。线程池不仅能够显著减少系统资源的消耗,提高响应速度,还能通过合理的配置,如饱和策略,确保在高负载情况下系统的稳定性和可靠性。文章还将结合实际案例,展示线程池在不同应用场景下的具体实现与优化技巧。 ... [详细]
  • 在幼儿园中,有 \( n \) 个小朋友需要通过投票来决定是否午睡。尽管这个问题对每个孩子来说并不是特别重要,但他们仍然希望通过谦让的方式达成一致。每个人都有自己的偏好,但为了集体和谐,他们决定采用一种最小割的方法来解决这一问题。这种方法不仅能够确保每个人的意愿得到尽可能多的尊重,还能找到一个最优的解决方案,使整体满意度最大化。 ... [详细]
  • Go语言中Goroutine与通道机制及其异常处理深入解析
    在Go语言中,Goroutine可视为一种轻量级的并发执行单元,其资源消耗远低于传统线程,初始栈大小仅为2KB,而普通线程则通常需要几MB。此外,Goroutine的调度由Go运行时自动管理,能够高效地支持成千上万个并发任务。本文深入探讨了Goroutine的工作原理及其与通道(channel)的配合使用,特别是在异常处理方面的最佳实践,为开发者提供了一套完整的解决方案,以确保程序的稳定性和可靠性。 ... [详细]
  • 题目旨在解决树上的路径最优化问题,具体为在给定的树中寻找一条长度介于L到R之间的路径,使该路径上的边权平均值最大化。通过点分治策略,可以有效地处理此类问题。若无长度限制,可采用01分数规划模型,将所有边权减去一个常数m,从而简化计算过程。此外,利用单调队列优化动态规划过程,进一步提高算法效率。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • 在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转
    本文探讨了在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转的技术细节。通过详细分析Swscale的工作原理和实际应用,展示了如何在Android环境中高效地进行图像格式转换。此外,还介绍了FFmpeg的全平台编译过程,包括x264和fdk-aac的集成,并在Ubuntu系统中配置Nginx和Nginx-RTMP-Module以支持直播推流服务。这些技术的结合为音视频处理提供了强大的支持。 ... [详细]
author-avatar
gl6474177
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有