038.(-10.12)特征工程 额外笔记


这一版笔记,是进一步阅读特征工程相关博客时补充记录的,继篇号为017的博客。该笔记的记录具有针对性,记录的只是部分知识,一是弥补自己的空白,二是记录常用常见的方法,不是基于知识体系的全面覆盖而记录。

一、数据预处理

下面列出了对结构性数据的处理方法。
(非结构性数据:如文本数据、图像数据、声音数据。)

1.缺失值处理

1.1 多项式插值

已知n+1个互异的点,由此可得到最高项不超过n次的多项式方程。

公式:Y=AX,A=X^(-1) * Y
其中A为系数矩阵,X为特征的多次项矩阵,Y为目标值矩阵。

在这里插入图片描述

如果test_x 也存在空值,一般在缺失值的前几个或者后几个值当中,挑出一个作为参考值,将其值代入到插值模型之中,学习出一个值作为缺失值的填充值。

优点:易理解,方便实现
缺点:数据改变,多项式需要重新计算,这一点稍繁琐;多项式次数过高时函数值可能不稳定。

1.2 lagrange插值(拉格朗日)

lagrange插值是一种多项式插值。

lagrange插值多项式:

在这里插入图片描述
在这里插入图片描述

拉格朗日基本多项式的特点是在x(j)上取值为1,在其它的点上取值为0。

拉格朗日插值法(图文详解)

1.3 预测填充

(可以理解为内套机器学习吗。。)

把需要填充缺失值的某一列特征作为新的标签,通过机器学习,建模评估,预测测试集,从而填充缺失值。

1.4 具体分析

根据数据的环境、明显特点、任务背景等因素进行分析。

比如,1.有些时候,属性值缺失并不意味数据缺失而无用;2.根据数据场景选择思考合适的填充值(如行为时间点填充众数)

2.离群值处理

2.1 标准差法

1.假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,应予以剔除。

2.假设有近似服从正态分布的离散数据。

在这里插入图片描述
用μ±nσ来衡量因子与平均值的距离

2.2 绝对值差中位数法(MAD)

这是一种先需计算所有因子与中位数之间的距离总和来检测离群值的方法,适用大样本数据

在这里插入图片描述

2.3 其他

如箱型图法、图像分析法等。

3.数据变换

一般指特征构造,在后面会展开说明。

4.无量纲化

5.连续变量离散化

有些时候我们需要对数据进行粗粒度、细粒度划分,以便模型更好的学习到特征的信息。离散化有很多的好处,比如能够使我们的模型更加的简单、高效且低耗内存等优点。

离散化通用流程:对特征高效排序——候选断点——断点是否满足衡量尺度——若该离散算法存在停止准则,当满足时则不再进行离散化

粗粒度划分(连续数据离散化):也称为二值化或离散化或分桶法。

细粒度划分:在文本挖掘中,往往将段落或句子细分具体到一个词语或者字。

特征二值化

设定一个划分的阈值,当数值大于设定的阈值时,就赋值为1,;反之赋值为0。(当然不一定0/1,可根据情况自定义设定赋值)

无监督离散化

分箱
  • 等宽分箱:
    基于属性/特征值大小区间来划分,按照相同宽度将数据分成几等份。

  • 等频分箱:
    基于样本数量区间来划分,将数据分成几等份,每等份数据里面的个数(即数量/频数)是一样的。

聚类

使用聚类算法(如K-Means)将数据聚成几类,每一个类为一个划分。

6.类别数据处理

  1. 序号编码:对于合适的分类数据,每一个唯一的类别型元素对应着一个数字,即键值对 dict={key1:value1, key2:value2,…, keyk:valuek}。

  2. 独热编码:注意维度灾难问题和是否可以利用向量的稀疏。

  3. 二进制编码:先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。本质上是利用二进制对类别ID进行哈希映射。

7.其他

如数据集成、重复数据处理、数值与字符串转换问题。

其中,对于数值与字符串的转换,要注意是否含有一些特征的字符(如:空格、换行符、逗号、句号等),它们会使转换出bug。

二、特征构造

1.基本准则

2.常用方法

三、特征选择

当数据处理好之后,我们需要选择有意义的特征输入机器学习的模型进行训练。

介绍

原理:特征是否发散、特征与目标的相关性。

