Datawhalechina-team-learning-data-mining本文摘录自
特征工程,是机器学习,甚至是深度学习中最为重要的一部分,在实际应用中往往也是所花费时间最多的一步,所以无论如何要深入理解和学习。
特征工程涉及到下面的内容:
1、数据预处理
1.1 缺失值的填充
-->用0,即特征对于结果没有作用。
-->特征前(后)面的值替换, 利用特征的已出现的值进行替换,而不是一个毫无意义的值。
1.2 时间格式处理
1.2.1 把 1 year 这类对象类型转换为数值。以2007-06-01为基准,算到当前的天数。
1.2.2 把 Sep 2020对象类型转换为数值。如2020,去除月份的信息,而保留年份的特征信息。
1.3 对象类型特征转换到数值
1.3.1 特殊得,针对分类型特征, 如等级A, B, C。 解决方案是,将其映射为数字1,2,3
data['grade'] = data['grade'].map({'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7}
2、 异常值处理, 基于3segama原则,即在统计学中,如果一个数据分布近似正态,那么大约 68% 的数据值会在均值的一个标准差范围内,大约 95% 会在两个标准差范围内,大约 99.7% 会在三个标准差范围内。
当发现异常值后,一定要先分清是什么原因导致的异常值,然后再考虑如何处理。
首先,如果这一异常值并不代表一种规律性的,而是极其偶然的现象,或者说你并不想研究这种偶然的现象,这时可以将其删除。
其次,如果异常值存在且代表了一种真实存在的现象,那就不能随便删除。在现有的欺诈场景中很多时候欺诈数据本身相对于正常数据勒说就是异常的,我们要把这些异常点纳入,重新拟合模型,研究其规律。能用监督的用监督模型,不能用的还可以考虑用异常检测的算法来做.
3、数据分箱
特征分箱的目的:
从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定。
数据分桶的对象:
将连续变量离散化
将多状态的离散变量合并成少状态
分箱的原因:
数据的特征内的值跨度可能比较大,对有监督和无监督中如k-均值聚类它使用欧氏距离作为相似度函数来测量数据点之间的相似度。都会造成大吃小的影响,其中一种解决方法是对计数值进行区间量化即数据分桶也叫做数据分箱,然后使用量化后的结果。
分箱的优点:
处理缺失值:当数据源可能存在缺失值,此时可以把null单独作为一个分箱。
处理异常值:当数据中存在离群点时,可以把其通过分箱离散化处理,从而提高变量的鲁棒性(抗干扰能力)。例如,age若出现200这种异常值,可分入“age > 60”这个分箱里,排除影响。
业务解释性:我们习惯于线性判断变量的作用,当x越来越大,y就越来越大。但实际x与y之间经常存在着非线性关系,此时可经过WOE变换。
特别要注意一下分箱的基本原则:
(1)最小分箱占比不低于5%
(2)箱内不能全部是好客户
(3)连续箱单调
固定宽度分箱
分位数分箱
离散数值型数据分箱
连续数值型数据分箱
卡方分箱(选做作业)
特征交互
特征和特征之间组合
特征和特征之间衍生
其他特征衍生的尝试(选做作业)
特征编码
one-hot编码
label-encode编码
**注意:**
逻辑回归等模型要单独增加的特征工程
-->对特征做归一化,去除相关性高的特征
-->归一化目的是让训练过程更好更快的收敛,避免特征大吃小的问题
去除相关性是增加模型的可解释性,加快预测过程。
特征选择
特征选择技术可以精简掉无用的特征,以降低最终模型的复杂性,它的最终目的是得到一个简约模型,在不降低预测准确率或对预测准确率影响不大的情况下提高计算速度。特征选择不是为了减少训练时间(实际上,一些技术会增加总体训练时间),而是为了减少模型评分时间。
1 Filter
方差选择法
相关系数法(pearson 相关系数)
卡方检验
互信息法
2 Wrapper (RFE)
递归特征消除法, 递归特征消除法 递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。 在feature_selection库的RFE类可以用于选择特征
3 Embedded
基于惩罚项的特征选择法, 基于惩罚项的特征选择法 使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。 在feature_selection库的SelectFromModel类结合逻辑回归模型可以用于选择特征,
基于树模型的特征选择, 基于树模型的特征选择 树模型中GBDT也可用来作为基模型进行特征选择。 在feature_selection库的SelectFromModel类结合GBDT模型可以用于选择特征.