社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习特征工程,全面指南!(上)

数据派THU • 4 天前 • 13 次点击  

本文约3800字,建议阅读5分钟
本指南是初学者的简明参考,提供了最简单但广泛使用的特征工程和选择技术。


特征机器学习特征工程和选择是将数据转化为最佳表示的艺术,以大大提升机器学习的效果。本指南是初学者的简明参考,提供了最简单但广泛使用的特征工程和选择技术。

1  基本概念

1.1  什么是机器学习

机器学习是让计算机在没有明确编程的情况下进行操作的学科——阿瑟·塞缪尔
机器学习是一种数据科学技术,它帮助计算机从现有数据中学习,以预测未来的行为、结果和趋势。
机器学习领域试图回答这样一个问题:“我们如何构建能够随着经验自动改进的计算机系统,以及管理所有学习过程的基本规律是什么?”-卡内基梅隆大学

从狭义上讲,在数据挖掘的背景下,机器学习(ML)是让计算机从历史数据中学习,识别数据中的模式/关系,然后进行预测的过程

1.2  方法

典型的 ML 工作流程/管道如下所示:

将组成机器学习工作流的任务划分为多个阶段的方法有很多。但一般来说,基本步骤
与上图所示类似。

1.3  典型任务





1.4  术语

  • 特征:也称为属性/自变量/预测因子/输入变量。它是指被观察现象的个体可测量属性/特征[维基百科]。例如,一个人的年龄等。
  • 目标:也称为因变量/响应变量/输出变量。它是监督学习中被预测的变量。
  • 算法:用于实现特定机器学习技术的具体过程。线性回归等。
  • 模型:应用于数据集的算法,包括其设置(其参数)。Y=4.5x+0.8等。我们希望模型能够最好地捕捉特征与目标之间的关系。
  • 监督学习:用标记数据训练模型,以生成对新数据响应的合理预测。
  • 无监督学习:用未标记的数据训练模型,以发现数据中的内在结构/模式。
  • 强化学习:该模型是通过最大化奖励函数从一系列动作中学习而来的,可以通过惩罚不良行为和/或奖励良好行为来最大化奖励函数。自动驾驶等。

2  数据探索

2.1  变量

定义:所观察现象的任何可测量的属性/特征。它们被称为“变量”,因为它们所取的值在一个群体中可能会变化(而且通常会变化)。变量类型如下表:


2.2  变量识别

定义:识别每个变量的数据类型。

注意:在现实中,我们可能由于各种原因而具有混合类型的变量。例如,在信用评分中,“错过付款状态”是一个常见的变量,其值可以为1、2、3,表示客户在其账户中错过了1-3次付款。如果客户在该账户上违约,它还可以取值D。我们可能必须在数据清洗的某些步骤后转换数据类型。

2.3  单变量分析

对单个变量的描述性统计


以下是一些可以提供变量基本统计信息的方法:

  • pandas.Dataframe.describe()
  • pandas.Dataframe.dtypes
  • 条形图(Barplot)
  • 计数图(Countplot)
  • 箱形图(Boxplot)
  • 分布图(Distplot)

2.4  双变量分析

两个或多个变量之间的描述性统计。

  • 散点图是一种使用笛卡尔坐标显示一组数据中通常两个变量的值的图或数学图。如果点的图案从左下到右上倾斜,则表示所研究变量之间存在正相关。如果点的图案从左上到右下倾斜,则表示负相关。
  • 相关图可用于快速发现见解。它用于同时调查多个变量之间的依赖关系,并突出显示数据表中相关性最大的变量。
  • 热图(或heatmap)是数据的图形表示,其中矩阵中包含的各个值表示为颜色。

3  特征清理

3.1  缺失值

定义:变量中的某个观测值没有存储任何值。

3.1.1 为什么缺失数据很重要

  • 当存在缺失值时,某些算法无法工作
  • 即使对于处理缺失数据的算法,如果不进行处理,模型也可能导致不准确的结论

3.1.2  缺失机制

了解数据集中引入缺失字段的机制非常重要。根据机制的不同,我们可以选择以不同的方式处理缺失值。这些机制最早是由Rubin提出的。

随机完全缺失

如果所有观测值的缺失概率相同,则变量完全随机缺失(MCAR)。当数据MCAR时,数据缺失与数据集内任何其他观测值或缺失值之间绝对没有关系。换句话说,这些缺失数据点是数据的随机子集。没有什么系统性的因素使得某些数据比其他数据更容易缺失。

如果随机缺失观察值,那么忽略这些情况不会影响所做的推断。

随机缺失

当缺失值的倾向与观察到的数据之间存在系统关系时,就会发生随机缺失(MAR)。换句话说,观测值缺失的概率仅取决于可用信息(数据集中的其他变量),而不取决于变量本身。

例如,如果男性比女性更有可能透露自己的体重,那么体重就是MAR(可变性别)。对于那些决定不透露体重的男性和女性,体重信息将随机缺失,但由于男性更容易透露体重,女性的缺失值将比男性更多。

在上述情况下,如果我们决定继续使用缺失值的变量,我们可能会从包含性别中受益,以控制缺失观测值的权重偏差。

非随机缺失——取决于未观察到的预测因素

缺失取决于尚未记录的信息,而这些信息也预测了缺失值。例如,如果某种治疗引起不适,患者更有可能退出研究(而“不适”未被测量)。