目的:1. 减轻维数灾难问题 ;2. 降低学习任务的难度。

区分:同样用于处理高维数据的技术还有降维

常用方法

1.Filter 过滤法

方差选择法

对方法有效性的理解:变量的方差越大,我们就可以认为它的离散程度越大,也就是意味着这个变量对模型的贡献和作用会更明显。

大体思路:先计算各个特征的方差,然后根据设定的阈值或待选择阈值的个数,选择方差大于阈值的特征。

相关系数法
  1. 计算特征与特征的相关系数

    取相关系数值的绝对值,然后把corr值大于90%~95%的两两特征中的某一个特征剔除。(考虑模型的性能)

    缺点:只是根据特征与特征之间的相关度来筛选特征,但并没有结合与目标的相关度来衡量

  2. 计算特征与目标的相关系数以及P值1

    相关性的强度确实是用相关系数的大小来衡量的,但相关大小的评价要以相关系数显著性的评价为前提。所以,要先检验相关系数的显著性,如果显著,证明相关系数有统计学意义,下一步再来看相关系数大小。 如果相关系数没有统计学意义,那意味着研究求得的相关系数也许是抽样误差或者测量误差造成的,不具有说服力。

    缺点:Pearson相关系数的一个明显缺陷是,作为特征排序机制,只对线性关系敏感。

卡方检验法(分类问题的分类变量)

卡方检验可以检验定性自变量对定性因变量的相关性。求出卡方值,然后根据卡方值匹配出其所对应的概率是否足以推翻原假设H0。

公式:在这里插入图片描述

流程:建立原假设和对立假设——计算卡方值——再根据自由度、置信度查表——较好地筛选出与定性应变量有显著相关的定性自变量

互信息法

同卡方检验法的目的相似,也能评价定性自变量对定性应变量的相关性。如果信息量越大,那么特征和这个类别的相关性越大。

在这里插入图片描述

应用场景:非常适合于文本分类(非结构化数据)的特征和类别的配准工作(*待进一步理解~)

2.Wrapper 包装法

封装器用选取的特征子集对样本(标签)集进行训练学习,**训练的精度(准确率)**作为衡量特征子集好坏的标准,经过比较选出最好的特征子集。

常用的有逐步回归(Stepwise regression)、向前选择(Forward selection)和向后选择(Backward selection)。

由组合知识可知,在这里插入图片描述

过程:组合好特征子集——每个特征子集Xi分别与标签Y进行训练学习——衡量特征好坏的不同方法(如model.score(Xi,Y))

在这里插入图片描述
特征选择模型的稳定性非常重要,稳定性差的模型很容易就会导致错误的结论;数据进行二次采样然后在子集上运行特征选择算法能够有所帮助,如果在各个子集上的结果是一致的,那就可以说在这个数据集上得出来的结论是可信的。

优点:考虑了特征之间组合以及特征与标签之间的关联性。

缺点:由于要划分特征为特征子集并且逐个训练评分,因此当特征数量较多时,计算时间又会增长;而在样本数据较少的时候,容易过拟合。

下面简单介绍应用场景及意义。(*待进一步理解)

稳定性选择(*待进一步理解)

在这里插入图片描述

稳定性选择是一种基于二次抽样和选择算法(训练模型)相结合的方法,选择算法可以是回归、分类SVM或者类似算法。

该方法下,特征值下降的不是特别急剧,且好的特征不会因为有相似的特征、关联特征而得分为0,性能突出,对于克服过拟合和对数据理解来说都是有帮助的。

递归特征消除

Recursive Feature Elimination,简称RFE。

