Part2 特征工程
特征工程的文章参考这篇神文,简单把内容搬运一下https://blog.csdn.net/qq_20412595/article/details/81623489#移除低方差的特征-removing-features-with-low-variance
1. 异常值和缺失值
异常值和缺失值可以按照饱和度的不同进行填充,异常值可以按照缺失值的方式去衡量
对于饱和度较低的特征,一般选择删除特征
饱和度一般的特征,可以按照将缺失值单独赋值为1类,查看这一类的重要性
饱和度较高的特征,可以采用均值,众数填充,或者可以采用knn填充
异常值的检验算法
统计学方法:箱线图,3 σ \sigma σ原则
算法:DBSCAN,iforest
-
箱线图
代表的执行方法为箱式图:
上四分位数Q3,又叫做升序数列的75%位点
下四分位数Q1,又叫做升序数列的25%位点
箱式图检验就是摘除大于Q3+3/2*(Q3-Q1)
,小于Q1-3/2*(Q3-Q1)
外的数据,并认定其为异常值;针对全量样本已知的问题比较好,缺点在于数据量庞大的时候的排序消耗 -
3 σ \sigma σ原则
认为点大多满足在μ-3σ到μ+3σ区间内,之外的都是异常点
-
dbscan
这是一种聚类检测的方法,具体可以到聚类再说
-
iforest
假设数据集有N条数据,构建一颗iTree时,从N条数据中均匀抽样(一般是无放回抽样)出ψ个样本出来,作为这颗树的训练样本。在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机选一个值,对样本进行二叉划分,将样本中小于该值的划分到节点的左边,大于等于该值的划分到节点的右边。由此得到一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直到数据集只有一条记录或者达到了树的限定高度。特征在层级之间复用
由于异常数据较小且特征值和正常数据差别很大。因此,构建iTree的时候,异常数据离根更近,而正常数据离根更远。一棵iTree的结果往往不可信,iForest算法通过多次抽取样本,构建多棵二叉树。最后整合所有树的结果,并取平均深度作为最终的输出深度,由此计算数据点的异常分值。
2. 特征选择
特征选择主要有三种方法:1.过滤(统计学思想进行相关性检验,选择特征) 2.包裹 3.嵌入(利用模型进行特征重要性排序选择特征)主要包括树模型和lasso回归
3. 正负样本不均衡
-
调整二分类中的阈值
-
选用ROC,F1,召回率
-
过采样和欠采样
过采样:重复正比例数据,实际上没有为模型引入更多数据,过分强调正比例数据,会放大正比例噪音对模型的影响
欠采样:丢弃大量数据,和过采样一样会存在过拟合的问题
SMOTE:加强版的过采样,基本思想是对少数类样本插值,合成少数类样本的新样本,从少树类样本集T中随机选取一个样本,再从T中选取K个近邻(距离的定义多种多样)。1.从这k个近邻中随机选取一个样本,2. 从0-1中随机选取一个数 3.插值得到一个新的样本 4.重复上述步骤
-
代价敏感学习
4. 特征组合
传统的特征组合有GBDT+LR,fm和deepfm,wide&deep,这部分留到推荐系统里面详细说明
5. 特征相关性
特征的高相关性对于集成学习的影响较小,对线性模型的影响相对比较大,特别是线性回归
随机森林的预测能力不受多重共线性影响。
**但是数据的解释性会被多重共线性影响。**随机森林可以返回特征的重要性(importantce),当有多重共线性时,importance会被影响。一些具体多重共线性的特征的重要性会被相互抵消,从而影响我们解释和理解特征。
比如说,特征A和B完全一样,我们在用随机森林时,它们的重要性应该非常接近(考虑到随机性)。如果我们在训练前删除特征B,那么特征A的重要性就会翻番。这一下子就影响了我们对特征、数据的理解。
我们在用随机森林时,它们的重要性应该非常接近(考虑到随机性)。如果我们在训练前删除特征B,那么特征A的重要性就会翻番。这一下子就影响了我们对特征、数据的理解。
特征相关性高往往影响的是模型的解释性和稳定性。