特征工程——特征预处理

  • 特征的标准化和归一化

  • 异常特征样本清洗

  • 处理不平衡数据

特征的标准化和归一化

 

由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作。

z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化。具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0,方差为1了。在sklearn中,我们可以用StandardScaler来做z-score标准化。当然,如果我们是用pandas做数据预处理,可以自己在数据框里面减去均值,再除以方差,自己做z-score标准化。

max-min标准化:也称为离差标准化,预处理后使特征值映射到[0,1]之间。具体的方法是求出样本特征x的最大值max和最小值min,然后用(x-min)/(max-min)来代替原特征。如果我们希望将数据映射到任意一个区间[a,b],而不是[0,1],那么也很简单。用(x-min)(b-a)/(max-min)+a来代替原特征即可。在sklearn中,我们可以用MinMaxScaler来做max-min标准化。这种方法的问题就是如果测试集或者预测数据里的特征有小于min,或者大于max的数据,会导致max和min发生变化,需要重新计算。所以实际算法中, 除非你对特征的取值区间有需求,否则max-min标准化没有 z-score标准化好用。

L1/L2范数标准化:如果我们只是为了统一量纲,那么通过L2范数整体标准化也是可以的,具体方法是求出每个样本特征向量x 的L2范数L2,然后用x /L2代替原样本特征即可。当然L1范数标准化也是可以的,即用x/L1代替原样本特征。通常情况下,范数标准化首选L2范数标准化。在sklearn中,我们可以用Normalizer来做L1/L2范数标准化。

此外,经常我们还会用到中心化,主要是在PCA降维的时候,此时我们求出特征x的平均值mean后,用x-mean代替原特征,也就是特征的均值变成了0, 但是方差并不改变。这个很好理解,因为PCA就是依赖方差来降维的,如果我们做了z-score标准化,所以特征的方差为1,那么就没法来降维了。

虽然大部分机器学习模型都需要做标准化和归一化,也有不少模型可以不做做标准化和归一化,主要是基于概率分布的模型,比如决策树大家族的CART,随机森林等。当然此时使用标准化也是可以的,大多数情况下对模型的泛化能力也有改进。

异常特征样本清洗

我们在实际项目中拿到的数据往往有不少异常数据,有时候不筛选出这些异常数据很可能让我们后面的数据分析模型有很大的偏差。那么如果我们没有专业知识,如何筛选出这些异常特征样本呢?常用的方法有两种。

第一种是聚类,比如我们可以用KMeans聚类将训练样本分成若干个簇,如果某一个簇里的样本数很少,而且簇质心和其他所有的簇都很远,那么这个簇里面的样本极有可能是异常特征样本了。我们可以将其从训练集过滤掉。

第二种是异常点检测方法,主要是使用iForest或者one class SVM,使用异常点检测的机器学习算法来过滤所有的异常点。

当然,某些筛选出来的异常样本是否真的是不需要的异常特征样本,最好找懂业务的再确认一下,防止我们将正常的样本过滤掉了。

处理不平衡数据

一般是两种方法:权重法或者采样法。

权重法是比较简单的方法,我们可以对训练集里的每个类别加一个权重class weight。如果该类别的样本数多,那么它的权重就低,反之则权重就高。如果更细致点,我们还可以对每个样本加权重sample weight,思路和类别权重也是一样,即样本数多的类别样本权重低,反之样本权重高。sklearn中,绝大多数分类算法都有class weight和 sample weight可以使用。

如果权重法做了以后发现预测效果还不好,可以考虑采样法。

采样法常用的也有两种思路,一种是对类别样本数多的样本做子采样, 比如训练集里A类别样本占90%,B类别样本占10%。那么我们可以对A类的样本子采样,直到子采样得到的A类样本数和B类别现有样本一致为止,这样我们就只用子采样得到的A类样本数和B类现有样本一起做训练集拟合模型。第二种思路是对类别样本数少的样本做过采样, 还是上面的例子,我们对B类别的样本做过采样,直到过采样得到的B类别样本数加上B类别原来样本一起和A类样本数一致,最后再去拟合模型。

上述两种常用的采样法很简单,但是都有个问题,就是采样后改变了训练集的分布,可能导致泛化能力差。所以有的算法就通过其他方法来避免这个问题,比如SMOTE算法通过人工合成的方法来生成少类别的样本。方法也很简单,对于某一个缺少样本的类别,它会随机找出几个该类别的样本,再找出最靠近这些样本的若干个该类别样本,组成一个候选合成集合,然后在这个集合中不停的选择距离较近的两个样本,在这两个样本之间,比如中点,构造一个新的该类别样本。举个例子,比如该类别的候选合成集合有两个样本(x1,y),(x2,y),那么SMOTE采样后,可以得到一个新的训练样本((x1+x2)/2,y),通过这种方法,我们可以得到不改变训练集分布的新样本,让训练集中各个类别的样本数趋于平衡。我们可以用imbalance-learn这个Python库中的SMOTEENN类来做SMOTE采样

