特征工程
1.含义
将数据转换为能更好表示潜在问题的特征,从而更好提高机器学习的性能。
包括数据理解,清洗,构造,选择和不平衡等。
2.目的
将数据转换为能更好地表示潜在问题的特征,从而提高机器学习的性能。比如,异 常值处理是为了去除噪声,填补缺失值可以加入先验知识,增强数据的表达。特征工程是一个入门简单,但想精通非常难的一件事。
3.内容介绍
常见的特征工程包括:
- 异常处理: 通过箱线图(或 3-Sigma)分析删除异常值; BOX-COX 转换(处理有偏分布); 长尾截断;
- 特征归一化/标准化: 标准化(转换为标准正态分布); 归一化(抓换到 [0,1] 区间); 针对幂律分布,可以采用公式:
- 数据分桶: 等频分桶; 等距分桶; Best-KS 分桶(类似利用基尼指数进行二分类); 卡方分桶;
- 缺失值处理: 不处理(针对类似 XGBoost 等树模型); 删除(缺失数据太多); 插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等; 分箱,缺失值一个箱;
- 特征构造: 构造统计量特征,报告计数、求和、比例、标准差等; 时间特征,包括相对时间和绝对时间,节假日,双休日等; 地理信息,包括分箱,分布编码等方法; 非线性变换,包括 log/ 平方/ 根号等; 特征组合,特征交叉; 仁者见仁,智者见智。 𝑙𝑜𝑔( ) 1+𝑥 1+𝑚𝑒𝑑𝑖𝑎𝑛
- 特征筛选 过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系 数法/卡方检验法/互信息法; 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ; 嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归;
- 降维 PCA/ LDA/ ICA; 特征选择也是一种降维。
4.代码示例
先导入函数库
导入数据
日常惯例先浏览数据,虽然不知道可以看出什么
下一步操作对数据中的异常值进行处理
阿泽包装了一个类用于异常值处理的代码
对异常数据我们可以不管也可以删除,这取决于你用什么算法用什么类型的机制。但是text的数据是不能动的
对特征进行构造
这一步的时候可以考虑讲测试集与训练集放在一起,方便构造
# 使用时间:data[‘creatDate’] - data[‘regDate’],反应汽车使用时间,一般来说价格与使用时间成反比
不过要注意,数据里有时间出错的格式,所以我们需要 errors=‘coerce’ # 使用时间:data[‘creatDate’] - data[‘regDate’],反应汽车使用时间,一般来说价格与使用时间成反比
#不过要注意,数据里有时间出错的格式,所以我们需要 errors=‘coerce’
看一下空数据,有 15k 个样本的时间是有问题的,我们可以选择删除,也可以选择放着。
但是这里不建议删除,因为删除缺失数据占总样本量过大,7.5%
我们可以先放着,因为如果我们 XGBoost 之类的决策树,其本身就能处理缺失值,所以可以不用管
数据分桶 以 power 为例
这时候我们的缺失值也进桶了,
为什么要做数据分桶呢,原因有很多,= =
- 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
- 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的
- LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能
- 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了
- 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化
观察数据集的类型和情况
将数据拿来使用在树模型上
我们可以再构造一份特征给 LR NN 之类的模型用
之所以分开构造是因为,不同模型对数据集的要求不同
我们看下数据分布:
我们可以看到这个图太奇怪了 有异常,我们就可以发现前面的步骤可能有问题。所以我们应该要用长尾分布截断来代替
km 的比较正常,应该是已经做过分桶了所哟i对公里数特征进行查看
后直接做归一化
利用机器学习中的oneencoder对类别特征进行操作
后进行相关性分析并进行特征筛选
##总结
特征工程入门看似比较容易但是如果要深入研究学习的话要画上更多的时间。在竞赛中大家用的模型都差不多的情况下个,特征工程就发挥了重要的作用,提高数据拟合度和精度用来拉开与其他对手的距离。在对测试集和训练集进行操作时要认真考虑是否需要一起操作或者分开操作。遇到异常值的时候,我们要根据实际的情况进行处理,以达到最好的效果。并增强数据的表达,在比赛中可能会遇到匿名数据的情况,我们更应该做好特征工程的工作发现特征之间的联系,在极少先验条件 的情况下得到更多有效的数据信息。
https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12586969.1002.6.1cd8593aXYRrlL&postId=95501
感谢天池平台给小白机会学习,也感谢阿泽的课件信息baseline