1. 常见的特征工程包括:
1.1 异常处理:
- 通过箱线图(或 3-Sigma)分析删除异常值;
- BOX-COX 转换(处理有偏分布);
- 长尾截断;
1.2 特征归一化/标准化:
- 标准化(转换为标准正态分布);
- 归一化(抓换到 [0,1] 区间);
- 针对幂律分布,可以采用公式: log(1+x/(1+median))
1.3 数据分桶:
- List item
- 等频分桶;
- 等距分桶;
- Best-KS 分桶(类似利用基尼指数进行二分类);
- 卡方分桶;
1.4 缺失值处理:
- 不处理(针对类似 XGBoost 等树模型);
- 删除(缺失数据太多);
- 插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等;
- 分箱,缺失值一个箱;
1.5 特征构造:
- 构造统计量特征,报告计数、求和、比例、标准差等;
- 时间特征,包括相对时间和绝对时间,节假日,双休日等;
- 地理信息,包括分箱,分布编码等方法;
- 非线性变换,包括 log/ 平方/ 根号等;
- 特征组合,特征交叉;
- 仁者见仁,智者见智。
1.6. 特征筛选
- 过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法;
- 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ;
- 嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归;
1.7 降维
- PCA/ LDA/ ICA;
- 特征选择也是一种降维。
2. 特征工程
2.1 数据理解
目的:探索数据,了解数据,主要在 EDA 阶段完成。
- 定性数据:描述性质
a) 定类:按名称分类——血型、城市
b) 定序:有序分类——成绩(A B C) - 定量数据:描述数量
a) 定距:可以加减——温度、日期
b) 定比:可以乘除——价格、重量
2.2 数据清洗
目的:提高数据质量,降低算法用错误数据建模的风险。
- 特征变换:模型无法处理或不适合处理
a) 定性变量编码:Label Encoder;Onehot Encoder;Distribution coding;
b) 标准化和归一化:z分数标准化(标准正太分布)、min-max 归一化; - 缺失值处理:增加不确定性,可能会导致不可靠输出
a) 不处理:少量样本缺失;
b) 删除:大量样本缺失;
c) 补全:(同类)均值/中位数/众数补全;高维映射(One-hot);模型预测;最邻近补全;
矩阵补全(R-SVD); - 异常值处理:减少脏数据
a) 简单统计:如 describe() 的统计描述;散点图等;
b) 3∂ 法则(正态分布)/箱型图截断;
c) 利用模型进行离群点检测:聚类、K近邻、One Class SVM、Isolation Forest; - 其他:删除无效列/更改dtypes/删除列中的字符串/将时间戳从字符串转换为日期时间格式等
2.3 特征构造
目的:增强数据表达,添加先验知识。
- 统计量特征:
a) 计数、求和、比例、标准差; - 时间特征:
a) 绝对时间、相对时间、节假日、双休日; - 地理信息:
a) 分桶; - 非线性变换:
a) 取 log/平方/根号; - 数据分桶:
a) 等频/等距分桶、Best-KS 分桶、卡方分桶; - 特征组合
2.4 特征选择
目的:降低噪声,平滑预测能力和计算复杂度,增强模型预测性能。
- 过滤式(Filter):先用特征选择方法对初识特征进行过滤然后再训练学习器,特征
选择过程与后续学习器无关。
a) Relief/方差选择/相关系数/卡方检验/互信息法 - 包裹式(Wrapper):直接把最终将要使用的学习器的性能作为衡量特征子集的评
价准则,其目的在于为给定学习器选择最有利于其性能的特征子集。
a) Las Vegas Wrapper(LVM) - 嵌入式(Embedding):结合过滤式和包裹式方法,将特征选择与学习器训练过程
融为一体,两者在同一优化过程中完成,即学习器训练过程中自动进行了特征选择。
a) LR+L1或决策树
1. 箱线图![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/df791ab13c16443c4d27f5a4f75bd454.jpeg)
两端边的位置分别对应数据批的上下四分位数(Q3和Q1),在Q3+1.5IQR和Q1-1.5IQR处画两条与中位线一样的线段,这两条线段为异常值截断点,称其为内限;在Q3+3IQR和Q1-3IQR处画两条线段,称其为外限。处于内限以外位置的点表示的数据都是异常值,其中在内限与外限之间的异常值为温和的异常值(mild outliers),在外限以外的为极端的异常值(extreme outliers)。四分位距IQR=Q3-Q1。
2. 数据拼接
data = pd.concat([Train_data, Test_data], ignore_index=True)
3. 数据分桶
bin = [i*10 for i in range(31)]
data['power_bin'] = pd.cut(data['power'], bin, labels=False)
4. 数据归一化、正则化
4.1 min-max缩放
4.2 特征标准化/方差缩放
5. one-hot编码/虚拟编码
##one-hot编码
pd.get_dummies(df, prefix=['city'])
##虚拟编码
pd.get_dummies(df, prefix=['city'], drop_first=True)