Datawhale零基础入门数据挖掘-Task3 特征工程
三、特征工程目标
3.1 特征工程目标
- 对于特征进行进一步分析,并对于数据进行处理
- 完成对于特征工程的分析,并对于数据进行一些图表或者文字总结并打卡
3.2 内容介绍
常见的特征工程包括:
1、异常值处理
- 箱线图
- BOX-COX
- 长尾截断
2、特征归一化/标准化
- 标准化(转换到标准正态分布)
- 归一化
3、数据分桶
- 等频分桶
- 等距分桶
- Best-KS分桶
- 卡方分桶
- 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
- 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的影响
- LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性
- 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形
- 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化
当然还有很多原因,LightGBM 在改进 XGBoost 时就增加了数据分桶,增强了模型的泛化性
4、缺失值处理
- 不处理(XGBoost)
- 删除(缺失数据太多)
- 插值补全
- 分箱,缺失值一个箱
5、特征构造
- 构造统计量特征,报告计数、求和、比例、标准等
- 时间特征,包括相对时间和绝对时间,节假日,双休日等
- 地理信息,包括分箱,分布编码等方法
- 线性变换,包括log/平方/根号等
- 特征组合,特征交叉
6、特征筛选
- 过滤式
- 包裹式
- 嵌入式:学习器训练过程中自动进行了特征选择
7、降维
- PCA/LDA/ICA
- 特征选择也是一种降维
3.3 代码示例
特征筛选
过滤式
# 相关性分析
print(data['power'].corr(data['price'], method='spearman'))
print(data['kilometer'].corr(data['price'], method='spearman'))
print(data['brand_amount'].corr(data['price'], method='spearman'))
print(data['brand_price_average'].corr(data['price'], method='spearman'))
print(data['brand_price_max'].corr(data['price'], method='spearman'))
print(data['brand_price_median'].corr(data['price'], method='spearman'))
0.5737373458520139
-0.4093147076627742
0.0579639618400197
0.38587089498185884
0.26142364388130207
0.3891431767902722
# 当然也可以直接看图
data_numeric = data[['power', 'kilometer', 'brand_amount', 'brand_price_average',
'brand_price_max', 'brand_price_median']]
correlation = data_numeric.corr()
f , ax = plt.subplots(figsize = (7, 7))
plt.title('Correlation of Numeric Features with Price',y=1,size=16)
sns.heatmap(correlation,square = True, vmax=0.8)