转载:https://www.cnblogs.com/pinard/p/9093890.html

原文地址:https://www.cnblogs.com/bafenqingnian/p/9264976.html

时间: 2024-11-08 23:29:19

特征工程——特征预处理的相关文章

特征工程指南

特征工程数据科学最有创造力的方面.要像其他任何有创造力的尝试一样对待它,就想写一个喜剧的秀.坚持头脑风暴创建模板或公式检查/重新审视以前的工作特征分类一些预处理似乎永远都是必要的很高的基数(即包含大量不同的值)会带来很稀疏的数据填补缺失值是一个难点Onehot 编码One-of-K 给一个长度为 K 的数组编码基本方法:大多使用一些线性的算法去掉第一列避免共线性稀疏格式是记忆友好的(便于存储)目前对待缺失值的大部分实现方法都不够优雅,没有考虑变量.哈希编码对固定长度的数组进行 Onehot 编码

特征工程之特征预处理

在前面我们分别讨论了特征工程中的特征选择与特征表达,本文我们来讨论特征预处理的相关问题.主要包括特征的归一化和标准化,异常特征样本清洗与样本数据不平衡问题的处理. 1. 特征的标准化和归一化  由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作. z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化.具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-me

1. 特征工程之特征预处理

1. 前言 "数据决定了机器学习的上限,而算法只是尽可能逼近这个上限",这里的数据指的就是经过特征工程得到的数据.特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限.特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果.特征工程在机器学习中占有非常重要的作用,主要包括数据与特征预处理.特征选择和数据的降维三部分.接下去会通过3篇文章对这三方面进行介绍.今天首先讲讲数据与特征的预处理. 2. 数据与特

特征工程(Feature Enginnering)学习记要

最近学习特征工程(Feature Enginnering)的相关技术,主要包含两块:特征选取(Feature Selection)和特征抓取(Feature Extraction).这里记录一些要点,作为备忘. 特征选取 R中的FSelector包实现了一些特征选取的算法,主要分两大类: Algorithms for filtering attributes: cfs, chi.squared, information.gain, gain.ratio, symmetrical.uncertai

机器学习:特征工程

特征选择直接影响模型灵活性.性能及是否简洁. 好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护. 特征选择 四个过程:产生过程,评价函数,停止准则,验证过程. 目的:过滤特征集合中不重要特征,挑选一组最具统计意义的特征子集,从而达到降维的效果. 选择标准:特征项和类别项之间的相关性(特征重要性). - - -搜索特征子空间的产生过程- - - 搜索的算法分为完全搜索(Complete),启发式搜索(Heuristic), 随机搜索(Random) 3大类. 完全

使用Python做单机特征工程

目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 无量纲化与正则化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺失值计算 2.5 数据变换 2.6 回顾3 特征选择 3.1 Filter 3.1.1 方差选择法 3.1.2 相关系数法 3.1.3 卡方检验 3.1.4 互信息法 3.2 Wrapper 3.2.1 递归特征消除法 3.3 Embedded 3.3.1 基于惩罚项的特征选择法 3.3.2 基于

使用sklearn做单机特征工程

目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺失值计算 2.5 数据变换 2.6 回顾3 特征选择 3.1 Filter 3.1.1 方差选择法 3.1.2 相关系数法 3.1.3 卡方检验 3.1.4 互信息法 3.2 Wrapper 3.2.1 递归特征消除法 3.3 Embedded 3.3.1 基于惩罚项的特征选择法 3.3.2 基于树

机器学习之(四)特征工程以及特征选择的工程方法

关于特征工程(Feature Engineering),已经是很古老很常见的话题了,坊间常说:"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已".由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键.纵观Kaggle.KDD等国内外大大小小的比赛,每个竞赛的冠军其实并没有用到很高深的算法,大多数都是在特征工程这个环节做出了出色的工作,然后使用一些常见的算法,比如LR,就能得到出色的性能.遗憾的是,在很多的书籍中并没有直接

特征工程 vs. 特征提取

“特征工程”这个华丽的术语,它以尽可能容易地使模型达到良好性能的方式,来确保你的预测因子被编码到模型中.例如,如果你有一个日期字段作为一个预测因子,并且它在周末与平日的响应上有着很大的不同,那么以这种方式编码日期,它更容易取得好的效果. 但是,这取决于许多方面. 首先,它是依赖模型的.例如,如果类边界是一个对角线,那么树可能会在分类数据集上遇到麻烦,因为分类边界使用的是数据的正交分解(斜树除外). 其次,预测编码过程从问题的特定学科知识中受益最大.在我刚才列举的例子中,你需要了解数据模式,然后改