主要思想:
反复构建模型(如SVM或者回归模型),然后选出最好的(或者最差的)的特征(可以根据评分来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法

“这个过程中特征被消除的次序就是特征的排序,实际上这是一种寻找最优特征子集的贪心算法。”

在这里插入图片描述

特征值排序

理论上来讲,如果某个特征进行排序或者打乱之后,会很明显的影响(无论正向影响还是负向影响)到模型(预测评分)效果评分,那么可以说明这个特征对模型来说是重要的;反之,说明这个特征存不存在并不会影响到模型的效能。

3.Embedded 嵌入法

也称集成法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权重值系数,根据系数从大到小选择特征。

(小技巧:一些机器学习方法本身就具有对特征进行打分的机制,如随机森林、SVM)

区分:
相比Filter,多通过训练来确定特征的优劣;

相比Wrapper,包装法根据预测效果评分来选择,而嵌入法根据预测后的特征权重值系数来选择。

常用训练:

  • 线性模型(突出独立且相关的特征,警惕互相关联的特征和噪声,对下面也是)
  • 正则化(把额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。如果运用到线性模型,一般有Lasso和Ridge,口诀:L1稀疏,L2平均稳定)
  • 树模型(平均不纯度减少 和 平均精确率减少的两种特征选择方法, 后者主要是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响,这里可以琢磨下为什么是打乱而不是扔掉)

基于模型的特征选择详解 (Embedded & Wrapper)

四、类别标签不平衡/样本不平衡处理

其实,大多数数据集都存在数据不平衡现象,这往往由问题本身决定,而我们只关注那些分布差别比较悬殊的。

这里也不妨说下,不平衡程度相同(如正负样本比例类似)的两个问题,解决的难易程度也可能不同,因为问题难易程度还取决于数据集中的数据量。 一般来说,难度从小到大为:大数据+分布均衡<大数据+分布不均衡<小数据+数据均衡<小数据+数据不均衡。对于小数据集,机器学习的方法是比较棘手的 。

此外,类别不平衡问题下,准确率作为评价指标的说服率大大降低,应考虑精确率、召回率、F1 值、F-R 曲线和 AUC 曲线

下面介绍该问题下常见的处理方法。需要点出的是,方法要根据问题情景来选择。 例如,在正负样本都足够多且比例不是特别悬殊的情况下,建议考虑采样或者加权的方法;在正负样本都非常之少的情况下,应该采用数据合成的方式;小训练集下过采样还非常容易产生过拟合。

采样

注意,简单的采样方法都可能有过拟合的风险,(可以考虑下正则化。。)

欠采样

欠采样是指把占比多的类别 A 样本数量减少到与占比少的类别 B 样本数量一致,然后进行训练。

  • 随机欠采样

    缺点:欠采样只是采取少部分数据,容易造成类别 A 的信息缺失。

  • EasyEnsemble 集成学习法

    利用集成学习机制,将占比多的类别 A 样本数据划分为若干个样本子集供不同学习器使用,与占比少的类别 B 样本数据联合起来,训练生成多个基分类器。最后,将这些基分类器组合形成一个集成学习系统。集成可采用加权模型融合或者取所有基分类器总和的平均值。

    优点:可以解决传统随机欠采样造成的数据信息丢失问题,且表现出较好的不均衡数据分类性能。

  • BalanceCascade

    利用 Boosting 的思想:先通过一次欠采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本欠采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。

  • NearMiss

    利用KNN,试图挑选其中最具代表性的大众样本。

过采样

相比欠采样,过采样花费更多时间,但是这样做也有好处。

  • 随机过采样

    采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题。

  • SMOTE 算法(数据合成)

    利用 k 近邻算法来分析已有的少数类样本,从而以插值形式合成在特征空间内新的少数类样本。

    改进:Borderline-SMOTE 与 ADASYN 。

在这里插入图片描述

加权

通过调整不同类型标签的权重值,增加占比少的类别 B 样本数据的权重,降低占比多的类别 A 样本数据权重,从而使少量类的分类识别能力与多量类能够抗衡。

关键:怎样设置更合理的权重。(待进一步理解。。)

一分类或异常检测

对于正负样本极不平衡的场景,转换角度,可以理解为:重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作如One-class SVM等。

模型选择与阈值移动

  • 模型

    选择对样本不均衡问题不敏感的模型,如决策树。

  • 阈值移动

    调整分类阈值,倾向少量类数据。

更多参考:小归巢-怎样解决样本不平衡问题

五、降维

采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。

常用方法:无监督学习的主成分分析 (PCA)。

PCA是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。

(可以阅读序号为033的相关文章,温习PCA相关知识)

六、特征监控

(待进一步理解。。)

  1. 特征有效性分析,比如特征重要性、权重(一般 sklearn 训练后可以用model方法查看)
  2. 特征监控,比如监控重要特征,防止特征质量下降,影响模型效果。

  1. 浅谈p值(p-value是什么)
    在这里插入图片描述 ↩︎

猜你喜欢

转载自blog.csdn.net/u013598957/article/details/108392896