在这种情况下,如果我们删除那些缺失的案例,数据样本就会产生偏差

缺失并非随机——取决于缺失值本身

缺失取决于(潜在缺失的)变量本身。例如,收入较高的人不太可能透露这些信息。

3.1.3  如何假设缺失机制

  • 通过业务理解。在许多情况下,我们可以通过探索变量背后的业务逻辑来了解其作用机制。
  • 通过统计检验。将数据集分为有缺失值和无缺失值两组,然后进行t检验,以查看是否存在显著差异。如果存在差异,我们可以认为缺失值不是随机完成的。

但是我们应该牢记,我们很难百分之百确定数据是MCAR、MAR还是MNAR,因为未观察到的预测变量(潜变量)是未被观察到的。

3.1.4  如何处理缺失数据


在实际场景中,当我们很难确定缺失值的机制,或者没有足够的时间对每个缺失变量进行深入研究时,一种流行的方法是采用以下策略:


  • 均值/中位数/众数插补(取决于分布情况)
  • 分布末端插补
  • 添加一个变量来标记缺失值

同时,这样我们既能捕捉到缺失值,又能获得完整的数据集。

注意:一些算法(如XGboost)将缺失数据处理纳入了其模型构建过程,因此无需执行此步骤。但是,确保您了解算法如何处理它们并向业务团队解释这一点非常重要。

3.2  异常值

定义:异常值是指与其他观测值偏差很大,以至于引起怀疑它是由不同机制生成的观测值。

注意:根据具体情况,异常值要么值得特别关注,要么应该完全忽略。例如,信用卡上的异常交易通常是欺诈活动的迹象,而一个人的身高为1600cm很可能是由于测量误差造成的,应该被过滤掉或用其他东西代替。

3.2.1  为什么异常值很重要

异常值的存在可能:

  • 使算法无法正常工作
  • 向数据集引入噪声
  • 使样本代表性降低

一些算法对异常值非常敏感,例如,Adaboost可能会将异常值视为“硬”情况,并对异常值施加巨大的权重,从而产生泛化能力较差的模型。任何依赖于均值/方差的算法都对异常值敏感,因为这些统计数据受到极端值的影响很大。

另一方面,一些算法对异常值更鲁棒。例如,决策树在创建树的分支时往往会忽略异常值的存在。通常,树通过询问变量x是否大于等于值t来进行分割,因此异常值将落在分支的每一侧,但无论其大小如何,它都将被视为与其他值一样对待。

3.2.2  异常值检测

事实上,异常分析和异常检测是一个巨大的研究领域。Charu的书《异常分析》提供了对这个主题的深刻见解。PyOD是一个全面的Python工具包,其中包含该领域的许多高级方法。

这里列出的所有方法都是针对单变量异常值检测的。多变量异常值检测超出了本指南的范围。

然而,除了这些方法,更重要的是要记住,业务背景应该支配你如何定义和应对这些
异常值。你的发现的意义应该由潜在的背景决定,而不是数字本身。

3.2.3  如何处理异常值


处理数据中的异常值有很多策略,并且根据上下文和数据集的不同,任何策略都可能
是正确或错误的方法。在做出决定之前,了解异常值的性质很重要。

3.3  稀有值

定义:一些值很少出现的分类变量。

注意:在某些情况下,罕见值(如异常值)可能包含数据集的有价值信息,因此需要特别注意。例如,交易中的罕见值可能表示欺诈。

3.3.1  为什么稀有值很重要

  • 分类变量中的罕见值往往会导致过拟合,特别是在基于树的方法中。
  • 大量不常用的标签增加了噪声,信息很少,因此导致过拟合。
  • 稀有标签可能出现在训练集中,但不会出现在测试集中,因此导致对训练集的过度拟合。
  • 测试集中可能会出现罕见的标签,而训练集中则不会出现。因此,模型将不知道如何对其进行评估。

3.3.2  如何处理稀有值


根据情况,我们可能会使用不同的策略:

  • 当变量中有一个主要类别(超过 90%)时:观察该变量与目标之间的关系,然后要么丢弃该变量,要么保持原样。在这种情况下,变量通常对预测没有用,因为它几乎是恒定的(我们稍后将在特征选择部分看到)。
  • 当类别数量很少时:保持原样。因为只有少数类别不太可能带来如此多的噪音。
  • 当高基数时:尝试上述两种方法。但这并不能保证比原始变量更好的结果。

3.4  高基数

定义:分类变量中标签的数量被称为基数(cardinality)。变量中标签数量多被称为高基数(high cardinality)。

3.4.1 为什么高基数很重要

  • 具有太多标签的变量往往比只有少数标签的变量占主导地位,特别是在基于树的算法中。
  • 变量中的大量标签可能会引入噪声,即使有信息,也很少,因此使机器学习模型易于过拟合。
  • 一些标签可能只存在于训练数据集中,而不存在于测试数据集中,因此导致算法过度拟合训练集。
  • 相反,测试集中可能会出现训练集中没有出现的新标签,因此算法无法对新观察值进行计算。

3.4.2  如何处理高基数



所有这些方法都试图对一些标签进行分组并降低基数。用决策树对标签进行分组等同于4.2.2节中介绍的“使用决策树进行离散化”方法,该方法旨在将标签合并为更加同质的组。将罕见出现的标签归为同一类别等同于3.3.2节中介绍的方法。

编辑:王菁



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。



新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/177476
 
13 次点击