目录
1.样本的采集与清洗
在采集数据时,会有极其异常的数据,
(图源:https://www.cnblogs.com/weibao/p/6252280.html)
这些数据一般直接舍弃。
但这样列表再删除的工作很繁琐,需要自动化方法:
(1) 结合业务情况进行过滤:比如去除crawler抓取,spam,作弊等数据
(2) 异常点检测采用异常点检测算法对样本进行分析,常用的异常点检测算法包括
- 偏差检测:聚类、最近邻等
- 基于统计的异常点检测
例如极差,四分位数间距,均差,标准差等,这种方法适合于挖掘单变量的数值型数据。全距(Range),又称极差,是用来表示统计资料中的变异量数(measures of variation) ,其最大值与最小值之间的差距;四分位距通常是用来构建箱形图,以及对概率分布的简要图表概述。
- 基于距离的异常点检测
主要通过距离方法来检测异常点,将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有绝对距离 ( 曼哈顿距离 ) 、欧氏距离和马氏距离等方法。
- 基于密度的异常点检测
考察当前点周围密度,可以发现局部异常点,例如LOF算法
2.特征与处理
常见问题与处理方法:
常见问题 | 解决方法 | 关键词 |
量纲不同 | 特征的规格不一样,不能够放在一起比较。无量纲化可以解决这一问题。 | 标准化(若特征服从正态分布)、 区间缩放法 |
存在缺失值(NAN) | 通过多种填充方法作填充/删除,具体问题具体分析。 | 0、众数、预测填充 |
定性数据不能使用 | 一般用one-hot编码。 | one-hot编码 |
特征不足 | 尽量采集更多影响因素。 |
3.特征选择
在数据预处理后,先保存一版,之后需要选择有意义的特征作为输入进行训练。
考虑特征:
- 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
- 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。
根据特征选择的形式,把特征选择方法分为三类:
- Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。sklearn中特征的方差过滤法:VarianceThreshold()简述_心事寄于秋的博客-CSDN博客
- Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
- Embedded:嵌入法,让算法自己决定使用哪些特征的方法,即特征选择和算法训练同时进行。类似于Filter方法,但是是通过训练来确定特征的优劣。
3.1 Filter (过滤法)
a. 方差选择法 (避免无区分度的特征)
先计算各个特征的方差,根据阈值,选择方差大于阈值的特征。
建议使用:sklearn中的VarianceThreshold类
sklearn中特征的方差过滤法:VarianceThreshold()简述_心事寄于秋的博客-CSDN博客
b.相关系数法 (避免无关的特征)
计算各个特征对目标值的相关系数,选择关系比较大的特征。
c. 卡方检验 (其他假设检验方法也行)
可以检验某个特征分布和输出值分布之间的相关性。得到所有特征的卡方值和显著性水平的临界值(一般为α = 0.05),给定一个卡方阈值,选择卡方较大的特征。
可以看:卡方检验原理及应用
建议使用:sklearn中的chi2类
d. 互信息法
互信息值越大,说明该特征和输出值之间的相关性越大 (没太用过)。
可以用sklearn中的mutual_info_classif(分类)和mutual_info_regression(回归)计算各个输入特征和输出特征之间的互信息。
3.2 Wrapper (包装法)
递归特征消除法(RFE),选择一个目标函数来一步步的筛选特征。
递归消除特征法使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数的对应的特征,再基于新的特征集进行下一轮训练。在sklearn中,可以使用RFE函数来选择特征。
sklearn学习——递归特征消除法(RFE)-CSDN博客
3.3 Embedded (嵌入法)
也是在不停做训练,但是使用的是特征全集。
建议使用:sklearn中,SelectFromModel函数来选择特征。
数据预处理与特征工程:Embedded嵌入法_51CTO博客_数据预处理 特征工程
3.4 寻找高级特征
用 + - × ÷ 多个特征,找到更合适的特征。比如你不知道一个区域有多少家庭,但知道一个区域的total_bedrooms & total_rooms ,可以用 前者/ 后者,得到bedrooms_per_room 这样一个特征。
4 降维
不做重点研究,记住有这样的两个方法就行了。
4.1 PCA 主成分分析法
4.2 LDA 线性判别分析法
5* 特征的标准化和归一化
个人理解,特征的标准化与归一化是在选择完模型后所做的工作,比如基于树模型的可以不做标准化和归一化,但其他一些需要;基于此,个人认为不算是在特征工程这个范围里。
但是在此引用一个处理方式:
Data Transformation: Standardization vs Normalization - KDnuggets(使用sklearn)
参考
如何使用sklearn进行数据挖掘_sk learn 数据挖掘-CSDN博客
https://www.cnblogs.com/pinard/p/9032759.html
“1. 特征的来源
2. 选择合适的特征
3. 寻找高级特征”
https://www.cnblogs.com/pinard/p/9061549.html
“1. 缺失值处理
2. 特殊的特征处理
3. 离散特征的连续化 (定性特征定量化)
4. 离散特征的离散化 (定量特征分组)
5. 连续特征的离散化 (定量特征分组)”
https://www.cnblogs.com/pinard/p/9093890.html
“1. 特征的标准化和归一化
2. 异常特征样本清洗
3. 处理不平衡数据
”